zoukankan      html  css  js  c++  java
  • mysql系列——DML常见操作汇总(三)

    一、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,再重新导入/插入数据。

    now ,fight for future
  • 相关阅读:
    智慧养老民政监管平台建设方案
    CF600E Lomsat gelral dsu on tree
    dsu on tree详解
    【Spring 从0开始】Spring5 新功能,整合日志框架 Log4j2
    【Spring 从0开始】JdbcTemplate 数据库事务管理
    【Spring 从0开始】JdbcTemplate 数据库事务参数
    【Spring 从0开始】JdbcTemplate 数据库事务管理
    【Spring 从0开始】JdbcTemplate 操作数据库
    【Spring 从0开始】AOP 操作
    【Spring 从0开始】AOP 操作中的相关术语、环境准备
  • 原文地址:https://www.cnblogs.com/wffzk/p/15593742.html
Copyright © 2011-2022 走看看