1
liprais 2014-04-18 13:55:30 +08:00
关键词:锁
|
3
thinkif 2014-04-18 14:08:45 +08:00
不知道具体场景, 不过排序结果放在缓存里会不会有帮助?
|
4
tobyzw 2014-04-18 14:16:55 +08:00
排序没有影响吧?!
|
7
Tinet OP @thinkif 在where子句里面这样写:flag=0 limit 1,如果满足条件的数据有很多条的话,是取在数据库中存储最靠前的吗?
|
8
lu18887 2014-04-18 17:07:09 +08:00
这是有专业的术语的,叫事务隔离级别 isolation level 。你可以查查相关的信息
|
9
lu18887 2014-04-18 17:07:59 +08:00
这个可不一定的,得看数据库的实现的。
@Tinet 在where子句里面这样写:flag=0 limit 1,如果满足条件的数据有很多条的话,是取在数据库中存储最靠前的吗? |
11
Tinet OP @lu18887 类似于这种需求:有一个表存储“激活码”,每1小时就有1万条数据插入,同时每秒钟会有1000个人在请求查询"激活码表",查询到后修改其状态为已使用(状态1)。
|
14
mikej 2014-04-18 23:04:40 +08:00
关系数据库标准中的4个事务隔离级别
#未提交读(read uncommitted): 允许脏读,也就是可能读取到其他会话中未提交事务修改的数据 #提交读(read committed): 只能读取到已经提交的数据。oracle等多数数据库默认都是该级别 #可重复读(repeated read): 可重复读。在同一个事务内的查询都是事务开始时刻一致的,innodb的默认级别。(在SQL标准中,该隔离级别消除了不可重复读,但是还存在幻象读) #串行读(serializable): 完全串行化的读,每次读都需要获得表级共享锁,读写相互都会阻塞。 这里有很好的解释: http://blog.chinaunix.net/uid-21879027-id-3124330.html |
15
lu18887 2014-04-19 00:39:36 +08:00
@Tinet 我所知道的,ORACLE有“序列” 查一次,序列+1,你可以这样子做,激活码先生成几百万条,然后每个激活码,对应一个ID,这样你每次只要查那个序列就可以了,查出序列的值(一个数字ID),然后去读取激活码表对应的激活码就可以了。映射。这样就简单很多了。
|