【发布时间】:2014-08-11 17:29:13
【问题描述】:
我有一个模拟创建或更新的存储过程。
这是我的算法:
SELECT Id INT rId FROM MY_TABLE WHERE UNIQUE_FIELD = XXX LIMIT 1;
IF (rId is not null) THEN
UPDATE ELSE INSERT
问题是我有重复。我怎样才能防止这些重复?我无法添加 UNIQUE INDEX,因为某些字段可以为 NULL。
谢谢。
编辑:我正在使用 InnoDB。行锁可以帮助我吗?出于性能原因,锁定整个表是不可接受的。
【问题讨论】:
-
主键永远不能为空。
-
你需要使用一个事务或者锁表围绕这两个语句。
-
我的“主键”由 3 列组成。其中之一可能为空。这是正确的。我无法更改表定义...
-
@Barmar:性能很重要。 LOCK TABLE t AS myalias READ 之类的东西;或开始交易; / 犯罪;会这样做吗?
标签: mysql stored-procedures locking