我試圖插入一些數據沒有重複,可能來自2+併發進程。插入數據沒有重複
不幸的是,在這種情況下,由於數據庫設計(刪除的行用deleted=1
標記,這些可以作爲重複項存在),我不能使用唯一約束。
看來一個簡單的事務將不起作用 - 我能想到的最好的是SELECT ... FOR UPDATE
,但這還不夠 - 如果沒有行存在,沒有行將被鎖定,因此它不會阻止插入。另一方面,我想避免鎖定整個桌子來寫作。
有沒有一些很好的方法來解決這個問題?表引擎是InnoDB。 (次要的問題是 - 如何使它在SQLAlchemy的工作,但我可以,如果用普通的工作解決翻譯)
編輯:你可以假設模式:
deleted tinyint(1) default null,
id int(11) not null auto_increment,
address varchar(255) default null,
...
其中地址應該是唯一用於deleted == 0
的條目。
我們可以看到示例模式,索引,數據嗎? – Kermit
@njk更新,我認爲應該足夠了 – viraptor
你看過'INSERT ... ON DUPLICATE KEY UPDATE'語法嗎? http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html – Kermit