1,事务特性
原子性)一个事务要么全部执行,要么不执行。
隔离性)各事务间互不干扰。
一致性)事务的开始与结束状态必须保持一致。即对于同一个事务,不管执行多少次,如果开始状态相同,结束状态也相同。
持久性)事务的写入操作具有永久性,即使系统发生故障。
2,事务隔离级别
读未提交)最低级别,没有限制,一个事务未提交的数据另一个事务可见。
原理:读操作不加锁,更新操作加行级共享锁(即读锁)。
理解:在读锁下,数据任何时候可读,因此会读取到另一事务更新而未提交的数据。
缺点:脏读、不可重复读、幻读
读已提交)一个事务可以读取另一个事务已经提交的数据,未提交的数据不可以。
原理:读操作加行级共享锁(读锁),读完立即释放读锁,更新操作加行级排他锁(写锁)。
理解:一个事务在读取时,读取完毕立即释放读锁,此时另一个事务可以加写锁更新数据,更新提交后释放写锁,之前的事务再次读取时读取到更新后的数据。
缺点:解决脏读,存在不可重复读、幻读
可重复读)读操作加行级共享锁(读锁),整个事务完成后才释放读锁,更新操作加行级排他锁(写锁)
原理:与上一个比较,读取事务中即使有多个读取操作,因为读锁针对于整个事务,所以读取的数据是一致的。
缺点:解决不可重复读,还存在幻读(因为没有对整个表加锁,2次读取结果因为插入等不一致)
序列化)读取时加表级共享锁,更新时加表级排他锁。
缺点:解决了幻读、隔离性好,并发性差。
返回每一行多列数据中的最大值
例如表
SELECT id,MAX(c1) FROM
(SELECT id,c1 FROM test UNION SELECT id,c2 FROM test UNION SELECT id,c3 FROM test)col
GROUP BY id;