营销型网站建设实训报告个人总结,南京奥体建设公司,网站建站策划,wordpress ip插件问题描述假设一个情况#xff0c;这里只是假设#xff0c;真实的情况可能不会这样设计#xff0c;但是假如真的发生了....铁老大有一张这样的ticket表#xff0c;用来存放北京到上海的票。iduidstart_addrend_addrbook_time11300009860上海北京1386666032120上海北京30上海…问题描述假设一个情况这里只是假设真实的情况可能不会这样设计但是假如真的发生了....铁老大有一张这样的ticket表用来存放北京到上海的票。iduidstart_addrend_addrbook_time11300009860上海北京1386666032120上海北京30上海北京40上海北京uid 不等于0 并且 book_time 不等于0则表示已售出不许再更改。年底了大家开始抢了当某一个人开始抢的时候铁老大这样做了当A开始抢的时候从表中所有uid0的记录中随机取出一条然后修改当前记录的uid为A的uidbook_time为当前时间。那么好了这个时候并发产生了10000个人同时抢最后剩下的10张票有2个人AB同时读取了uid0 and id2的记录然后A把uid修改为自己的book_time修改timeA,系统通知A抢票成功 紧接着B同样修改了这条记录为自己的那么这个时候A的票就失效了。这里就考虑使用锁机制了如果在A读取了这条记录后并把这条记录加上写锁那么别人就无法再读取加锁也就不会修改多次了。实验结果实验了一下for update 加锁然后发现了一些问题。1、当我们使用主键查询去加锁的时候可以对这条记录加行锁打开一个终端执行一下代码mysql begin;Query OK, 0 rows affected (0.00 sec)mysql select * from ticket where id 2 for update;那么 id2这个记录就会被加行写锁。令一个终端将无法读取该记录但是却可以读取其他记录#可以读取加锁mysql select * from ticket where id 3 for update;#不可以读取mysql select * from ticket where id 2 for update;2、但是当我们按非主键查询会怎样呢mysql begin;Query OK, 0 rows affected (0.00 sec)mysql select * from ticket where uid 0 limit 1 for update;那么这个时候这个表会被锁住任何记录都不能再读取加锁//不可读取等待释放锁mysql select * from ticket where id 1 for update;//不可读取等待释放锁mysql select * from ticket where uid 0 limit 1 for update;但是表锁会减少并发。结论有没有一种方法可以在非主键字段查询一条记录时上实现加行写锁期待高手支招。