MySql速查-3-事务处理

事务处理 - ACID - Atomic原子性 Consisten稳定性 Isolated孤立性 Durable可靠性

START TRANSACTION;
INSERT INTO t SET name=’Bob’;
SAVEPOINT my_savepoint;
INSERT INTO t SET name=’Alice’;
COMMIT;

ROLLBACK;
SET autocommit=0; //禁用自动提交模式
SET autocommit=1;

隔离性
数据问题
1.脏读(Drity Read):某个事务已更新一份数据,另一个事务在此时读取了同一份数据,由于某些原因,前一个RollBack了操作,则后一个事务所读取的数据就会是不正确的。
2.不可重复读(Non-repeatable read):在一个事务的两次查询之中数据不一致,这可能是两次查询过程中间插入了一个事务更新的原有的数据。
3.幻读(Phantom Read):在一个事务的两次查询中数据笔数不一致,例如有一个事务查询了几列(Row)数据,而另一个事务却在此时插入了新的几列数据,先前的事务在接下来的查询中,就会发现有几列数据是它先前所没有的。

隔离级别 脏读(Dirty read) 不可重复读(NonRepeatable read) 幻读(Phantom Read)
未提交读(Read uncommitted) 可能 可能 可能
已提交读(Read committed) 不可能 可能 可能
可重复读(Repeatable read) 不可能 不可能 可能
可串行化(Serializable ) 不可能 不可能 不可能

相关SQL语句
my.inf-> [mysqld] > transaction-isolation = {READ-UNCOMMITTED | READ-COMMITTED | REPEATABLE-READ | SERIALIZABLE}

SET [SESSION | GLOBAL] TRANSACTION ISOLATION LEVEL {READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE}

SELECT @@global.tx_isolation;
SELECT @@session.tx_isolation;
SELECT @@tx_isolation;

事务的非事务处理
1. 利用锁
LOCK TABLES tbl_name READ\WRITE, …;
UNLOCK TABLES;
2. 使用相对更新操作
UPDATE tbl_name SET var=var+10 where …;

你可能感兴趣的:(mysql,事务处理,MySQL技术内幕)