我得到了3列(主要)id,类型,名称的表。我在这个表中插入数据,我需要防止多个行具有相同的类型和名称。如何检查并插入一个查询?
我在尝试
IF ((select id from models where type = 1 and name = 'test') is null)
THEN insert into models(type, name) values(1, 'test');
END IF;
但它不起作用,我不知道为什么(0体验mysql中的条件) - 它给我语法错误
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IF ((select id from models where type = 1 and name = 'test') is null)
THEN inse' at line 1
答案 0 :(得分:2)
添加唯一键(类型,名称),并使用IGNORE子句执行INSERT,它将帮助您避免出现。
答案 1 :(得分:1)
如果通常需要这样做(不仅适用于此插入内容),则应在UNIQUE
组合上添加(type, name)
约束:
ALTER TABLE models
ADD UNIQUE KEY type_name_U (type, name) ;
然后您可以简单地添加行,如果表中存在组合,则插入将失败:
INSERT INTO models(type, name)
VALUES (1, 'test') ;
仅限一次性支票,请尝试以下方式:
INSERT INTO models(type, name)
SELECT 1, 'test'
FROM dual
WHERE NOT EXISTS
( SELECT *
FROM models
WHERE type = 1
AND name = 'test'
)
答案 2 :(得分:1)
试试这个
INSERT INTO models
SELECT
s.*
FROM (
SELECT
1 AS type,
'test' AS name
) AS s
LEFT OUTER JOIN models x
ON x.type = s.type
AND x.name = s.name
WHERE x.type IS NULL