当前位置: 代码迷 >> 综合 >> MySQL的delete和drop以及不常见的truncate的异同分析
  详细解决方案

MySQL的delete和drop以及不常见的truncate的异同分析

热度:37   发布时间:2024-02-13 17:59:14.0

       MySQL的delete和drop以及不常见的truncate的异同分析

首先说一下delete和drop,这两个命令是常用的删除命令,在MySQL中,删除数据库还是删除表,或者删除表内字段,删除用户,都是有广泛的使用,但drop命令使用更为广泛,并且删除更为彻底。

删除数据库: 这个没什么好说的,只有drop命令, drop database 数据库名称,通常加 if exists,也就是

drop database if exists 数据库名;

删除表:drop table if exists 数据库名.表名; 这个命令执行后表也被删除,但可以回滚操作恢复表。

truncate table if exists 数据库名.表名; 这个命令执行后表仍然在,表的内容被删除清空了。该操作后无法恢复数据

有drop命令和truncate命令。

删除用户:假设建立了用户WordPress,现在要删除它。命令如下:

CREATE USER 'wordpress'@'localhost' IDENTIFIED BY '密码';
CREATE USER 'wordpress'@'%' IDENTIFIED BY 'shiGuang_32';

当然了,通常我们建立完用户后,都是有用处的,会赋予各种权限以使用用户,对吧。假设赋权 select 所有库。

GRANT select ON wordpress.* TO 'wordpress'@'localhost' IDENTIFIED BY '密码';

DROP USER  if exists wordpress@'localhost';
DROP USER  if exists wordpress@'%';

drop删除用户就是彻底删除了,即使你在建立同名用户wordpress,也需要重新赋权。
DELETE FROM USER  WHERE HOST='localhost' AND USER='wordpress';

DELETE FROM USER  WHERE HOST='%' AND USER='wordpress';

这个方式删除用户后,在建立相同用户wordpress,不需要重新赋权,以往的赋权 权力仍然在、本例中不需要再次赋予select。

总结:

1.drop删除掉的用户不仅将user表中的数据删除,还会删除诸如db和其他权限表的内容。而(方法二)只是删除了user表的内容,其他表不会被删除,后期如果命名一个和已删除用户相同的名字,权限就会被继承。

2.当你不再需要该表时, 用 drop;当你仍要保留该表,但要删除所有记录时, 用 truncate;当你要删除部分记录或者有可能会后悔的话, 用 delete。truncate只能整张表删除,表字段无法删除,自然,没有配合where语句的情况。

3.truncate 相当于保留原mysql表的结果,重新创建了这个表,所有的状态都相当于新的,而delete的效果相当于一行行删除,所以可以rollback;

4.效率上 truncate 比 delete快,而且 truncate 删除后将重建索引(新插入数据后id从0开始记起),而 delete不会删除索引 (新插入的数据将在删除数据的索引后继续增加)

5.delete 操作后返回删除的记录数,而 truncate 返回的是0或者-1(成功则返回0,失败返回-1);

 

  相关解决方案