数据库中锁机制:
共享锁:在非Serializable隔离级别下做查询不加任何锁,而在Serializable隔离级别下做的查询都会加共享锁,
共享锁特点:共享锁和共享锁可以共存,但是共享锁和排他锁不能共存。
排他锁:在所有隔离级别下,进行增删改都会加排他锁,
排他锁特点:和任意其他锁都不能共存。
如果是两个线程并发修改,一定会互相捣乱,这时必须利用锁机制防止多个线程并发修改。
如果两个线程并发查询,没有线程安全问题。(即便是在Serializable隔离级别下,做查询。多个共享锁也可以共存)。
如果两个线程一个修改,一个查询。可能存在(脏读,不可重复读,幻读也叫虚读)
注意的是:
不可重复读:在一个事务内读取表中的某一行数据,多次读取结果不同 ----行级别问题。
虚读(幻读):是指在一个事务内读取到了别人插入的数据,导致前后读取不一致 ----表级别的问题。
在实际的查询中,我们做的更多的是查询某个条件下的数据,也就是面临更多的是行级别的问题。
直接查询整个表的数据的情况相对少一点,即面临的表级别的问题要少一点。
原文:http://www.cnblogs.com/zhouxuan323/p/5159616.html