【MySQL】0.常用命令

【MySQL】0.常用命令

积累工作过程中遇到的SQL:

desc tableName;   # 查看表的结构

1 . drop、truncate 、delete的区别:

相同点:
都会删除表中的数据

不同点:
1)drop、truncate都是DDL语句(数据定义语句)执行后自动提交,delete是DML,事务提交
2)drop 删除跟表有关的一切,包括索引、约束、触发器,依赖该表的存储过程/函数保留,状态变为invalid,     truncate 和 delete 只删除数据
3)drop 语句将表占用空间释放
  truncate 语句在缺省情况下,将空间释放到minexents个extent,除非使用reuse storage;truncate会将高水线复位(回到最开始)
  delete 不影响表占用的extent,高水平(high watermark保持原位置不动)
4)速度,一般是 drop>truncate>delete
5)安全性:小心使用 drop 和 truncate
   删除部分行:delete,回滚段空间要大
   删除表:drop
   保留表但是删除数据,如果事务无关,用truncate,事务有关或想触发trigger,用delete
(如果想整理表内部的碎片,可以用truncate + reuse stroage,再重新导入/插入数据)
6)truncate table在功能上与不带where子句的delete语句相同,两者均删除表中的全部行,但truncate使用的系统资源和日志少,更快。truncate 通过释放存储表中的数据页来删除数据,并且只在事务日志中记录页的释放。
7)truncate table删除数据,新行标识计数值重置为种子。delete删除数据,计数值不变。
8)对于有 foreign key约束引用的表,不能使用truncate table,而应该使用delete语句,由于truncate table不记录在日志中,所以它不能激活触发器
9)truncate table 不能用于参与了索引视图的表

continue…

0 0 vote
Article Rating
Subscribe
提醒
guest
0 评论
Inline Feedbacks
View all comments