《SQL必知必会》第十六课 更新和删除数据 利用SQL的UPDATE和DELETE语句更新和删除数据

第十六课 更新和删除数据

#利用SQL的UPDATE和DELETE语句更新和删除数据
#使用UPDATE和DELETE语句更新和删除数据时可能存在的危险
#WHERE子句对UPDATE和DELETE语句的重要性
#为保证数据安全应遵循的指导原则

一、更新数据

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

  • 更新表中的特定行
  • 更新表中的所有行

注意1:
不要省略WHERE子句:
#使用UPDATE时一定要细心。稍不注意,就会更新表中的所有行

注意2:
UPDATE与安全:
#在客户端/服务器的DBMS中,使用UPDATE语句可能需要特殊的安全权限
#使用UPDATE前,应该保证自己有足够的安全权限

基本的UPDATE语句由三个部分组成:

[1] - 要更新的表
[2] - 列名和它们的新值
[3] - 确定要更新哪些行的过滤条件

Customers表

在这里插入图片描述

【1】UPDATE customers SET cust_email = 'Kim@thetoystore.com' WHERE cust_id = '1000000005';
#客户1000000005的电子邮件地址记录需要更新
#UPDATE语句以要更新的表名开始,此例要更新的表名为customers
#SET命令用来将新值赋给被更新的列,此例SET子句设置cust_email列为指定的值
#UPDATE语句以WHERE子句结束,其告知DBMS更新哪一行
#没有WHERE子句,DBMS将会用这个电子邮件地址更新Customers表的所有行
在这里插入图片描述
【2】UPDATE customers SET cust_contact = 'Sam Roberts', cust_email = 'Sam@toyland.com' WHERE cust_id = '1000000006';
#更新多个列
#需要使用一条SET命令每个“列=值”对之间用逗号分隔(最后一列之后不用逗号)
#此列更新顾客1000000006的cust_contact和cust_email列
在这里插入图片描述
注意3:
在UPDATE语句中使用子查询:
#UPDATE语句可以使用子查询,使得能用SELECT语句检索出的数据更新列数据

注意4:
FROM关键字:
#有些SQL实现支持在UPDATE语句中使用FROM子句,用一个表的数据更新另一个表的行

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

【3】UPDATE customers SET cust_email = NULL WHERE cust_id = '1000000005';
#NULL用来去除cust_email列中的值
#这与保存空字符串很不同(空字符串用‘ ’表示,是一个值)
#NULL表示没有值
在这里插入图片描述

二、删除数据

#从一个表中删除(去掉)数据,使用 DELETE语句

#使用DELETE的两种方式:

  • 从表中删除特定的行
  • 从表中删除所有行

注意5:
不要省略WHERE子句:
#使用DELETE时一定要细心。稍不注意,就会删除表中所有行
注意6:
UPDATE与安全:
#在客户端/服务器的DBMS中,使用DELETE语句可能需要特殊的安全权限
#使用DELETE前,应该保证自己有足够的安全权限

【4】DELETE FROM customers WHERE cust_id = '1000000006';
#从customers表中删除指定的行
#DELETE FROM要求指定从中删除数据的表名
#WHERE子句过滤要删除的行
#此例只删除顾客1000000006
#如果省略WHERE子句,它将删除表的每一行
在这里插入图片描述
使用外键确保引用完整性的一个好处是,DBMS通常可以防止删除某个关系需要用到的行,这是总要定义外键的理由之一。

注意7:
FROM关键字:
#在某些SQL实现中,跟在DELETE后的关键字FROM是可选的
#即使不需要,也最好提供这个关键字,保证SQL代码在DBMS之间的可移植性

注意8:
[1]DELETE不需要列名或通配符
[2]DELETE删除整行而不是删除列
[3]要删除指定的列,请使用UPDATE语句

注意9:
DELETE语句从表中删除行,甚至删除表中所有行,但是DELETE不删除表本身

注意10:
更快的删除表中所有行:
#从表中删除所有行,可用TRUNCATE TABLE语句
#TRUNCATE TABLE语句完成与DELETE相同的工作,速度更快

三、更新和删除的指导原则

使用UPDATE或DELETE时所遵循的重要原则

  • 除非确实打算更新和删除每一行,否则绝对不要使用不带WHERE子句的UPDATE或DELETE语句
  • 保证每个表都有主键,尽可能像WHERE子句那样使用它(可以指定各主键、多个值或值的范围)
  • 在UPDATE或DELETE语句使用WHERE子句前,应该先用SELECT进行测试,保证它过滤的是正确的记录,以防编写的WHERE子句不正确
  • 使用强制实施引用完整性的数据库,这样DBMS将不允许删除其数据与其他表相关联的行
  • 有的DBMS允许数据库管理员施加约束防止执行不带WHERE子句的UPDATE或DELETE语句。如果所采用的DBMS支持这个特性,应该使用它
  • 若是SQL没有撤销(undo)按钮,应该非常小心地使用UPDATE和DELETE,否则你会发现自己更新或删除了错误的数据
程序代码(DBMS:MySQL):
UPDATE customers
SET cust_email = 'Kim@thetoystore.com'
WHERE cust_id = '1000000005';

UPDATE customers
SET cust_contact = 'Sam Roberts',
cust_email = 'Sam@toyland.com'
WHERE cust_id = '1000000006';

UPDATE customers
SET cust_email = NULL 
WHERE cust_id = '1000000005';

DELETE FROM customers
WHERE cust_id = '1000000006';

需要完整代码的小伙伴可关注微信公众号:菜田里守望者
在这里插入图片描述
打开微信扫一扫关注吧,你们的支持就是我的动力

参考文献:
【1】《SQL必知必会》第四版 人民邮电出版社 [美] Ben Forta 著 钟鸣 刘晓霞 译

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值