MYSQL语法中delete,drop和alter分别是用来删除什么的?有什么区别?删除了以后可以恢复吗?哪些可以恢复?

大家好,我是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)分别包含SELECTUPDATEINSERTDELETE,是对数据库里的数据进行操作的语言。

DDL(data definition language)分别包含CREATEALTERDROP等,DDL主要是用在定义或改变表(TABLE)的结构、数据类型、表之间的链接和约束等初始化工作。

DCL(Data Control Language):是数据库控制功能。是用来设置或更改数据库用户或角色权限的语句,包括(grant,deny,revoke)语句。在默认状态下,只有sysadmin,dbcreator,db_ownerdb_securityadmin等人员才有权力执行DCL


DML

DML(Data Manipulation Language 数据操控语言)用于操作数据库对象中包含的数据,也就是说操作的单位是记录。

DML的主要语句(操作)

Insert语句:向数据表张插入一条记录。

Delete语句:删除数据表中的一条或多条记录,也可以删除数据表中的所有记录,但是,它的操作对象仍是记录。

Update语句:用于修改已存在表中的记录的内容。

 

DDL

DDL(Data Definition Language 数据定义语言)用于操作对象和对象的属性,这种对象包括数据库本身,以及数据库对象,像:表、视图等等DDL对这些对象和属性的管理和定义具体表现在CreateDropAlter上。特别注意:DDL操作的对象的概念,对象包括对象及对象的属性,而且对象最小也比记录大个层次。

Create创建数据表,

Alter可以更改该表的字段,

Drop可以删除这个表,

从这里我们可以看到,DDL所站的高度,不会对具体的数据进行操作。


DDL的主要语句(操作)

Create语句:可以创建数据库和数据库的一些对象。

Drop语句:可以删除数据表、索引、触发程序、条件约束以及数据表的权限等。

Alter语句:修改数据表定义及属性。


2)AlterDeleteDrop相关语法

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都代表删除,有什么区别?

相同点:

deletedrop truncate都代表删除

不同点:

a、truncate delete只删除数据不删除表的结构(定义

b、drop语句将删除表的结构被依赖的约束(constrain),触发器(trigger),索引(index)依赖于该表的存储过程/函数将保留,但是变为invalid状态

c、delete语句是DML,这个操作会放到rollback segement,事务提交之后才生效;如果有相应的trigger,执行的时候将被触发

d、 truncate,dropDDL操作立即生效,原数据不放到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是删掉表


 3)drop、delete、alter该如何使用

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可以进行恢复,但是一定要加好条件!

视频地址:腾讯视频

PPTPPT


猜你喜欢

转载自blog.csdn.net/qq_31552107/article/details/80908058