暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MySQL基础(五)-DML与事务

三分稚气 2021-04-14
453

本系列是基于B站尚硅谷MySQL李玉婷教程的学习笔记,形成学习内容的文字版本 

视频链接:https://www.bilibili.com/video/BV12b411K7Zu?t=7&p=304




主要内容

一、DML

二、事务


一、DML


DML数据操纵语言:对表中的数据的增删改

1.数据的插入

    /*
    语法:
    单行的插入:
    insert into 表名(字段名1,字段名2,...)values(值1,值2...);
    多行的插入:
    insert into 表名(字段名1,字段名2,...)
    values(值1,值2...),
    (值1,值2...),
    (值1,值2...);


    特点:
    1.字段和值列表一一对应:包含类型、约束等必须匹配
    2.数值型的值,不用单引号;非数值型的必须使用单引号
    3.字段顺序无要求
    */


    #案例:字段和值列表一一对应:包含类型、约束等必须匹配
    INSERT INTO stu_info(stuid,stuname,gender,email,borndate,age,majorid)
    VALUES(9,'易烊','男','yi@qq.com','2000/11/27',20,1);


    #案例2:可以为空的字段怎么插入,还是一一对应,去掉为空的字段或者值使用NULL
    INSERT INTO stu_info(stuid,stuname,email,borndate,age,majorid)
    VALUES(10,'易千','yi@qq.com','2000/11/27',20,1);
    INSERT INTO stu_info(stuid,stuname,gender,email,borndate,age,majorid)
    VALUES(8,'易烊',NULL,'yi@qq.com','2000/11/27',20,1);


    #案例3:默认字段如何插入,值使用default
    INSERT INTO stu_info(stuid,stuname,gender,email,borndate,age,majorid)
    VALUES(8,'易烊',DEFAULT,'yi@qq.com','2000/11/27',20,1);


    #案例4:可以省略字段列表,默认所有字段
    INSERT INTO stu_info VALUES(11,'易烊','男','yi@qq.com','2000/11/27',20,1);
    复制

    补充:自增的设置

      /*
      1.自增长列设置在一个键上,比如主键或唯一键
      2.自增长列数据类型必须为唯一型
      3.一个表最多有一个自增长列
      */
      #1.图形界面勾选
      #2.创建表的后边直接跟AUTO_INCREMENT
      CREATE TABLE gradeinfo(
      gradeID INT PRIMARY KEY AUTO_INCREMENT,
      gradeName VARCHAR(20)
      );
      INSERT INTO gradeinfo(gradeName) VALUES('一年级'),('二年级'),('三年级');
      复制

      2.数据的修改 P105

        /*
        1.修改单表的记录
        语法:
        update 表名
        set 列=新值,列=新值,列=新值,...
        where 筛选条件;
        2.修改多表的记录


        语法:
        SQL92语法:
        update 表1 别名,表2 别名
        set 列=值
        where 连接条件
        and 筛选条件


        SQL99语法:
        update 表1 别名
        inner | left | right join 表2 别名
        on 连接条件
        set 列=值,...
        where 筛选条件;


        */


        #a.修改单表的记录
        #案例1:修改beauuty表中姓王的女生的电话为13525764896
        UPDATE beauty SET phone='13525764896'
        WHERE NAME LIKE '王%';


        #案例2:修改boys表中id=2的姓名张飞,魅力值12
        UPDATE boys SET boyname='郑飞',userCP=10
        WHERE id=2;


        #b.修改多表的记录
        #案例1:修改张无忌的女朋友的手机号为114


        UPDATE boys bo
        INNER JOIN beauty b
        ON bo.`id`=b.`boyfriend_id`
        SET b.`phone`=114
        WHERE bo.`boyName`='张无忌';


        #案例2:修改没有男朋友的女生的男朋友为郑飞
        UPDATE boys bo
        RIGHT INNER JOIN beauty b
        ON bo.`id`=b.`boyfriend_id`
        SET b.boyfriend_id = 2
        WHERE b.id IS NULL ;
        复制


        3.数据的删除 P306

          /*
          方式1:delete语句
          delete from 表名 where 筛选条件;
          一删一行


          方式2:truncate语句
          truncate table 表名;


          */


          #案例1:删除姓李的所有信息
          DELETE FROM stu_info WHERE stuname LIKE '易千%';


          #案例2:删除表的所有信息
          TRUNCATE TABLE newtable2;


          #【面试题】delete语句与truncate语句的区别


          1.delete可以添加WHERE条件,逐行删,TRUNCATE一次性清除所有语句
          2.truncate效率高
          3.如果删除带自增长列的表,
          使用DELETE删除,重新插入数据,记录从断点开始
          使用TRUNCATE删除,重新插入数据,记录从1开始
          4.delete删除数据会返回受影响的行数
          TRUNCATE删除数据不会返回受影响的行数
          5.delete删除数据,支持事务回滚,TRUNCATE删除数据不事务回滚
          复制


          二、事务

          事务属于TCL控制语言(Transaction Control Language )。

          *一个事务是由一条或者多条sql语句构成,这一条或者多条sql语句要么全部执行成功,要么全部执行失败!*

          默认情况下,每条单独的sql语句就是一个单独的事务!

          事务的四大特性(ACID)

          • 原子性(Atomicity):事务中所有操作是不可再分割的原子单位。事务中所有操作要么全部执行成功,要么全部执行失败。

          • 一致性(Consistency):事务执行后,数据库状态与其它业务规则保持一致。如转账业务,无论事务执行成功与否,参与转账的两个账号余额之和应该是不变的。

          • 隔离性(Isolation):隔离性是指在并发操作中,不同事务之间应该隔离开来,使每个并发中的事务不会相互干扰。

          • 持久性(Durability):一旦事务提交成功,事务中所有的数据操作都必须被持久化到数据库中,即使提交事务后,数据库马上崩溃,在数据库重启时,也必须能保证通过某种机制恢复数据。

            /*
            概念:一个事务是由一条或者多条sql语句构成,
            这一条或者多条sql语句要么全部执行成功,要么全部执行失败


            分类:
            1.隐式事务
            没有明显的开启和结束标记,比如DML语句的insert,update,delete本身就是一条事务
            例如:
            INSERT INTO stu_info(stuid,stuname,gender,email,borndate,age,majorid)
            VALUES(8,'易烊',DEFAULT,'yi@qq.com','2000/11/27',20,1);




            2.显式事务
            具有明显的开启和结束标记
            一般由多条SQL语句组成


            步骤:
            0.取消隐式事务自动开启的功能
            a.开启事务
            b.编写事务需要的SQL语句
              c.结束事务
            */


            SHOW VARIABLES LIKE '%auto%'


            #事务使用步骤演示
            #0.取消隐式事务自动开启的功能
            SET autoocommit = 0


            #a.开启事务
            START TRANSACTION;


            #b.编写事务需要的SQL语句
            #张三丰-5000,灭绝师太+5000
            UPDATE stu_info SET balance = balance-5000 WHERE stuid=1;
            UPDATE stu_info SET balance = balance+5000 WHERE stuid=2;


            #c.结束事务
            #-提交:
            COMMIT;


            #-回滚
            ROLLBACK;
            复制


            先写这么多,仅供参考,欢迎指点。

            如果你有希望实现的内容,或者在过程中遇到了某些困难,欢迎交流探讨!

            关注公众号,回复“尚硅谷MySQL”关键字,获取课程配套软件、课件、资料

            /如有纰漏 请联系我 十分感谢/

            长按图片,点击关注





            文章转载自三分稚气,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

            评论