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:可以为空的字段怎么插入,还是一一对应,去掉为空的字段或者值使用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:修改张无忌的女朋友的手机号为114UPDATE 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;
先写这么多,仅供参考,欢迎指点。
如果你有希望实现的内容,或者在过程中遇到了某些困难,欢迎交流探讨!
/如有纰漏 请联系我 十分感谢/
长按图片,点击关注
