我试图插入一些数据没有重复,可能来自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