mysql delete in 删除用drop和delete方法删除用户的区别

MySQL delete/truncate/drop的差别分析 - CSDN博客
MySQL delete/truncate/drop的差别分析
用户想要删除数据表可以使用delete、truncate以及drop来删除数据。从功能上讲不带where子句的delete、truncate和drop是相似的。
三者之间的不同之处主要包括以下几点:
1、删除内容
drop操作会删除表结构、依赖的约束、索引以及触发器,并且会将依赖该表的所有存储过程和视图设置为invalid。
truncate和delete则是只会删除表中的数据,并不会删除表结构。
因此如果该表以后不再需要的话可以使用drop,而如果后续还需要的话可以通过truncate或delete,因为这样可以不需要再重新建立表。
2、删除空间
delete操作并不会更改所占用的区的空间,高水位线不会发生改变。
drop操作就会直接删除整个表空间。
truncate则是相对于先执行drop操作,然后再执行create操作,执行完成后会恢复初始的表空间。
3、语句类型
delete 语句是DML语句,这个操作会放到 rollback segement 中,事务提交之后才生效,并且可以执行对应的触发器。
truncate、drop是DDL操作,会包含implicit commit,因此不能回滚,也不能不触发触发器。
从第二点的描述中可以推断truncate的执行效率要低于drop操作。
delete操作则是按照行记录一行一行的进行删除,因此其效率更低。
使用 drop 和 truncate会导致整个表中的数据都被删除,需格外注意。
如果仅想删除部分数据可用 delete,但是需要注意where子句得到的范围,会占用rollback segement。
本文已收录于以下专栏:
相关文章推荐
  truncate 和不带 where 子句的 delete,以及 drop 都会删除表内的数据
  1. truncate 和 delete 只删除数据...
  truncate 和不带 where 子句的 delete,以及 drop 都会删除表内的数据
  不同点
  1. truncate 和 delete 只删除数据不删...
概念:三者均可删除数据表
TRUNCATE TABLE 在功能上与不带 WHERE 子句的 DELETE 语句相同:二者均删除表中的全部行。但 TRUNCATE TABLE 比 DELETE 速度快,...
很久不发文章了,实际上前2个星期有点忙的过头了,现在正处于前一个需求刚结束,后一个还没来的真空休闲期,早就想要发点东西,但是光研究DUMP就花了我2天半。。下面正题
----------------...
从数据库块的层次深度分析一下DROP,TRUNCATE和DELETE的区别:
     在此之前先为那些初学数据库的童鞋们阐述2个概念,如果你还没有真正理解这2个概念那也请你看完:DML语句与DDL...
这次特意从数据库块的层次深度分析一下DROP,TRUNCATE和DELETE的区别:
     在此之前先为那些初学数据库的童鞋们阐述2个概念,如果你还没有真正理解这2个概念那也请你看完:DML...
