2012-07-19 93 views
0

我需要明确地锁定的MySQL表为以下情况:MySQL的表锁定

MySQL数据库用户名:DB_USER(并且只有一个)
Web客户端会话:许多用户登录的同时

由于mysql用户是单一的,但我有许多客户端会话与我的Web服务器。会发生什么(在一个表中插入记录,然后插入ID并将数据添加到另一个表):

  1. 许多Web会话都有单独的db_user副​​本。
  2. 许多浏览器会话的db_user的单个副本。
  3. 任何其他。

请帮忙。

+1

对不起,我无法理解你到底在问什么。如果你只是选择数据,那么不,你永远不需要锁定表。 – 2012-07-19 03:15:54

+0

插入并随后使用第一个表中的最后一个插入ID将数据添加到其他表时。 – 2012-07-23 02:37:01

+0

锁定表的目的是什么?你想只允许一个用户插入主键?如果这是真的,你可以使用InnoDB引擎和'last_insert_id()'函数。此函数是基于会话的函数,因此将始终获得唯一值(在不同的会话中)。 InnoDb引擎将允许您使用表锁定行级锁定,以便其他连接也可以工作 – ravnur 2012-07-23 06:24:09

回答

4

Harmeet,

简短的回答是否定的,你不需要做你的描述时使用LOCK TABLES

您只需要使用LOCK TABLES,当您想要确保您是唯一一个向表中写入数据时,例如,如果您想要INSERT大量记录,并且希望操作发生的速度尽可能快可能。

您可以在由mysqldump命令创建的转储文件中看到此内容。下面是一个转储文件的示例:

LOCK TABLES `tbl` WRITE; 
/*!40000 ALTER TABLE `tbl` DISABLE KEYS */; 
INSERT INTO `tbl` VALUES ... 
/*!40000 ALTER TABLE `tbl` ENABLE KEYS */; 
UNLOCK TABLES; 
+0

锁定对单个(但巨大的)REPLACE语句有利吗? – andig 2013-10-14 13:42:21