MYSQL语法中delete,drop和alter分别是⽤来删除什么的?有
什么区别?删除了。。。
MYSQL语法中delete,drop和alter分别是⽤来删除什么的?有什么区别?删除了以后可以恢复吗?哪些可以恢复?
1.背景介绍
⼤家经常会⽤到mysql中的delete、truncate、drop,update、alter等,但是⽐如delete、truncate、drop这三个都是删除命令,但是他们这三个所作⽤的范围不⼀样,⽤法还是有很⼤的差异。再⽐如说update、alter,都是修改,但是它们也是存在差异的。
2.知识剖析
1) MYSQL三种操作语⾔:
DML(data manipulation language):分别包含SELECT、UPDATE、INSERT、DELETE,是对数据库⾥的数据进⾏操作的语⾔。
DDL(data definition language):分别包含CREATE、ALTER、DROP等,DDL主要是⽤在定义或改变表(TABLE)的结构、数据类型、表之间的链接和约束等初始化⼯作。
DCL(Data Control Language):是数据库控制功能。是⽤来设置或更改数据库⽤户或⾓⾊权限的语句,包括(grant,deny,revoke等)语句。在默认状态下,只有sysadmin,dbcreator,db_owner或db_securityadmin等⼈员才有权⼒执⾏DCL。
DML
DML(Data Manipulation Language 数据操控语⾔)⽤于操作数据库对象中包含的数据,也就是说操作的单位是记录。
DML的主要语句(操作)
Insert语句:向数据表张插⼊⼀条记录。
Delete语句:删除数据表中的⼀条或多条记录,也可以删除数据表中的所有记录,但是,它的操作对象仍是记录。
Update语句:⽤于修改已存在表中的记录的内容。
DDL
DDL(Data Definition Language 数据定义语⾔)⽤于操作对象和对象的属性,这种对象包括数据库本⾝,以及数据库对象,像:表、视图等等,DDL对这些对象和属性的管理和定义具体表现在Create、Drop和Alter上。特别注意:DDL操作的“对象”的概念,”对象“包括对象及对象的属性,⽽且对象最⼩也⽐记录⼤个层次。
Create创建数据表,
Alter可以更改该表的字段,
Drop可以删除这个表,
从这⾥我们可以看到,DDL所站的⾼度,它不会对具体的数据进⾏操作。
DDL的主要语句(操作)
Create语句:可以创建数据库和数据库的⼀些对象。
Drop语句:可以删除数据表、索引、触发程序、条件约束以及数据表的权限等。
Alter语句:修改数据表定义及属性。
2)Alter、Delete、Drop相关语法
a、Alter
删除,添加或重新定义列
删除列:alter table tablename drop columnname
增加列:alter table tablename add columnname type
在某列后增加⼀列:alter table tablename add columnname type after columnname2 更改列定义或名称
alter table tablename modify columnname type
重命名表
alter table tablename rename tablename2(新表名)
b、Delete
语法
DELETE FROM tablename [WHERE Clause]
c、Drop
删除数据库:drop database databasename
删除⼀个不确定存在的数据库:drop database if exists databasename;
删除表:drop table tablename
删除⼀个不确定存在的数据库:drop table if exists tablename;
简⽽⾔之,DDL语句是对表结构的修改,DML语句是对表数据的修改
(注:
tablename是对应的数据库表名
databasename是对应的数据库名
columnname 是列名
type 类型)
1)delete,drop ,truncate都代表删除,有什么区别?
2)alter跟其他的有什么区别
3)drop、delete、alter该如何使⽤
4.解决⽅案
1)delete,drop ,truncate都代表删除,有什么区别?
相同点:
delete,drop ,truncate都代表删除
不同点:
a、truncate和 delete只删除数据不删除表的结构(定义)
b、drop语句将删除表的结构被依赖的约束(constrain),触发器(trigger),索引(index); 依赖于该表的存储过程/函数将保留,但是变为invalid 状态.
c、delete语句是DML,这个操作会放到rollback segement中,事务提交之后才⽣效;如果有相应的trigger,执⾏的时候将被触发.
d、 truncate,drop是DDL, 操作⽴即⽣效,原数据不放到rollback segment中,不能回滚. 操作不触发  trigger.
e、delete语句不影响表所占⽤的extent, ⾼⽔线(high watermark)保持原位置不动。显然drop语句将表所占⽤的空间全部释放 。
mysql中delete语句truncate 语句缺省情况下见空间释放到 minextents个 extent,除⾮使⽤reuse storage;  truncate会将⾼⽔线复位(回到最开始).  drop storage;
f、删除速度,⼀般来说: drop> truncate > delete
2)alter跟其他的有什么区别
alter是针对表字段、表名操作,新增、修改。
delete是针对表数据,进⾏删除,drop是删掉表
3)drop、delete、alter该如何使⽤
a、.想删除表,⽤drop
b、想保留表⽽将所有数据删除. 如果和事务⽆关,⽤truncate即可。
c、如果和事务有关,或者想触发trigger,还是⽤delete.
针对要讨论的这三种语法,只有delete才可以进⾏恢复,alter可以直接修改成需要的名称、类型、或者表名,不存在所说的数据恢复。5.编码实战
a、在进⾏数据库DML操作前,⼀定要进⾏数据备份,再进⾏改、删。对于需要删除的数据,最好能将其置为⽆效,不要删除。
b、最好不要在⽣产环节(正式环境)上直接进⾏DML操作。
推荐两篇⽂章给⼤家:
7.    参考⽂献
今天的分享就到这⾥啦,欢迎⼤家点赞、转发、留⾔、拍砖~
8.更多讨论
1、在正式环境上,⽤什么语法进⾏删除操作?
答:第⼀,我们不建议直接在正式环境(⽣产环境)直接对数据进⾏DML操作,因为风险很⼤。第⼆,在正式进⾏数据的删、改的时候,⼀定要对要修改的数据进⾏备份。第三,对于需要删除的数据,最好的做法就是将这条数据直接置为⽆效,尽量不要删除。如果确实需要删除的话,可以使⽤delete语法删除。因为⽤delete可以进⾏恢复,但是⼀定要加好条件!

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。