ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

mysql系列——DML数据操作语言(三)

2022-08-11 15:30:36  阅读:172  来源: 互联网

标签:系列 truncate 删除 表名 DML 别名 demo1 mysql delete


一、DML定义

DML:(Data Manipulation Language)数据操作语言-数据库的基本操作,SQL中处理数据等操作统称为数据操纵语言,简而言之就是实现了基本的“增删改查”操作。

DML操作是可以手动控制事务的开启、提交和回滚的。包括的关键字有:select、update、delete、insert、merge

声明:本文涉及到的语法用 [] 包含的内容,属于可选项。

一、插入操作

1、插入单行两种方式

方式1:

insert into 表名[(字段名1,字段名1,…)] values(值1,值2,…);

说明:

  • 字段和值的个数、类型必须一一对应
  • 如果是字符类型或日期类型,值需要用单引号(‘’)引起来;
  • 如果是数值类型,不需要用单引号;
  • 如果字段不能为空,必须插入值;
  • 可以为空的字段可以不用插入值,但需要注意:字段和值都不写;或字段写上,值用null代替;
  • 如果表名后不写字段,此时表示所有字段,顺序和表中字段顺序一致。

方式2: 不常用

insert into 表名 set 字段1=值1,字段2=值2,..;

2、批量插入两种方式  

方式1

insert into 表名[(字段1,字段2,…)] values(值1,值2,…), (值1,值2,…), (值1,值2,…)…;

方式2

insert into 表名[(字段1,字段2,…)]

说明:
数据来源select语句可以有很多种写法,需要注意:select返回的结果和待插入数据的字段的数量、顺序以及类型需要完全一致。

二、更新操作

1、单表更新

update 表名[[as] 别名] set [别名.]字段 = 值, [别名.]字段 = 值…[where条件];

2、多表更新 

update 表1[[as] 别名1], 表2[[as] 别名2] set [别名.]字段 = 值, [别名.]字段 = 值…[where条件];

三、删除操作

1、使用delete删除

单表删除

delete [别名/表名] from 表名[[as] 别名] [where条件];

注意:

  • 如果无别名,表名就是别名;
  • 如果有别名,delete后面必须写别名;
  • 如果无别名,delete后面的别名可省略。
--删除demo1表所有记录
delete from demo1;
--删除demo1表所有记录
delete demo1 from demo1;
--有别名的方式,删除demo1表所有记录
delete d1 from demo1 d1;
--有别名的方式,删除demo1表满足条件的记录
delete d1 from demo1 as d1 where d1.a > 100;

多表删除 

delete [别名1], [别名2]… from 表1[[as] 别名1], 表2[[as] 别名2]… [where条件];

说明:别名可以省略不写,但是需要在delete后面跟上表名,多个表名之间用逗号隔开。  

示例1:

删除demo1表中的记录,,条件是这些记录的字段a在demo2中存在的记录。
delete d1 from demo1 t1,demo2 d2 where d1.a = d2.c2;

示例2:

同时对2个表进行删除,条件是demo1.a=demo2.c2的记录。
delete d1,d2 from demo1 d1,demo2 d2 where d1.a=d2.c2;

2、使用truncate删除  

truncate 表名;

3、drop、truncate、delete区别 

drop  表名

1、drop是DDL,会隐式提交,所以,不能回滚,不会触发触发器。

2、drop语句删除表结构及所有数据,并将表所占用的空间全部释放。

3、drop语句将删除表的结构所依赖的约束,触发器,索引,依赖于该表的存储过程/函数将保留,但是变为invalid状态。

 

truncate table 表名 

1、truncate是DDL,会隐式提交,所以,不能回滚,不会触发触发器。

2、truncate只删除数据,而不删除表的结构(定义)。当表被TRUNCATE 后,这个表和索引所占用的空间会恢复到初始大小

3、对于外键(foreignkey )约束引用的表,不能使用 truncate table,而应使用不带 where 子句的 delete 语句。

 

delete from 表名

1、delete是DML,执行delete操作时,每次从表中删除一行,同时将该行的的删除操作记录在redo和undo表空间中以便进行回滚(rollback)和重做操作,

但要注意表空间要足够大,需要手动提交(commit)操作才能生效,可以通过rollback撤消操作。

2、delete只删除数据,而不删除表的结构(定义)。delete操作不会减少表或索引所占用的空间。

3、指定where子句,支持删除部分数据。

 

总结:

1、在速度上,一般来说,drop> truncate > delete。

2、在使用drop和truncate时一定要注意,虽然可以恢复,但为了减少麻烦,还是要慎重。

3、如果想删除表,当然用drop; 

     如果想保留表而将所有数据删除,并且和事务无关,用truncate即可;

     如果和事务有关,或者想触发trigger,还是用delete;

    如果想删除部分数据用delete,注意带上where子句,回滚段要足够大;

    如果是整理表内部的碎片,可以用truncate跟上reuse stroage,再重新导入/插入数据。

标签:系列,truncate,删除,表名,DML,别名,demo1,mysql,delete
来源: https://www.cnblogs.com/wffzk/p/16576171.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有