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 ) | 不可能 | 不可能 | 不可能 |
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;
事务的非事务处理
- 利用锁
LOCK TABLES tbl_name READ\WRITE, ...;
UNLOCK TABLES;
- 使用相对更新操作
UPDATE tbl_name SET var=var+10 where ...;