事务控制语言

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_isolationmysql
mysql> SELECT @@tx_isolation
-> ;
+-----------------+
| @@tx_isolation |
+-----------------+
| REPEATABLE-READ |
+-----------------+
1 row in set (0.05 sec)
设置当前的mysql连接的隔离级别:sql
set transaction isolation level read committed;
设置数据库系统的全局的隔离级别:sql
set global transaction isolation level read committed;
```
savepoint : 设置保存点

转载于:https://www.cnblogs.com/isguoqiang/p/11558997.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值