2012-07-19 116 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