|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
使为了数据安全,我们搭建了主从。但实时主从备份只能防止硬件问题,比如主库的硬盘损坏。但对于误操作,则无能为力。比如在主库误删一张表,或者一个update语句没有指定where条件,导致全表被更新。我们都晓得truncatetable能够用来删除全部表的内容,它与delete前面不跟where前提的效果是一样。但除此以外,我们还分明它们之间有别的的区分吗?本章我们将一同会商truncate与delete区分。
我们先看一下truncatetable的申明:
删除表中的一切行,而不纪录单个行删除操纵。TRUNCATETABLE在功效上与没有WHERE子句的DELETE语句不异;可是,TRUNCATETABLE速率更快,利用的体系资本和事件日记资本更少。
truncatetable的语法:
truncatetable要删除数据的表名
区分:
1,truncate删除数据后,表中标识列重置为界说的种子值,也就是标识列从头入手下手计数,而使
用delete删除数据,则会保存标识计数器,新的自增量会从删除前的最年夜值入手下手计数。
2,利用truncate删除数据将不触发触发器,而delete会触发delete触发器。
3,truncate所占用的事件日记空间会很少,由于truncate不管帐录删除历程,而delete每删除一行数据,城市在事件日记中纪录一条数据,已便往后可以恢单数据。也就是说,利用truncate删除的数据不成恢复,但速率比delete要快良多。而经由过程delete删除的数据能够经由过程备份文件来恢复。
4,truncate是一个ddl言语,它会被隐式提交,以是不克不及经由过程rollback命令来取消truncate命令。
以上四点为对照主要的部分,晓得了下面四点后,也就也许可以分明的懂得甚么时分用truncate,甚么时分用delete了。
以下为对照笼统的区分:
5,truncate利用的锁对照少,由于利用truncatetable时是锁定表和页,而利用delete则是锁定表中的一切行以便删除。
6,利用delete删除一切数据,在表中仍会留下一个空页,也就是删除前的数据所占用的空间还被占用着,不会开释失落(以后能够经由过程别的命令来开释),而利用truncatetable则不会留下任何页。
7,truncate会从头设置表的索引,以是利用truncate操纵后的表的索引速率会比delete操纵后的表要快一些。
注重:固然truncatetable在删除数据的速率上会占据必定的上风,但并非在一切的情形我们都可使用truncate,存在以下情形就利用truncate就会失利。
1,要删除数据的表包括foreignkey束缚,而delete则能够经由过程级联删除来删除相干联的数据。
2,被索引视图援用过的表,也不克不及利用truncate.
以上为自己收拾的truncatetable与delete之间的区分,有不合错误或遗漏的部分请人人指出来,一同会商。支持多线程,充分利用CPU资源 |
|