Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 暂时锁定innoDB表_Mysql_Locking_Innodb - Fatal编程技术网

Mysql 暂时锁定innoDB表

Mysql 暂时锁定innoDB表,mysql,locking,innodb,Mysql,Locking,Innodb,在我当前的web应用程序中,我做了由几千行组成的更大的插入,我想确保在插入完成之前,除了阅读表格之外,没有人能做任何事情 在为普通非管理员用户保持读可用性的同时,最好的方法是什么 谢谢 为什么不在一个大交易中插入?这样就不需要任何锁定了。因为您只是插入而不是更新,所以这应该不是问题。只需在单个事务中插入记录 如果调用正确,InnoDB支持行级锁定,因此即使是更新也不会有问题。您可能还需要更改默认隔离级别: set transaction isolation level serializable

在我当前的web应用程序中,我做了由几千行组成的更大的插入,我想确保在插入完成之前,除了阅读表格之外,没有人能做任何事情

在为普通非管理员用户保持读可用性的同时,最好的方法是什么


谢谢

为什么不在一个大交易中插入?这样就不需要任何锁定了。

因为您只是插入而不是更新,所以这应该不是问题。只需在单个事务中插入记录


如果调用正确,InnoDB支持行级锁定,因此即使是更新也不会有问题。

您可能还需要更改默认隔离级别:

 set transaction isolation level serializable;
 start transaction;
 // insert data
 commit

你好,A1ex07。谢谢。这是一个临时的解决方案,需要在每个查询上调用,这将是可怕的还是永久的?谢谢这取决于应用程序的业务逻辑。可序列化隔离级别保证没有其他事务可以更改可能以某种方式影响当前事务的数据。例如,在执行表1中的SELECT count*(字段1<10)后,如果其他事务更改了查询结果,则无法插入/删除/更新表1中的记录。因此,如果您的插入不必按特定顺序执行,并且下一个查询不依赖于上一个查询,那么您可以在单独的事务中运行每个查询。。。