有一个表,有多个进程同时在读这个表中的数据,现在加了一项任务,每过一段时间就会由另一个专门的进程往表里添加很多数据,并根据某个域的值对整个表进行排序(此时可能正好有进程在从表中读数据),那么在这种情况下,Mysql是怎么处理的呢?
1
F281M6Dh8DXpD1g2 Apr 18, 2014
关键词:锁
|
3
thinkif Apr 18, 2014
不知道具体场景, 不过排序结果放在缓存里会不会有帮助?
|
4
tobyzw Apr 18, 2014
排序没有影响吧?!
|
8
lu18887 Apr 18, 2014
这是有专业的术语的,叫事务隔离级别 isolation level 。你可以查查相关的信息
|
9
lu18887 Apr 18, 2014
这个可不一定的,得看数据库的实现的。
@Tinet 在where子句里面这样写:flag=0 limit 1,如果满足条件的数据有很多条的话,是取在数据库中存储最靠前的吗? |
11
Tinet OP @lu18887 类似于这种需求:有一个表存储“激活码”,每1小时就有1万条数据插入,同时每秒钟会有1000个人在请求查询"激活码表",查询到后修改其状态为已使用(状态1)。
|
14
mikej Apr 18, 2014
关系数据库标准中的4个事务隔离级别
#未提交读(read uncommitted): 允许脏读,也就是可能读取到其他会话中未提交事务修改的数据 #提交读(read committed): 只能读取到已经提交的数据。oracle等多数数据库默认都是该级别 #可重复读(repeated read): 可重复读。在同一个事务内的查询都是事务开始时刻一致的,innodb的默认级别。(在SQL标准中,该隔离级别消除了不可重复读,但是还存在幻象读) #串行读(serializable): 完全串行化的读,每次读都需要获得表级共享锁,读写相互都会阻塞。 这里有很好的解释: http://blog.chinaunix.net/uid-21879027-id-3124330.html |