2010-05-15 70 views
2

如果一個INSERT和一個SELECT同時在一個mysql表上執行,哪一個會先執行?MySQL INSERT和SELECT優先順序

示例:假設「用戶」錶行數爲0

然後這兩個查詢在同一時間(假設它是在相同的毫/微秒)運行:

INSERT into users (id) values (1) 

SELECT COUNT(*) from users 

最後一次查詢是否返回0或1?

回答

5

取決於您的users表是MyISAM還是InnoDB。

如果是MyISAM,一個語句或另一個語句會鎖定表格,並且您幾乎無法控制該表格,而您自己卻無法控制該表格。

如果是InnoDB,它是基於事務的。多版本化架構允許同時訪問表,並且SELECT將在交易開始時看到行的數量。如果同時出現INSERT,則SELECT將顯示0行。事實上,如果INSERT的事務尚未提交,您甚至可以在幾秒鐘後執行SELECT,看到0行。

這兩個交易沒有辦法真正同時啓動。交易保證有一定的順序。

2

這取決於哪個語句將首先執行。如果是第一個,那麼第二個將返回1,如果第二個首先執行,那麼它將返回0.即使您在具有多個物理內核的計算機上執行它們,並且由於鎖定機制,它們將永遠不會以完全相同的方式執行時間戳。