我需要明确地锁定的MySQL表为以下情况:MySQL的表锁定
MySQL数据库用户名:DB_USER(并且只有一个)
Web客户端会话:许多用户登录的同时
由于mysql用户是单一的,但我有许多客户端会话与我的Web服务器。会发生什么(在一个表中插入记录,然后插入ID并将数据添加到另一个表):
- 许多Web会话都有单独的db_user副本。
- 许多浏览器会话的db_user的单个副本。
- 任何其他。
请帮忙。
我需要明确地锁定的MySQL表为以下情况:MySQL的表锁定
MySQL数据库用户名:DB_USER(并且只有一个)
Web客户端会话:许多用户登录的同时
由于mysql用户是单一的,但我有许多客户端会话与我的Web服务器。会发生什么(在一个表中插入记录,然后插入ID并将数据添加到另一个表):
请帮忙。
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;
锁定对单个(但巨大的)REPLACE语句有利吗? – andig 2013-10-14 13:42:21
对不起,我无法理解你到底在问什么。如果你只是选择数据,那么不,你永远不需要锁定表。 – 2012-07-19 03:15:54
插入并随后使用第一个表中的最后一个插入ID将数据添加到其他表时。 – 2012-07-23 02:37:01
锁定表的目的是什么?你想只允许一个用户插入主键?如果这是真的,你可以使用InnoDB引擎和'last_insert_id()'函数。此函数是基于会话的函数,因此将始终获得唯一值(在不同的会话中)。 InnoDb引擎将允许您使用表锁定行级锁定,以便其他连接也可以工作 – ravnur 2012-07-23 06:24:09