本节将记录如何使用 UPDATE 和 DELETE 来进一步操纵表

鄙人感觉这两个语句是非常简单并且直观的

更新数据

使用 UPDATE 非常简单,你只需给出三个信息:

  • 要更新的表
  • 列名和它的新值
  • 确定要更新哪些行的过滤条件

例如,一位顾客有了新的电子邮件地址,因此记录需要更新

1
2
3
UPDATE Customers                        # 表名
SET cust_email = '[email protected]' # 新的值
WHERE cust_id = 1000000005; # 指定对象,不然就是更新整个表了~

当然,可以一次更新多个列

1
2
3
4
UPDATE Customers
SET cust_contact = 'Sam Roberts',
cust_email = '[email protected]'
WHERE cust_id = 1000000006;

记住只需要一个 SET ,并且每对数据直接要用逗号分隔

提示:在 UPDATE 语句中使用子查询

UPDATE 语句中可以使用子查询,这样可以用 SELECT 的检索结果更新数据

提示:FROM 关键字

某些 DBMS 支持在 UPDATE 中使用 FROM 子句,用一个表的数据更新另一个表的行

删除数据

UPDATE 类似, DELETE 也非常简单,但是一定不要忘了 WHERE 子句,不然就全删完了

下面的语句从 Customers 表中删除一行

1
2
DELETE FROM Customers
WHERE cust_id = 1000000006;

关于 DELETE 的几个知识点:

  • DELETE 不需要列名或通配符
  • DELETE 删除整行而不是删除列
  • DELETE 删除的是表的内容而不是表,你可以删除表中的所有行,但不能删除表本身
提示:友好的外键

在第 12 节中讲解了联结,简单联结两个表只需要这两个表中的公共字段。也可以让 DBMS 通过使用外键来严格实施关系。存在外键时,DBMS 使用它们实施引用完整性。例如要向 Products 表中插入一个新产品,DBMS 不允许通过未知的供应商 ID 插入它。因为 vend_id 列是作为外键连接到 Vendors 表的。而在删除时也是同理,例如要从 Products 表中删除一个产品,而这个产品用在 OrderItems 的已有订单中,那么 DELETE 语句将抛出错误并终止。这是总要定义外键的一个理由

提示:更快地删除

如果需要删除所有的行,可使用 TRUNCATE TABLE ,它更快,因为不记录数据的变动