我有一個php腳本可以將新部件插入到postgres數據庫中。我想在創建零件之前檢查零件是否存在。我怎樣才能做到這一點。我正在使用通常的INSERT INTO子句。插入前檢查是否存在記錄
3
A
回答
6
你SELECT
首先,要知道,如果你一定要INSERT
或UPDATE
,如:
if (
$db->fetchOne(
'SELECT COUNT(1) FROM parts WHERE article_number = ?',
$p->article_number
)
) {
$db->update(
'parts',
$p->to_array(),
$db->quoteInto('article_number = ?', $p->article_number)
);
}
else {
$db->insert('parts', $p->to_array());
}
重新米倫的評論:大一點!使用默認的PostgreSQL事務隔離級別(READ COMMITTED
),另一個進程可能會在您的SELECT
之後但在您的INSERT
之前插入(並提交)「您的」部分。
對於我們構建的應用程序,我們通常只捕獲數據庫異常,並對其進行處理(通知用戶重試)。或者你可以用SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
去。見Transaction Isolation。
1
如果您很少會遇到衝突:採取樂觀的方法,只需插入新的方法,並在發生時處理唯一性違規。當它失敗時,這會使當前事務失效,所以如果你在其中做了很多工作,首先檢查是值得的。在這種情況下,我更喜歡SELECT EXISTS(SELECT 1 ... FROM ... WHERE ...)
。
無論如何,你必須處理違反唯一性的可能性。即使您先檢查,也有可能併發事務插入相同的記錄並首先提交。
5
insert into parts(article_number,category)
select 'KEYB','COMPTR'
where not exists(select * from parts where article_number = 'KEYB')
+0
偉大的解決方案,如果我們想默默地忽略重複。不受競賽狀況的影響。我自己使用它。 – filiprem 2009-12-16 22:46:53
相關問題
- 1. 在插入新記錄之前檢查記錄的存在
- 2. 在插入.NET之前檢查記錄是否存在的最有效方法
- 3. 如何檢查記錄是否存在並使用MYSQL插入?
- 4. 如何檢查是否存在記錄,如果不插入
- 5. 檢查是否存儲過程插入記錄
- 6. 檢查保存前是否存在記錄
- 7. 實體框架:在插入新記錄之前檢查記錄的存在
- 8. 在插入記錄之前,類是否必須存在?
- 9. Cakephp檢查是否存在記錄
- 10. rethinkdb檢查是否存在記錄
- 11. 檢查是否存在記錄
- 12. 檢查Dapper是否存在記錄ORM
- 13. 插入存儲過程之前檢查是否存在
- 14. 檢查是否存在記錄,如果是「更新」,如果沒有「插入」
- 15. 回報率 - 檢查是否存在記錄之前建立
- 16. 在通過Linq插入到SQL之前檢查是否存在
- 17. 如何在插入文件之前檢查目錄是否存在
- 18. 在檢查記錄是否已經存在時動態插入表
- 19. 檢查表是否沒有記錄,然後在表中插入3條記錄
- 20. 插入之前檢查unorderd_set中是否存在元素
- 21. 如何檢查記錄是否已經存在,然後更新或插入laravel?
- 22. 如果不使用vb.net插入,如何檢查記錄是否存在?
- 23. 嵌入式SQL,如何檢查是否存在記錄
- 24. 檢查是否插入Thread OnStart中的記錄c#
- 25. 如何檢查插入MySQL表中的新記錄是否
- 26. 檢查我是否已經插入特定記錄
- 27. 更新記錄是否存在;否則在Oracle中插入
- 28. C#如何在將大量數據插入MS Access數據庫之前檢查記錄是否存在?
- 29. 在將記錄插入Access之前檢查重複
- 30. 檢查mysql表中是否存在不存在的記錄
好的,做一個SELECT else子句。我是這個新手,你可以幫我看看代碼嗎?我可以做SELECT而不是其他位。非常感謝你的偉大思想。 – 2009-12-15 20:11:38
我已經添加了代碼Russel。 $ db是Zend_Db_Adapter http://framework.zend.com/manual/en/zend.db.html#zend.db.adapter – 2009-12-15 20:17:20
當檢查存在之前和之前插入具有相同article_number的記錄時會發生什麼插入(又名比賽條件)? – 2009-12-15 21:38:32