2014-03-27 76 views
0

我有一个MySql数据库托管在一个Web服务器上,它有一组包含数据的表。我将发布使用HTML5/Javascript/CS3构建的前端应用程序。在MySql表中同时插入/更新?

现在,当多个用户试图在同一时间插入/更新到其中一个表中时,它会创建一个冲突,或者它会自动处理表的锁定,例如,当一个用户正在使用时,它会为他锁定表格,然后让其余的在用户完成后进入队列,然后释放锁定,然后将其放入队列中的下一个?难道这会发生什么或做我需要处理在MySQL数据库中的情况下

例:

当用户想要插入到他所说的位于其具有插入Web服务器的PHP文件数据库命令将数据发布到数据库中。我担心两个或两个以上的人同时插入是否会进行更新。

mysqli_query($con,"INSERT INTO cfv_postbusupdate (BusNumber, Direction, StopNames, Status, comments, username, dayofweek, time) VALUES (".trim($busnum).", '".trim($direction3)."', '".trim($stopname3)."', '".$status."', '".$comments."', '".$username."', '".trim($dayofweek3)."', '".trim($btime3)."')"); 
+0

你可以详细说明你的意思是“插入/更新”吗?你能提供一个简单的'INSERT'语句作为例子吗?你担心什么样的冲突?你能提供一个这样的冲突的例子吗? – danorton

回答

1

MySQL自动处理表锁定。

请注意,使用MyISAM引擎时,整个表会被锁定,并且语句会阻塞(“排队”),等待释放锁。

InnoDB引擎提供了更多的并发性,并且可以执行行级锁定,而不是锁定整个表。

例如,如果您想保持参照完整性,并且您希望禁止其他会话在会话执行期间对任何表进行更改,则可能有一些情况下您想要锁定多个MyISAM表是工作。但是,这确实会导致并发性;这应该更像是一个“管理”类型的函数,并不是一个并发应用程序应该做的事情。

如果您正在使用事务(InnoDB),则应用程序需要处理的问题是表中的行被锁定的顺序;当MySQL检测到有两个(或更多)事务无法继续进行时,应用程序可能会遇到“死锁”异常,因为每个事务都需要获取其他持有的锁。 MySQL能做的唯一事情就是检测到这一点,而且MySQL唯一能做的就是选择其中一个事务作为受害者,那就是会导致“死锁”异常的事务,因为MySQL会杀死它,允许至少要进行一项交易。