TRUNCATE TABLE(DDL) 和DELETE FROM(DML)区别?
首先相同点:两个都可以清空表数据 不同点:1.TRUNCATE TABLE 清空数据之后不可以进行回滚操作,可能有的人会把set autocommit =false 这样关掉,但也是不起作用的,因为TRUNCATE TABLE 这个里面默认是自动提交的,它这个自动提交,不受set autocommit 的影响。 DELETE FROM这个清空完表数据之后,可以进行一个回滚操作,我们只需要主动的去修改set autocommit =false 关掉即可,需要注意的是,回滚rollback只能回滚,提交后的最后一次操作。
加分项:在效率的出发点来讲,TRUNCATE TABLE 要比DELETE要快,因为TRUNCATE TABLE使用的系统资源和日志较少,不用去考虑备份啊回滚的一些操作,反之DELETE每次操作我们都需要进行一个备份啊,占用资源就会相对比较大,效率也就低。 《阿里巴巴规范手册》 从实际开发的角度来想,尽管DELETE 要比TRUNCATE TABLE效率要低,占用资源也会比较大,但DELETE可以对数据进行备份,尽管我们有些时候马虎大意了,也可以及时止损,在相较于安全问题的方面,浪费点资源怎么了?
哈哈哈经典这后半段,但却是也没毛病,在安全问题方面,就是浪费些许资源没什么问题,难不成为了效率,搞的我们数据很不稳定,随时一不下心整个永久性丢失,那不就凉了。
刚才写的sql做下笔记 Mysql 8.0新特性,原子化:简单来说,要么同时成功,要么同时失败 例子:我新建了一个数据库,在这个数据库里面我建了一张表,然后我删一张存在的表和一个不存在的表,报错肯定会是报错的,但存在的那张表会删除成功么? 答案是不会,这要是在mysql5.7的时候这种操作的话,存在的那张表会被删除。
|