MySQL基础(五)-DML与事务
视频链接: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:可以为空的字段怎么插入,还是一一对应,去掉为空的字段或者值使用NULL
INSERT 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:默认字段如何插入,值使用default
INSERT 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_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,'[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,灭绝师太+5000
UPDATE stu_info SET balance = balance-5000 WHERE stuid=1;
UPDATE stu_info SET balance = balance+5000 WHERE stuid=2;
#c.结束事务
#-提交:
COMMIT;
#-回滚
ROLLBACK;
先写这么多,仅供参考,欢迎指点。
如果你有希望实现的内容,或者在过程中遇到了某些困难,欢迎交流探讨!
/如有纰漏 请联系我 十分感谢/
长按图片,点击关注