免責聲明:我的DB知識大多來自Mysql的,所以我可能誤解在Vertica的一些事情...獨特Contrains在Vertica的DB
我想知道如果存在插入/更新中值的技術vertica,同時在多個會話中實施唯一約束。假設我有一個表格:
'id', 'unique_field', 'some_filed'
並且unique_field上有一個唯一約束條件。我的理解是,在vertica中,首先需要做一個插入,然後執行ANALYZE_CONSTRAINTS來驗證約束是否被違反。在我的具體情況中,我有多個會話在同一個表上執行INSERTS,他們可能會嘗試推送相同的記錄。單個會話的順序似乎是:
Insert into table (id, unique_field, some_field) values (5, 'abc', 'data');
SELECT ANALYZE_CONSTRAINTS(table);
COMMIT;
如果我運行兩個單獨的會話這個序列,有機會的話,這兩個查詢嘗試插入相同unique_field併爲他們每個人將不會有約束因爲它們在單獨的事務中檢測到違規,這會導致重複的數據。
有沒有更好的方法來防止這種情況發生?或者我錯過了一些東西。
只是爲了澄清,ANALYZE_CONSTRAINS()在它正確運行的事務範圍內運行?如果另一個並行事務正在執行,它們都不會「看到」它們彼此將違反約束? – 2014-09-24 18:18:05
@phraktal它應該與交易隔離。 – Kermit 2014-09-24 18:37:38