MariaDB如何实现指定行不存在时执行INSERT且避免1064语法错误
解决方案1(推荐):使用INSERT ... SELECT + WHERE NOT EXISTS语法
直接执行以下单条SQL即可,不需要依赖存储过程/函数,逻辑完全匹配你的需求:
INSERT INTO FirstTable (label, secondTable_id) SELECT 'Str Test', id FROM SecondTable WHERE label = 'Str Match' AND NOT EXISTS ( SELECT 1 FROM FirstTable WHERE label = 'Str Test' );
这个写法的额外优势是可以自动处理SecondTable无匹配行的场景:如果SecondTable中不存在label = 'Str Match'的记录,SELECT查询不会返回结果,插入操作会自动跳过不会报错。
解决方案2:使用INSERT IGNORE
因为你的FirstTable的label字段设置了UNIQUE唯一约束,也可以用更简洁的写法:
INSERT IGNORE INTO FirstTable (label, secondTable_id) VALUES ('Str Test', (SELECT id FROM SecondTable WHERE label = 'Str Match'));
注意:INSERT IGNORE会忽略所有插入过程中的报错(包括唯一键冲突、字段类型不匹配、值长度超限等),如果需要排查除了重复值之外的其他异常问题,优先选第一种方案。
内容的提问来源于stack exchange,提问作者4uruanna
相关产品推荐
相关产品推荐

