Linux命令:MySQL系列之八–MySQL事务相关内容



MySQL,ODBC 数据库事务多事务同时执行:彼此之间互不影响的方式进行并行;事务之间交互,通过数据集。
START TRANSACTION; 启动事务命令 数据库只有启动了事务才允许回滚撤销等操作。且数据的engine引擎必须是innodb,才支持事务
ROLLBACK回滚事务,mysql只要没有提交开启了事务都可以进行回滚操作。 COMMIT:事务提交,事务提交后无法进行回滚操作。如果没有明确启动事务: autocommit能实现自动提交,每一个操作都直接提交; 所以建议:明确使用事务,否则所有操作都被当成一个事务来处理,并关闭自动提交。 否则会浪费mysql很多IO操作,每写一条语句都执行提交至持久性存储,很浪费资源事务的特性: Atomicity:原子性,事务所引起的数据库操作,要不都完成,要么都不执行; Consistency: 一致性,
Isolation:隔离性 事务调度:事务之间影响最小 MVCC:多版本并发控制Durability:持久性 ,一旦事务成功完成,系统必须保证任何故障都不会引起事务表示出不一致性; 1、事务提交之前就已经写出数据至持久性存储; 2、结合事务日志完成; 事务日志:顺序IO 数据文件:随机IO事务的状态:
活动的:active 部分提交的:最后一条语句执行后 失败的: 终止的: 提交的:及状态间的转换过程: 事务并发执行的优势:1、提高吞吐量和资源利用率 2、减少等待时间事务调度:1、可恢复调度 2、无极联调度
实例:mysql> SELECT @@AUTOCOMMIT; #查询自动提交的状态1为开启,0为关闭;+————–+| @@AUTOCOMMIT |+————–+| 1 |+————–+1 row in set (0.00 sec)mysql> SET AUTOCOMMIT=0; #设定自动提交关闭Query OK, 0 rows affected (0.00 sec)mysql> SELECT @@AUTOCOMMIT; #查询自动提交的状态1为开启,0为关闭;+————–+| @@AUTOCOMMIT |+————–+| 0 |+————–+1 row in set (0.00 sec)mysql> DELETE FROM student WHERE Name LIKE ‘Li%’; #删除Name字段包含Li的行Query OK, 1 row affected (0.03 sec)mysql> SELECT * FROM student; #Li哪行已经被删除+—–+————+—–+—–+| SID | Name | Age | CID |+—–+————+—–+—–+| 2 | Cheng Long | 0 | 2 || 3 | Yang Guo | 0 | 3 || 4 | Guo Jing | 0 | 4 |+—–+————+—–+—–+3 rows in set (0.00 sec)mysql> ROLLBACK; #回滚事务,自动提交关闭后,默认就开启了事务,可以实现回滚等操作Query OK, 0 rows affected (0.01 sec)mysql> SELECT * FROM student; #删除的哪行恢复了
+—–+————+—–+—–+| SID | Name | Age | CID |+—–+————+—–+—–+| 1 | Li Lianjie | 0 | 1 || 2 | Cheng Long | 0 | 2 || 3 | Yang Guo | 0 | 3 || 4 | Guo Jing | 0 | 4 |+—–+————+—–+—–+4 rows in set (0.00 sec) 保存点:恢复到所定义的那个保存点SAVEPOINT,保存点名称不能以数字开头。保存点:SAVEPOINT savepoint_name; 保存以上操作为该保存点名称
回滚保存点:ROLLBACK TO savepoint_name; 回滚到该保存点之前的状态Usage:mysql> START TRANSACTION; #启动事务Query OK, 0 rows affected (0.00 sec)mysql> select * FROM student;+—–+————+—–+—–+| SID | Name | Age | CID |+—–+————+—–+—–+| 1 | Li Lianjie | 0 | 1 || 2 | Cheng Long | 0 | 2 || 3 | Yang Guo | 26 | 3 || 4 | Guo Jing | 53 | 4 |+—–+————+—–+—–+4 rows in set (0.00 sec)mysql>SAVEPOINT a; #该保存点stude开发云主机域名nt表数据都存在Query OK, 0 rows affected (0.00 sec)mysql> select * FROM student;+—–+————+—–+—–+| SID | Name | Age | CID |+—–+————+—–+—–+| 1 | Li Lianjie | 0 | 1 || 2 | Cheng Long | 0 | 2 || 3 | Yang Guo | 26 | 3 || 4 | Guo Jing | 53 | 4 |+—–+————+—–+—–+4 rows in set (0.00 sec)
mysql> DELETE FROM student WHERE SID=4; #删除student表的SID为4的行Query OK, 1 row affected (0.00 sec)mysql> SELECT * FROM student;+—–+————+—–+—–+| SID | Name | Age | CID |+—–+————+—–+—–+| 1 | Li Lianjie | 0 | 1 || 2 | Cheng Long | 0 | 2 || 3 | Yang Guo | 26 | 3 |+—–+————+—–+—–+3 rows in set (0.00 sec)mysql> SAVEPOINT b; #该保存点student表数据的SID为4的行不存在了Query OK, 0 rows affected (0.00 sec)mysql> DELETE FROM student WHERE SID=3;Query OK, 1 row affected (0.00 sec)mysql> SELECT * FROM student;+—–+————+—–+—–+| SID | Name | Age | CID |+—–+————+—–+—–+| 1 | Li Lianjie | 0 | 1 || 2 | Cheng Long | 0 | 2 |+—–+————+—–+—–+2 rows in set (0.00 sec)mysql> SAVEPOINT c; #该保存点student表的SID为3和4的行都不存在Query OK, 0 rows affected (0.00 sec)mysql> ROLLBACK TO b; #回滚至保存点b,即student表,SID为4的行不存在的行Query OK, 0 rows affected (0.00 sec)mysql> SELECT * FROM student;+—–+————+—–+—–+| SID | Name | Age | CID |+—–+————+—–+—–+| 1 | Li Lianjie | 0 | 1 || 2 | Cheng Long | 0 | 2 || 3 | Yang Guo | 26 | 3 |+—–+————+—–+—–+3 rows in set (0.00 sec)mysql> ROLLBACK TO a;#即所有数据都存在的那个点Query OK, 0 rows affected (0.00 sec)mysql> SELECT * FROM student;+—–+————+—–+—–+| SID | Name | Age | CID |+—–+————+—–+—–+| 1 | Li Lianjie | 0 | 1 || 2 | Cheng Long | 0 | 2 || 3 | Yang Guo | 26 | 3 || 4 | Guo Jing | 53 | 4 |+—–+————+—–+—–+4 rows in set (0.00 sec)

相关推荐: 如何使用Redis实现秒杀

如何使用Redis实现秒杀?很多新手对此不开发云主机域名是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。导语:秒杀想必大家都了解,在短时间内请求访问会激增,同时要保证不会超卖和数据的准确,对于技术方…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 06/04 17:52
下一篇 06/04 17:53

相关推荐