如果唯一列上有重复的值,我目前正在使用ON CONFLICT SET进行更新。
INSERT INTO `table`(col1, col2) VALUES ('v1', 'v2')
ON CONFLICT (col1)
DO UPDATE SET
col2 = 'v3'在本例中,col1是一个唯一的字段。但是如果col1不是唯一的,我该怎么做呢?
我试着在没有唯一约束的情况下得到了:
Invalid column reference: 7 ERROR: there is no unique or exclusion constraint matching the ON CONFLICT specification发布于 2020-09-07 15:31:59
最终使用了两个连续的查询。(1)首先尝试更新,如果没有更新行,(2)尝试插入。
在php中:
// Try update
$return = execute("UPDATE table SET ... WHERE ...col1='unique_value'...");
// If update returns no value, insert
if (!$return) {
execute("
INSERT INTO table (...)
SELECT ...values...
WHERE NOT EXISTS (SELECT 1 FROM table WHERE ...col1='unique_value'...)
");
}发布于 2020-09-04 16:08:09
根据定义,您不能在非唯一列上存在冲突。但是,既然你没有重复,那就让它变得唯一。
Alter table "table" add constraint col1_uk unique(col1);https://stackoverflow.com/questions/63734531
复制相似问题