Mysql 事务

事务的开始

begin  在5.5以上的版本 无需手工执行begin  在执行DML语句时 会自动在前天加一个bgein命令

事务的结束

commit  提交事务

如果要回滚 需要执行  rollback  

自动提交策略,默认是1

mysql> select @@autocommit;
+--------------+
 @@autocommit 
+--------------+
 1 
+--------------+
1 row in set (0.00 sec)

自动提交是否打开,一般在有事务需求的MySQL中,将其关闭
不管有没有事务需求,我们一般也都建议设置为0,可以很大程度上提高数据库性能

(1)
set autocommit=0;   
set global autocommit=0;
(2)
vim /etc/my.cnf
autocommit=0

隐式提交语句

导致提交的非事务语句:

DDL语句: (ALTER、CREATE 和 DROP)

DCL语句: (GRANT、REVOKE 和 SET PASSWORD)

锁定语句:(LOCK TABLES 和 UNLOCK TABLES)

导致隐式提交的语句示例:

TRUNCATE TABLE

LOAD DATA INFILE

SELECT  FOR UPDATE

事务的特性

Atomic(原子性)

所有语句作为一个单元全部成功执行或全部取消。不能出现中间状态。

Consistent(一致性)

如果数据库在事务开始时处于一致状态,则在执行该事务期间将保留一致状态。

Isolated(隔离性)

事务之间不相互影响。

Durable(持久性)

事务成功完成后,所做的所有更改都会准确地记录在数据库中。所做的更改不会丢失。

事务的隔离级别

影响到数据的读取,默认的级别是 RR模式.

transaction_isolation 隔离级别(参数)

负责的是,MVCC,读一致性问题

  • RU : 读未提交,可脏读,一般部议叙出现
  • RC : 读已提交,可能出现幻读,可以防止脏读.
  • RR : 可重复读,功能是防止”幻读”现象 ,利用的是undo的快照技术+GAP(间隙锁)+NextLock(下键锁)
  • SR : 可串行化,可以防止死锁,但是并发事务性能较差

补充: 在RC级别下,可以减轻GAP+NextLock锁的问题,但是会出现幻读现象,一般在为了读一致性会在正常select后添加for update语句.但是,请记住执行完一定要commit 否则容易出现所等待比较严重.
例如:

[world]>select * from table_name where id=1 for update;
[world]>commit;

如何设置隔离机制

配置文件中指定

[mysqld] 
transaction-isolation = READ-COMMITTED
临时修改
 SET [GLOBAL  SESSION] TRANSACTION ISOLATION LEVEL <isolation-level>
 其中的<isolation-level>可以是:
 – READ UNCOMMITTEDREAD COMMITTEDREPEATABLE READSERIALIZABLE

Mysql 事务
http://www.jcwit.com/article/65/
作者
Carlos
发布于
2019年6月11日
许可协议