2012-07-09 32 views

回答

2

一般他們將(應)並行執行,如果主鍵被定義。

該行爲在很大程度上取決於DBMS。 MySQL與MyISAM將例如如果正在對該表執行DML,則阻止對錶的任何進一步訪問。 SQL Server在默認安裝和較舊的DB2版本中也是如此。

一般來說,如果DBMS使用MVCC(甲骨文和PostgreSQL,火鳥中,MySQL/InnoDB的,...),那麼你可以期望插入並行

一件事運行可以塊併發插入是如果兩個事務插入相同的主鍵值。在這種情況下,第二個事務將需要等待第一個提交(然後第二個將得到pk違例錯誤)或回滾(第二個將成功)。

+0

它可能比這更復雜。主鍵只是一個可能強制序列化的實例。身份/自動增量列,唯一約束(其中的主鍵是一個示例)和觸發器是其他情況。 – 2012-07-09 13:23:57

+0

@GordonLinoff:觸發器不會序列化插入 - 除非這是在觸發器代碼中手動完成的。關於身份列的有趣點。這是身份/ auto_increment概念的缺點,還是基礎索引的結果(因此它基本上是唯一的索引「問題」)。我主要使用Oracle和PostgreSQL,並且序列沒有任何併發​​問題。 – 2012-07-09 13:34:22