vlambda博客
学习文章列表

MySQL基础(五)-DML与事务

本系列是基于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,'易烊','男','[email protected]','2000/11/27',20,1);
#案例2:可以为空的字段怎么插入,还是一一对应,去掉为空的字段或者值使用NULLINSERT INTO stu_info(stuid,stuname,email,borndate,age,majorid)VALUES(10,'易千','[email protected]','2000/11/27',20,1);INSERT INTO stu_info(stuid,stuname,gender,email,borndate,age,majorid)VALUES(8,'易烊',NULL,'[email protected]','2000/11/27',20,1);
#案例3:默认字段如何插入,值使用defaultINSERT INTO stu_info(stuid,stuname,gender,email,borndate,age,majorid)VALUES(8,'易烊',DEFAULT,'[email protected]','2000/11/27',20,1);
#案例4:可以省略字段列表,默认所有字段INSERT INTO stu_info VALUES(11,'易烊','男','[email protected]','2000/11/27',20,1);

补充:自增的设置

/*1.自增长列设置在一个键上,比如主键或唯一键2.自增长列数据类型必须为唯一型3.一个表最多有一个自增长列*/#1.图形界面勾选#2.创建表的后边直接跟AUTO_INCREMENTCREATE 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表中姓王的女生的电话为13525764896UPDATE beauty SET phone='13525764896'WHERE NAME LIKE '王%';
#案例2:修改boys表中id=2的姓名张飞,魅力值12UPDATE boys SET boyname='郑飞',userCP=10WHERE id=2;
#b.修改多表的记录#案例1:修改张无忌的女朋友的手机号为114
UPDATE boys boINNER JOIN beauty bON bo.`id`=b.`boyfriend_id`SET b.`phone`=114WHERE bo.`boyName`='张无忌';
#案例2:修改没有男朋友的女生的男朋友为郑飞UPDATE boys boRIGHT INNER JOIN beauty bON bo.`id`=b.`boyfriend_id`SET b.boyfriend_id = 2WHERE 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,'[email protected]','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,灭绝师太+5000UPDATE stu_info SET balance = balance-5000 WHERE stuid=1;UPDATE stu_info SET balance = balance+5000 WHERE stuid=2;
#c.结束事务#-提交:COMMIT;
#-回滚ROLLBACK;


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

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

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

长按图片,点击关注