当前位置: 首页 » 网站建设 » 网站建设知识 » 正文

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

发布时间:2025-07-22 以下文章来源于网友投稿,内容仅供参考!

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; #该保存点student表数据都存在

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)

  • • MySql-InnoDB数据库引擎

    MySql数据库的结构Mysql采用单进程多线程系统结构,Mysql采用插件结构,将对数据库表的操作和管理交个数据库引擎完成。核心组件

  • • MySQL修改索引名称

    MySQL修改索引名称。对于MySQL 5.7及以上版本,可以执行以下命令:ALTER TABLE tbl_name RENAME INDEX old_index_name TO new_ind

  • • mysqlgroupby组内排序方法

    mysqlgroupby组内排序方法。mysql的group by语法可以根据指定的规则对数据进行分组,分组就是将一个数据集划分成若干个小区域,

  • • MySQL基本操作

    初步知识数据库是一个以某种有组织方式存储的数据的集合 DBMS是数据库管理系统也叫数据库软件 MySQL是一种DBMS SQL语句是DBMS用

  • • mysql(七)mysql安装步骤

    mysql(七)mysql安装步骤。注:我的运行环境是widnows xp professional + MySQL5.0一, 创建用户: 命令:CREATE USER 'usernam

  • 今年哪天霜降-今日霜降是几点几分
    霜降节气的特点和风俗-霜降节气风俗大全
    2025大寒是阳历几月几日?2025大寒是哪一天
    2025万圣节是几号?今年万圣节是几月几日
    今年的霜降是几月几号?2025霜降是哪一天
    铁路12306密码格式有什么要求_铁路12306密码设置规则说明
    2025年中国的重阳节是农历的哪一天
    2025年重阳节是几月几日?2025年重阳节是哪一天
    万圣节对中国人危害?中国禁止过万圣节原因
    万圣节是哪个国家的节日?万圣节源自于哪个国家