3.5 数据更新

 思维导图:

3.5.1 插入数据

**数据更新操作笔记**

---

**概述:**
数据更新操作在SQL中主要包括三种:插入、修改和删除。以下主要集中于插入数据的操作。

---

**3.5.1 插入数据:**

**1. 插入单一元组:**
- 格式:

  INSERT INTO <表名> [(<属性列1>, <属性列2>, ...)] VALUES (<常量1>, <常量2>, ...);

- 特点:
  - 如果没有指定属性列,则必须为表中的所有列提供值,并且与创建表时的列顺序相同。
  - 字符串值必须用英文单引号括起来。
  - 在表定义时标记为NOT NULL的属性列不能赋予NULL值。

- 例子:

  INSERT INTO Student (Sno, Sname, Ssex, Sdept, Sage) VALUES ('201215128', '陈冬', '男', 'IS', 18);
  INSERT INTO Student VALUES ('201215126', '张成民', '男', 18, 'CS');
  INSERT INTO SC(Sno, Cno) VALUES ('201215128', '1');

**2. 插入子查询结果:**
- 格式:
 

  INSERT INTO <表名> [(<属性列1>, <属性列2>, ...)] <子查询>;

- 特点:
  - 子查询可以生成多个元组的结果,然后将这些结果一次性插入目标表中。
  - 子查询常常用于数据转移或数据转换。

- 例子:

  CREATE TABLE Dept_age (Sdept CHAR(15), Avg_age SMALLINT);
  INSERT INTO Dept_age (Sdept, Avg_age) SELECT Sdept, AVG(Sage) FROM Student GROUP BY Sdept;

---

**小结:**
插入操作是SQL的基础功能之一,通常用于将新数据添加到数据库中。为确保数据的一致性和完整性,需要确保在插入数据时遵循表的结构和约束。插入子查询的结果为高级功能,它可以方便地将一个查询的输出转移到另一个表中。

3.5.2 修改数据笔记

---

**概述:**
修改数据,也称为更新数据,是SQL中的一个基础操作。它用于修改表中满足特定条件的数据。

---

**基本格式:**

UPDATE <表名>
SET <列名>=<表达式>[, <列名>=<表达式>...]
[WHERE <条件>];

- 特点:
  - `SET` 子句用于指定要修改的列及其新的值。
  - `WHERE` 子句用于指定要更新的行。如果省略,所有行都会被更新。

---

**1. 修改单个元组的值:**
- 用于更新满足特定条件的单个记录。
  
  **例子:**

  UPDATE Student SET Sage=22 WHERE Sno='201215121';

**2. 修改多个元组的值:**
- 可以同时更新多个记录。
  
  **例子:**

  UPDATE Student SET Sage=Sage+1;

**3. 使用子查询的修改语句:**
- 子查询可以用于构造更复杂的更新条件。
  
  **例子:**
 

  UPDATE SC 
  SET Grade=0 
  WHERE Sno IN 
  (SELECT Sno FROM Student WHERE Sdept='CS');

 

---

**注意点:**

- 更新操作要小心进行,因为一旦数据被修改,原始数据将无法恢复(除非有备份)。
- 使用 `WHERE` 子句是很重要的,否则可能会误更改不应该更改的数据。
- 与插入数据时一样,更新数据时也需要确保数据的一致性和完整性。

---

**小结:**
修改数据是一个强大的操作,但它也可能是危险的,因为错误的更新可能导致数据损失或不一致。始终建议在执行更新操作之前进行备份,并确保更新语句的准确性。

 总结:

**SQL数据更新总结**

---

**重点**:

1. **基本命令理解**:
   - `INSERT`: 添加数据到表中。
   - `UPDATE`: 修改表中已存在的数据。
   - `DELETE`: 从表中删除数据。

2. **条件指定**:
   - 使用 `WHERE` 子句精确地定位要更新或删除的数据。

3. **子查询使用**:
   - 在数据更新操作中,子查询可以用于获取或匹配要更新或删除的数据。

---

**难点**:

1. **完整性约束**:
   - 数据更新可能会违反表的约束条件,例如主键、外键、唯一约束等。

2. **复杂的子查询**:
   - 有时候,你需要编写嵌套的、复杂的子查询来定位或获取要更新的数据。

3. **性能考虑**:
   - 大量的数据更新或删除可能会影响数据库性能,需要合理的索引和查询优化。

4. **事务管理**:
   - 确保数据的原子性、一致性、隔离性和持久性(ACID属性)。

---

**易错点**:

1. **不指定WHERE子句**:
   - 如果在`UPDATE`或`DELETE`命令中忘记指定`WHERE`子句,可能导致修改或删除整个表的数据。

2. **数据类型不匹配**:
   - 在`INSERT`或`UPDATE`时,如果数据类型与列类型不匹配,会导致错误。

3. **违反参照完整性**:
   - 例如,删除一个在另一表中仍被引用的记录。

4. **忘记提交或回滚事务**:
   - 如果在使用事务时忘记提交(COMMIT)或在出错时回滚(ROLLBACK),可能导致数据不一致或锁定问题。

5. **不正确的子查询返回**:
   - 子查询应返回适当数量的列和行以匹配主查询的需求。返回多余的数据或不返回数据都可能导致错误。

---

**使用技巧**:

1. **备份**:在进行大规模的数据更新前,总是备份数据库。
2. **测试**:在生产环境中进行更新前,先在测试环境中验证SQL语句。
3. **使用事务**:确保在出现错误时能回滚到更新前的状态。
4. **限制更新行数**:在更新大量数据时,考虑分批进行以避免性能问题。

总之,数据更新是SQL中的核心功能,但也是高风险的操作。正确理解并谨慎使用相关命令是非常关键的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夏驰和徐策

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值