我需要明確地鎖定的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