SQL回顾(三)

一、sql update语句
update主要用于更新表中已存在的记录,其语法如下:
UPDATE table_name
SET column1=value1,column2=value2,…
WHERE some_column=some_value

update websites set	alexa='500',country='CN' where name='aka';

在这里插入图片描述
注意:在使用update语句进行表记录更新时应该格外小心,如果省略where子句,将直接导致整个表数据全部更新。在工作时执行没有where子句的update要慎重。
为了避免这种情况的出现,在 MySQL 中可以通过设置 sql_safe_updates 这个自带的参数来解决,当该参数开启的情况下,你必须在update 语句后携带 where 条件,否则就会报错。

set sql_safe_updates=1;

二、sql delete语句
delete语句用于删除表中的行,其语法如下:
DELETE FROM table_name
WHERE some_column=some_value;

delete from websites where name='test';

在这里插入图片描述
注意:你可以使用delete from table_name 来删除表中所有记录,但这意味着表结构仍然存在,属性及索引将保持不变。与drop直接删除不同。

三、sql语句中三个删除的具体区别

drop table_name;//将这个表完全删除包括表结构,且数据不可回滚恢复。

truncate table_name;//删除表内容,不包括结构及索引,且数据不可回滚恢复。

delete table_name;//删除表内容,不包括结构及索引,数据可回滚恢复。

总结:
相同点
truncate 和不带 where 子句的 delete, 以及 drop 都会删除表内的数据。
不同点:
a.truncate 和 delete 只删除数据不删除表的结构(定义) ,drop 语句将删除表的结构被依赖的约束(constrain), 触发器(trigger), 索引(index); 依赖于该表的存储过程/函数将保留, 但是变为 invalid 状态。

b.delete 语句是 dml, 这个操作会放到 rollback segement 中, 事务提交之后才生效; 如果有相应的 trigger, 执行的时候将被触发。 truncate, drop 是 ddl, 操作立即生效, 原数据不放到 rollback segment 中, 不能回滚。 操作不触发 trigger。

c.delete 语句不影响表所占用的 extent, 高水线(high watermark)保持原位置不动。 显然 drop 语句将表所占用的空间全部释放 。 truncate 语句缺省情况下见空间释放到 minextents 个 extent, 除非使用 reuse storage; truncate会将高水线复位(回到最开始)。

d.速度:一般来说: drop > truncate > delete 。

e.安全性: 小心使用 drop 和 truncate, 尤其没有备份的时候。否则哭都来不及。使用上, 想删除部分数据行用 delete, 注意带上 where 子句。 回滚段要足够大。想删除表, 当然用 drop。想保留表而将所有数据删除。如果和事务无关, 用 truncate 即可。 如果和事务有关, 或者想触发 trigger, 还是用 delete。
如果是整理表内部的碎片, 可以用 truncate 跟上 reuse stroage, 再重新导入/插入数据。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值