1、DELETE 属于数据库 DML 操作语言,只删除数据不删除表的结构,会走事务,执行时会触发 trigger;
2、在 InnoDB 中, DELETE 其实并不会真的把数据删除,mysql 实际上只是给删除的数据打了个标记为已删除,因此 delete 删除表中的数据时,表文件在磁盘上所占空间不会变小,存储空间不会被释放,只是把删除的数据行设置为不可见。虽然未释放磁盘空间,但是下次插入数据的时候,仍然可以重用这部分空间(重用→覆盖)。
3、DELETE 执行时,会先将所删除数据缓存到 rollback segement 中,事务commit 之后生效;
4、delete from table_name 删除表的全部数据,对于MyISAM 会立刻释放磁盘空间,InnoDB 不会释放磁盘空间;
5、对于delete from table_name where xxx 带条件的删除,不管是InnoDB还是 MyISAM 都不会释放磁盘空间;
6、delete 操作以后使用 optimize table table_name 会立刻释放磁盘空间。不管是 InnoDB 还是 MyISAM 。所以要想达到释放磁盘空间的目的,delete以后执行 optimize table 操作。
Was this helpful?
0 / 0