目录
1.什么是事务?
2.只有DML语句才会有事务这一说,其他都没关系
3假设所有的业务,只需要一条DML语句就能完成,那还有必要存在事务机制吗?
4.事务是怎么做到多条DML语句同时成功,同时失败呢?
提交事务:
回滚事务:
5.怎么提交,回滚事务
6.事务的特性
1.什么是事务?
一个事务其实就是一个完整的业务逻辑
什么是一个完整的业务逻辑?
假设转账,A向B转账10000(update语句)
A账户减少10000,B账户增加10000(update语句)
这就是一个完整的业务逻辑
以上的 *** 作是一个最小的工作单元,要么同时成功,要么同时失败,不可再分。
这样才能保证钱的正确的。
2.只有DML语句才会有事务这一说,其他都没关系insert
update
delete
只有以上三个语句才有事务一说
只要你的 *** 作涉及增删改,就要考虑安全问题
数据安全第一位
3假设所有的业务,只需要一条DML语句就能完成,那还有必要存在事务机制吗?正是因为做某件事的时候需要多条DML语句才能共同完成
所以需要事务的存在,如果任何一件复杂的事儿都能由一条DML语句完成
那么事务没必要存在
说到底事务就是多条DML语句同时成功,同时失败!
4.事务是怎么做到多条DML语句同时成功,同时失败呢?InnoDB存储引擎:提供一组用来记录事务性活动的日志文件
事务开启了:
insert
insert
insert
update
delete
update
事务结束了!
在事务的的执行过程中,每一条DML语句的 *** 作都会记录到事务性活动的日志文件中
在事务的执行过程中,我们可以提交事务也可以回滚事务
提交事务:清空事务性活动的日志文件,将数据全部彻底持久化到数据库表中
提交事务标志着事务的结束,并且是成功的结束
回滚事务:将之前的DML *** 作全部撤销,并且彻底清空事务性活动的日志文件
回滚事务也标志着事务的结束,但是是失败的结束
5.怎么提交,回滚事务提交:
commit 语句
回滚:
rollback 语句
事务对应的英语单词:transcation
mysql中默认的事务行为是怎样的?
msql默认自动提交事务
每执行一次DML语句,提交一次,这种自动提交其实是不符合开发习惯的
因为一个业务通常是需要多条DML语句共同执行的,为了保证每条数据的安全
必须要求同时成功之后再提交,所以不能执行一条就提交一条
那么怎么关闭自动提交事务呢?
先执行命令:start transaction;
mysql> select * from admin;
+----+----------+----------+
| id | username | password |
+----+----------+----------+
| 1 | john | 8888 |
| 2 | lyt | 6666 |
| 3 | liu | 5555 |
| 4 | liu | 5555 |
+----+----------+----------+
4 rows in set (0.00 sec)
mysql> insert into admin(id,username,password)values(5,'liu',5555);
Query OK, 1 row affected (0.00 sec)
mysql> insert into admin(id,username,password)values(6,'liu',5555);
Query OK, 1 row affected (0.00 sec)
mysql> insert into admin(id,username,password)values(7,'liu',5555);
Query OK, 1 row affected (0.00 sec)
mysql> select * from admin;
+----+----------+----------+
| id | username | password |
+----+----------+----------+
| 1 | john | 8888 |
| 2 | lyt | 6666 |
| 3 | liu | 5555 |
| 4 | liu | 5555 |
| 5 | liu | 5555 |
| 6 | liu | 5555 |
| 7 | liu | 5555 |
+----+----------+----------+
7 rows in set (0.00 sec)
mysql> rollback;
Query OK, 0 rows affected (0.01 sec)
mysql> select * from admin;
+----+----------+----------+
| id | username | password |
+----+----------+----------+
| 1 | john | 8888 |
| 2 | lyt | 6666 |
| 3 | liu | 5555 |
| 4 | liu | 5555 |
+----+----------+----------+
4 rows in set (0.00 sec)
mysql>
6.事务的特性A:原子性 说明事务是最小的原子单元,不可再分
C:一致性 所有事务要求 在同一个事务中,要么同时成功,要么同时失败。
I:隔离性 A事务和B事务之间具有一定的隔离 教室A和教室B之间有一道墙,这道墙就是隔离性
D:持久性 事务最终结束的一个保障 事务提交,相当于把没有保存到硬盘上的数据保存到硬盘上
二、事务的并发问题
1、脏读:事务A读取了事务B更新的数据,然后B回滚 *** 作,那么A读取到的数据是脏数据
2、不可重复读:事务 A 多次读取同一数据,事务 B 在事务A多次读取的过程中,对数据作了更新并提交,导致事务A多次读取同一数据时,结果 不一致。
3、幻读:系统管理员A将数据库中所有学生的成绩从具体分数改为ABCDE等级,但是系统管理员B就在这个时候插入了一条具体分数的记录,当系统管理员A改结束后发现还有一条记录没有改过来,就好像发生了幻觉一样,这就叫幻读。
小结:不可重复读的和幻读很容易混淆,不可重复读侧重于修改,幻读侧重于新增或删除。解决不可重复读的问题只需锁住满足条件的行,解决幻读需要锁表
三、MySQL事务隔离级别
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)