truncate和 delete只删除数据不删除表的结构(定义),truncate当表被清空后表和表的索引讲重新设置成初始大小,而delete则不能。 truncate 删除数据时不记录日志,其他都记...
他的最新文章
讲师:吴岸城
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)mysql中drop、truncat、delete的用法区别 - CSDN博客
mysql中drop、truncat、delete的用法区别
1. 和 只删除数据不删除表的结构(定义)
drop语句将删除表的结构被依赖的约束(constrain),触发器(trigger),索引(index); 依赖于该表的
存储过程/函数将保留,但是变为inval状态.
2.语句是dml,这个操作会放到rollback segement中,事务提交之后才生效;如果有相应的trigger,
执行的时候将被触发.
,drop是, 操作立即生效,原数据不放到rollback segment中,不能回滚. 操作不触发
3.语句不影响表所占用的extent, 高水线(high watermark)保持原位置不动
显然drop语句将表所占用的空间全部释放
语句缺省情况下见空间释放到 minextents个 extent,除非使用 truncate
会将高水线复位(回到最开始).
4.速度,一般来说: drop& truncate & delete
5.安全性:小心使用drop 和truncate,尤其没有备份的时候.否则哭都来不及.
使用上,想删除部分数据行用delete,注意带上where子句. 回滚段要足够大.
想删除表,当然用drop
想保留表而将所有数据删除. 如果和事务无关,用truncate即可. 如果和事务有关,或者想触发trigger,还
是用delete.
如果是整理表内部的碎片,可以用truncate跟上reuse stroage,再重新导入/插入数据/
总结: DROP用于删除表,数据库等.
TRUNCATE和DELETE都是删除表数据.
但是TRUNCATE相当于初始化,比如如果有自增长,用TRUNCATE删除后,自增长会从1开始,(truncat会释放表所占的空间)
而delete则不会.
本文已收录于以下专栏:
相关文章推荐
DROP TABLE Syntax
DROP [TEMPORARY] TABLE [IF EXISTS]
tbl_name [, tbl_name] ...
MySQL中使用DROP PROCEDURE语句来删除存储过程;使用DROP FUNCTION语句来删除存储函数。
基本的语法格式如下:
DROP {PROCEDURE|FUNCTIO...
1.truncate和不带where子句的delete、以及drop都会删除表内的数据。
2.drop、truncate都是DDL语句(数据定义语言),执行后会自动提交。
...
很久不发文章了,实际上前2个星期有点忙的过头了,现在正处于前一个需求刚结束,后一个还没来的真空休闲期,早就想要发点东西,但是光研究DUMP就花了我2天半。。下面正题
----------------...
1.truncate和不带where子句的delete、以及drop都会删除表内的数据。
2.drop、truncate都是DDL语句(数据定义语言),执行后会自动提交...
声明:本篇文章来自百度知道答案整理,附上链接 /link?url=zPEGUyOzPprMej31Yc50dXKzYEkBHijignfVk8sdUUPN...
1  delete table和delete from table的异同
   delete table 与delete from table此两条语句没有实质的区别,都是删除表中的记录。 
他的最新文章
讲师:吴岸城
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)用户名:zhujzhuo
访问量:1578
注册日期:
阅读量:1297
阅读量:3317
阅读量:583223
阅读量:468274
51CTO推荐博文
内容描述: 在已经设置了主机名的主机上安装mysql5.5,成功之后,进入mysql,查看user,会有下面的表数据mysql& select user, host from mysql.+------+-----------+| user | host & & &|+------+-----------+| root | 127.0.0.1 || root | ::1 & & & || & & &| MAC & & & || root | MAC & & & || & & &| localhost || root | localhost |+------+-----------+这时需要drop除root@localhost 和 root@127.0.0.1之外的用户,但是会有下面的错误mysql& drop user ''@'MAC';Query OK, 0 rows affected (0.00 sec)mysql& drop user 'root'@'MAC';Query OK, 0 rows affected (0.00 sec)注:第二次执行出现这样的错误(注意大小写)mysql& DROP USER &root@'MAC';ERROR 1396 (HY000): Operation DROP USER failed for 'root'@'mac'查看得:mysql& select user, host from mysql.+------+-----------+| user | host & & &|+------+-----------+| root | 127.0.0.1 || root | ::1 & & & || & & &| MAC & & & || root | MAC & & & || & & &| localhost || root | localhost |+------+-----------+6 rows in set (0.00 sec)可以看到并没有删除这两个用户,这时可以使用delete删除数据表中的记录。问题的分析解决: & & &这个问题主要是出现在你的主机名中包含大写字母的时候,当你在安装mysql之前,主机名已经设置为包含大写的格式,安装完之后就会出现,(’’@主机名和root@主机名)这两个用户。 & & &这样的问题在mysql5.0的时候并没有出现,mysql5.0中主机名可以保存为大写形式,但是在mysql5.5中却不能保存为大写的形式,即使你在grant中写的是大写,mysql5.5也会存储为小写的。实验如下:(1)、查看数据库中的用户(2)、新建用户 & & &可以看到,并没有存储WEBGAME_SR_216,而是存储为webgame_sr_216注:这个问题出现在如下组合中,还有其他的组合,还须发现Reproduced on Linux RHEL 5.5 64bit + MySQL 5.5.9Reproduced on Linux RHEL 5.4 64bit + MySQL 5.1.53 Reproduced on Linux Fedora 12 32bit + MySQL 5.5.15 (see the trace here, with hostname=FEDORA02):这个问题是mysql的一个bug,需要了解更多,可以看下面的网站。(包含其他的几个bug,以及相应的补丁)本文出自 “” 博客,请务必保留此出处
了这篇文章
类别:┆阅读(0)┆评论(0)用户名:底火
文章数:130
访问量:74847
注册日期:
阅读量:1297
阅读量:3317
阅读量:583223
阅读量:468274
51CTO推荐博文
CREATE DATABASE IF NOT EXISTS `wordpress`;GRANT ALL PRIVILEGES ON wordpress.* TO wordpress@localhost IDENTIFIED BY 'db_password' WITH GRANT OPTION;MySQL的Grant命令本文实例,运行于 MySQL 5.0 及以上版本。MySQL 赋予用户权限命令的简单格式可概括为:grant&权限&on&数据库对象&to&用户一、grant 普通数据用户,查询、插入、更新、删除 数据库中所有表数据的权利。grant&select&on&testdb.*&to&common_user@'%'grant&insert&on&testdb.*&to&common_user@'%'grant&update&on&testdb.*&to&common_user@'%'grant&delete&on&testdb.*&to&common_user@'%'或者,用一条 MySQL 命令来替代:grant&select,&insert,&update,&delete&on&testdb.*&to&common_user@'%'&&&二、grant 数据库开发人员,创建表、索引、视图、存储过程、函数。。。等权限。grant 创建、修改、删除 MySQL 数据表结构权限。grant&create&on&testdb.*&to&developer@'192.168.0.%';grant&alter&on&testdb.*&to&developer@'192.168.0.%';grant&drop&on&testdb.*&to&developer@'192.168.0.%';&grant 操作 MySQL 外键权限。grant&references&on&testdb.*&to&developer@'192.168.0.%';&grant 操作 MySQL 临时表权限。grant&create&temporary&tables&on&testdb.*&to&developer@'192.168.0.%';&grant 操作 MySQL 索引权限。grant&index&on&testdb.*&to&developer@'192.168.0.%';&grant 操作 MySQL 视图、查看视图源代码 权限。grant&create&view&on&testdb.*&to&developer@'192.168.0.%';grant&show&view&on&testdb.*&to&developer@'192.168.0.%';&grant 操作 MySQL 存储过程、函数 权限。grant&create&routine&on&testdb.*&to&developer@'192.168.0.%';&--&now, can show procedure statusgrant&alter&routine&on&testdb.*&to&developer@'192.168.0.%';&--&now, you can drop a proceduregrant&execute&on&testdb.*&to&developer@'192.168.0.%';&&&三、grant 普通 DBA 管理某个 MySQL 数据库的权限。grant&all&privileges&on&testdb&to&dba@'localhost'其中,关键字 “privileges” 可以省略。&&四、grant 高级 DBA 管理 MySQL 中所有数据库的权限。grant&all&on&*.*&to&dba@'localhost'&&&五、MySQL grant 权限,分别可以作用在多个层次上。1. grant 作用在整个 MySQL 服务器上:grant&select&on&*.*&to&dba@localhost;&--&dba 可以查询 MySQL 中所有数据库中的表。grant&all&on&*.*&to&dba@localhost;&--&dba 可以管理 MySQL 中的所有数据库&2. grant 作用在单个数据库上:grant&select&on&testdb.*&to&dba@localhost;&--&dba 可以查询 testdb 中的表。&3. grant 作用在单个数据表上:grant&select,&insert,&update,&delete&on&testdb.orders&to&dba@localhost;&这里在给一个用户授权多张表时,可以多次执行以上语句。例如:grant&select(user_id,username)&on&smp.users&to&mo_user@'%'&identified&by&'123345';grant&select&on&smp.mo_sms&to&mo_user@'%'&identified&by&'123345';4. grant 作用在表中的列上:grant&select(id, se, rank)&on&testdb.apache_log&to&dba@localhost;&5. grant 作用在存储过程、函数上:grant&execute&on&procedure&testdb.pr_add&to&'dba'@'localhost'grant&execute&on&function&testdb.fn_add&to&'dba'@'localhost'&&&六、查看 MySQL 用户权限查看当前用户(自己)权限:&查看其他 MySQL 用户权限:show grants&for&dba@localhost;&&&七、撤销已经赋予给 MySQL 用户权限的权限。revoke 跟 grant 的语法差不多,只需要把关键字 “to” 换成 “from” 即可:grant&all&on&*.*&to&dba@localhost;revoke&all&on&*.*&from&dba@localhost;&&八、MySQL grant、revoke 用户权限注意事项1. grant, revoke 用户权限后,该用户只有重新连接 MySQL 数据库,权限才能生效。2. 如果想让授权的用户,也可以将这些权限 grant 给其他用户,需要选项 “grant option“grant&select&on&testdb.*&to&dba@localhost&with&grant&option;这个特性一般用不到。实际中,数据库权限最好由 DBA 来统一管理。&&*************************************************************************************************&遇到 SELECT command denied to user '用户名'@'主机名' for table '表名' 这种错误,解决方法是需要把吧后面的表名授权,即是要你授权核心数据库也要。我遇到的是SELECT command denied to user 'my'@'%' for table 'proc',是调用存储过程的时候出现,原以为只要把指定的数据库授权就行了,什么存储过程、函数等都不用再管了,谁知道也要把数据库mysql的 proc表授权&*************************************************************************************************参考:&mysql授权表共有5个表:user、db、host、tables_priv和columns_priv。授权表的内容有如下用途:user表user表列出可以连接服务器的用户及其口令,并且它指定他们有哪种全局(超级用户)权限。在user表启用的任何权限均是全局权限,并适用于所有数据库。例如,如果你启用了DELETE权限,在这里列出的用户可以从任何表中删除记录,所以在你这样做之前要认真考虑。db表db表列出数据库,而用户有权限访问它们。在这里指定的权限适用于一个数据库中的所有表。host表host表与db表结合使用在一个较好层次上控制特定主机对数据库的访问权限,这可能比单独使用db好些。这个表不受GRANT和REVOKE语句的影响,所以,你可能发觉你根本不是用它。tables_priv表tables_priv表指定表级权限,在这里指定的一个权限适用于一个表的所有列。columns_priv表columns_priv表指定列级权限。这里指定的权限适用于一个表的特定列。
了这篇文章
类别:未分类┆阅读(0)┆评论(0)

我要回帖

更多关于 mysql delete in 删除 的文章

 

随机推荐