事务控制语言

Transaction Control Language

一、事务的概念

  1. 事务:一个或一组sql语句组成一个执行单元,这个执行单元要么全部执行,要么全部不执行。单元中的每条sql语句是相互依赖的。如果单元中某一条语句一旦执行失败或产生错误,真个单元将回滚,所有受到影响的数据将返回原来的状态。
  2. 存储引擎:(表类型)在mysql中的数据用各种不同的技术存储在文件/内存中。
    使用 show engines;查看mysql支持的存储引擎
mysql> show engines;
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine             | Support | Comment                                                        | Transactions | XA   | Savepoints |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| FEDERATED          | NO      | Federated MySQL storage engine                                 | NULL         | NULL | NULL       |
| MRG_MYISAM         | YES     | Collection of identical MyISAM tables                          | NO           | NO   | NO         |
| MyISAM             | YES     | MyISAM storage engine                                          | NO           | NO   | NO         |
| BLACKHOLE          | YES     | /dev/null storage engine (anything you write to it disappears) | NO           | NO   | NO         |
| CSV                | YES     | CSV storage engine                                             | NO           | NO   | NO         |
| MEMORY             | YES     | Hash based, stored in memory, useful for temporary tables      | NO           | NO   | NO         |
| ARCHIVE            | YES     | Archive storage engine                                         | NO           | NO   | NO         |
| InnoDB             | DEFAULT | Supports transactions, row-level locking, and foreign keys     | YES          | YES  | YES        |
| PERFORMANCE_SCHEMA | YES     | Performance Schema                                             | NO           | NO   | NO         |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+

mysql中用的最多的存储引擎有:innodb,myisam,memory等。其中,innodb支持事务,而myisam memory不支持事务。

二、事务的属性(ACID)

原子性 一个事务包含多个操作,这些操作要么全部执行,要么全都不执行。实现事务的原子性,要支持回滚操作,在某个操作失败后,回滚到事务执行之前的状态。
一致性 事务必须使数据库从一个一致状态变换到另外一个一致状态
隔离性 多个事务之间不能互相干扰,需要隔离级别
持久性 事务一旦被提交,永久改变数据库的数据

三、事务的创建

隐式使用:事务没有明显的开始和结束的标记
比如:insert、update、delete
显示事务:
前提:必须先设置自动提交功能为禁用

set autocommit = 0;

步骤1:开启事务
set autocommit = 0;
start transaction;可选
步骤2: 编写事务中的sql语句(select insert update delete)
语句1
语句2
·····
步骤3: 结束事务
commit; 提交事务
rollback; 回滚事务

# 四、设置隔离级别
read uncommitted:  出现脏读,不可重复读,幻读
read committed:避免脏读,出现不可重复读,幻读
repeatable read: 避免脏读,不可重复读,出现幻读
serializable : 都可以避免
mysql支持4种级别,默认级别为repeatable read
每次启动一个mysql程序,就会获得一个单独的数据库连接,每个数据库连接都有一个全局变量@@tx_isolation,表示当前的事务隔离级别。
查看当前的隔离级别:SELECT @@tx_isolation
```mysql
mysql> SELECT @@tx_isolation
    -> ;
+-----------------+
| @@tx_isolation  |
+-----------------+
| REPEATABLE-READ |
+-----------------+
1 row in set (0.05 sec)

设置当前的mysql连接的隔离级别:

set transaction isolation level read committed;

设置数据库系统的全局的隔离级别:

set global transaction isolation level read committed;

savepoint : 设置保存点

posted @ 2019-09-20 19:11  guoqiangliu  阅读(759)  评论(0编辑  收藏  举报