1
如果兩個用戶同時在同一個目標表上執行INSERT INTO
語句,這些語句是並行執行還是按順序執行?關係數據庫是否並行或按順序執行插入語句?
此行爲是否會根據目標表是否具有主鍵而更改?
這是所有關係數據庫的定義規則還是不同的供應商以不同的方式實現這一點?
如果兩個用戶同時在同一個目標表上執行INSERT INTO
語句,這些語句是並行執行還是按順序執行?關係數據庫是否並行或按順序執行插入語句?
此行爲是否會根據目標表是否具有主鍵而更改?
這是所有關係數據庫的定義規則還是不同的供應商以不同的方式實現這一點?
在一般他們將(應)並行執行,如果主鍵被定義。
該行爲在很大程度上取決於DBMS。 MySQL與MyISAM將例如如果正在對該表執行DML,則阻止對錶的任何進一步訪問。 SQL Server在默認安裝和較舊的DB2版本中也是如此。
一般來說,如果DBMS使用MVCC(甲骨文和PostgreSQL,火鳥中,MySQL/InnoDB的,...),那麼你可以期望插入並行
一件事運行可以塊併發插入是如果兩個事務插入相同的主鍵值。在這種情況下,第二個事務將需要等待第一個提交(然後第二個將得到pk違例錯誤)或回滾(第二個將成功)。
它可能比這更復雜。主鍵只是一個可能強制序列化的實例。身份/自動增量列,唯一約束(其中的主鍵是一個示例)和觸發器是其他情況。 – 2012-07-09 13:23:57
@GordonLinoff:觸發器不會序列化插入 - 除非這是在觸發器代碼中手動完成的。關於身份列的有趣點。這是身份/ auto_increment概念的缺點,還是基礎索引的結果(因此它基本上是唯一的索引「問題」)。我主要使用Oracle和PostgreSQL,並且序列沒有任何併發問題。 – 2012-07-09 13:34:22