大家好,我是IT修真院深圳分院第10期学员,一枚正直善良的JAVA程序员。
今天给大家分享一下,修真院官网JAVA任务基础中,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 类型)
3.常见问题
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语句将表所占用的空间全部释放 。
truncate 语句缺省情况下见空间释放到 minextents个 extent,除非使用reuse storage; truncate会将高水线复位(回到最开始). drop storage;
f、删除速度,一般来说: drop> truncate > delete
2)alter跟其他的有什么区别
alter是针对表字段、表名操作,新增、修改。
delete是针对表数据,进行删除,drop是删掉表
a、.想删除表,用drop
b、想保留表而将所有数据删除. 如果和事务无关,用truncate即可。
c、如果和事务有关,或者想触发trigger,还是用delete.
针对要讨论的这三种语法,只有delete才可以进行恢复,alter可以直接修改成需要的名称、类型、或者表名,不存在所说的数据恢复。
5.编码实战
6.扩展思考
a、在进行数据库DML操作前,一定要进行数据备份,再进行改、删。对于需要删除的数据,最好能将其置为无效,不要删除。
b、最好不要在生产环节(正式环境)上直接进行DML操作。
推荐两篇文章给大家:
SQL SERVER数据恢复方法:https://blog.csdn.net/dba_huangzj/article/details/8491327
MYSQL数据恢复方法:https://blog.csdn.net/gzt19881123/article/details/51842740
7. 参考文献
https://zhidao.baidu.com/question/57286294.html
今天的分享就到这里啦,欢迎大家点赞、转发、留言、拍砖~
8.更多讨论
1、在正式环境上,用什么语法进行删除操作?
答:第一,我们不建议直接在正式环境(生产环境)直接对数据进行DML操作,因为风险很大。第二,在正式进行数据的删、改的时候,一定要对要修改的数据进行备份。第三,对于需要删除的数据,最好的做法就是将这条数据直接置为无效,尽量不要删除。如果确实需要删除的话,可以使用delete语法删除。因为用delete可以进行恢复,但是一定要加好条件!
视频地址:腾讯视频
PPT:PPT