SQL学习十三、更新和删除数据

UPDATE 和 DELETE 语句

在上一章中讲到了,新增、删除和修改都需要更高的权限,因为这些操作都涉及到原数据的变化。

  • 使用 UPDATE 或 DELETE 时需要遵循的重要原则
    1、除非确实打算更新和删除每一行,否则绝对不要使用不带 WHERE 子句 的 UPDATE 或 DELETE 语句。 2、保证每个表都有主键,尽可能 像 WHERE 子句那样使用它(可以指定各主键、多个值或值的范围)。
    3、在 UPDATE 或 DELETE 语句使用 WHERE 子句前,应该先用 SELECT 进行测试,保证它过滤的是正确的记录,以防编写的 WHERE 子句不正确。
    4、使用强制实施引用完整性的数据库, 这样 DBMS将不允许删除其数据与其他表相关联的行。
    (引用完整性表示 DBMS强制实施数据完整性规则。这些规则一般由提供了界 面的 DBMS管理)
    5、有的 DBMS 允许数据库管理员施加约束,防止执行不带 WHERE 子句 的 UPDATE 或 DELETE 语句。如果所采用的 DBMS支持这个特性,应该使用它。

更新数据

更新数据的时候,要注意的是条件判断一定要准确,因为稍不注意,就会更新表中的不相关的行甚至是所有行。这在生成环境将是灾难性的

SQL格式:

UPDATE 表名
SET “列=值”,“列=值”
WHERE 过滤条件

1、更新表中的特定行

比如,我们更新订单编号为20180910001订单的商品单价和购买商品数量

update oderlist_new
set quantity = 11, item_price = 9.0
where orderNo = '20180910001'

执行结果

更新成功

2、更新表中的所有行

没有where 条件限制,比如我们可以把所有商品的单价都更新为4.0

update oderlist_new
set item_price = 4.0

执行结果

更新成功

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

删除数据

同样的 ,删除数据的时候,也要注意条件判断的准确性,因为稍不注意,就会删除表中的不相关的行甚至是所有行。这在生成环境将是灾难性的,尤其是在哪些没有撤销操作的DBMS中。

SQL格式:

DELETE FROM 表名
WHERE 判断条件

1、删除表中的特定行

delete from oderlist_new
where orderNo = '20180910001'

执行结果

2、删除表中的所有行

一般情况下这种操作是不允许的

delete from oderlist_new

但这种方法在SQLite 中无法将递增数归零,比如自增主键id。
在SQLite 中如果要将递增数归零,可以使用以下方法:

DELETE FROM sqlite_sequence WHERE name = 'table_name';

当 SQLite 数据库中包含自增列时,会自动建立一个名为 sqlite_sequence 的表。这个表包含两个列:name 和 seq。name 记录自增列所在的表,seq 记录当前序号(下一条记录的编号就是当前序号加 1)。如果想把某个自增列的序号归零,只需要修改 sqlite_sequence 表就可以了。

UPDATE sqlite_sequence SET seq = 0 WHERE name = 'table_name';

3、删除重复数据只保留一行

DELETE FROM tablezzl 
WHERE 1=1
    AND `name` in (SELECT * FROM ( (SELECT `name` `names` FROM tablezzl GROUP BY name HAVING COUNT(`name`)>1) ) a)
    AND id not in (SELECT * FROM ( (SELECT MIN(id) ids FROM tablezzl GROUP BY NAME HAVING COUNT(`name`)>1) ) b)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值