MySQL 学习笔记 —— 16、更新和删除数据

更新数据

更新(修改)表中的数据,可以使用 UPDATE 语句,有两种使用 UPDATE 的方式:

  1. 更新表中的特定行
  2. 更新表中的所有行

注意:
在使用 UPDAT 时一定要细心,因为稍不注意就会更新表中的所有行
在客户端/服务器的 DBMS 中,使用 UPDATE 语句可能需要特殊的安全权限

基本的 UPDATE 语句由三部分组成,分别是:

  1. 要更新的表
  2. 列名和它们的新值
  3. 确定要更新行的过滤条件

例子,客户 10005 现在有了电子邮箱地址,记录需要更新,其语句如下:

UPDATE Customers
SET cust_email = 'kim@thetoystore.com'
WHERE cust_id = '10005';

图1

UPDATE 语句总是以要更新的表名开始

在这个例子中,要更新的表名为 Customers:UPDATE Customers

SET 命令用来将新值赋给被更新的列

在这里,SET 子句设置 cust_email 列为指定的值:SET cust_email = 'kim@thetoystore.com'

UPDATE 语句以 WHERE 子句结束,它告诉 DBMS 更新哪一行

如果没有 WHERE 子句,这个电子邮箱地址将更新表中的所有行,不是我们预期的结果:WHERE cust_id = '10005';

更新多个列的语法稍有不同:

UPDATE Customers
SET  cust_contact = 'Sam Roberts', cust_email = 'sam@toyland.com'
WHERE cust_id = '10006';

图2

在更新多个列时,只需要使用一条 SET 命令,每个“列=值”对之间用逗号分隔(最后一列不需要用逗号)

UPDATE 语句中使用子查询 :
UPDATE 语句中可以使用子查询,使得能用 SELECT 语句检索出的数据更新列数据

IGNORE 关键字 :
如果用 UPDATE 语句更新多行,并且在更新这些行中的一行或多行时出一个现错误,则整个 UPDATE 操作被取消(错误发生前更新的所有行被恢复到它们原来的值)。为即使是发生错误,也继续进行更新,可使用 IGNORE 关键字,如下所示:UPDATE IGNORE 表名...

要删除某个列的值,可以设置它为 NULL (假如表定义允许 NULL 值)

如下进行:

UPDATE Customers
SET cust_email = NULL
WHERE cust_id = '10006';

图3

NULL 用来去除 cust_email 列中的值,这与保存空字符串很不同(空字符串用 ‘’ 表示,是一个值),NULL 表示没有值

删除数据

从一个表中删除(去掉)数据,使用 DELETE 语句,有两种使用 DELETE 的方式:

  1. 从表中删除特定的行
  2. 从表中删除所有的行

注意:
在使用 DELETE 时一定要细心,因为稍不注意,就会错误地删除表中的所有行
在客户端/服务器的 DBMS 中,使用 DELETE 语句可能需要特殊的安全权限

如下代码,从 Customers 表中删除一行:

DELETE FROM Customers
WHERE cust_id = '10007';

图4

DELETE FROM 要求指定从中删除数据的表名,WHERE 子句过滤要删除的行

在上述例子中,如果省略 WHERE 子句,它将删除表中的每一个顾客

友好的外键:
存在外键时,DBMS 使用它们实施引用完整性

例如要向 Products 表中插入一个新产品,DBMS 不允许通过位置的供应商 id 插入它,因为, vend_id 列是作为外键连接到 Vendors 表的

DBMS 通常可以防止删除某个关系需要用的行

例如要从 Products 表中删除一个产品,而这个产品用在 OrderItems 的已有订单中,那么 DELETE 语句将抛出错误并终止

DELETE 不需要列名或通配符
DELETE 删除整行而不是删除列,要删除指定的列,使用 UPDATE 语句

删除表的内容而不是表:
DELETE 语句从表中删除行,甚至是删除表中所有行,但是,DELETE 不删除表本身

更快的删除:
如果想从表中删除所有的行,不要使用 DELETE
可以使用 TRUNCATE TABLE 语句,它可以完成相同的工作,而速度更快(因为不记录数据的变动)

TRUNCATE 实际是删除原来的表并重新创建一个表,而不是逐行删除表中的数据

更新和删除的指导原则

UPDATEDELETE 语句中,如果省略了 WHERE 子句,则 UPDATEDELETE 将被应用到表中的所有行,所有在使用这两条语句时,需要注意一些事项:

  1. 除非确实打算更新和删除每一行,否则绝对不要使用不带 WHERE 子句的 UPDATEDELETE 语句
  2. 保证每个表都有主键,尽可能像 WHERE 子句那样使用它
  3. UPDATEDELETE 语句使用 WHERE 子句前,应该先用 SELECT 进行测试,保证它过滤的是正确的记录
  4. 使用强制实施引用完整性,这样 DBMS 将不允许删除其数据与其他表相关联的行
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值