如果没有索引,我如何使用列作为唯一列?

时间:2016-07-05 20:09:24

标签: mysql sql sql-update

我正在尝试更新列,但我需要检查表中是否存在新值不应该。基于某些原因,我无法在该列上创建唯一索引。那么如何通过查询处理呢?

UPDATE mytable SET col = :val WHERE id = :id; 

那么在更新之前如何检查:val列中是否存在col

2 个答案:

答案 0 :(得分:1)

你不能像在其他SQL语言中那样做一个简单的NOT EXISTS子选择。但是,您可以对虚拟表进行交叉连接,以检查是否存在val,并防止在虚拟表具有结果时发生更新。

UPDATE mytable AS tb1
CROSS JOIN (SELECT 1 `valExsits` FROM mytable WHERE col = :val LIMIT 1) AS tbTest
SET tb1.col = :val
WHERE tb1.id = :id AND tbTest.valExsits IS NULL

答案 1 :(得分:1)

您可以使用不

  UPDATE mytable SET col = :val WHERE id = :id
  and  not(1 = ( select ifnull(max(1),0) from mytable where col = :val))  ;