<分区>
我有三列:a、b、c。
如果行中不存在 a、b、c,我想插入一个新行。
使用 Python 来做到这一点。
INSERT INTO mytable(column_a, column_b, column_c)
VALUES(value_a, value_b, value_c)
WHERE value_a, value_b, value_c are all unique in existing rows.
<分区>
我有三列:a、b、c。
如果行中不存在 a、b、c,我想插入一个新行。
使用 Python 来做到这一点。
INSERT INTO mytable(column_a, column_b, column_c)
VALUES(value_a, value_b, value_c)
WHERE value_a, value_b, value_c are all unique in existing rows.
最佳答案
如果您愿意实现一种通用机制来避免在列 column_a/b/c 上出现重复,您可以简单地在两列上添加一个复合唯一约束,例如
ALTER TABLE mytable
ADD CONSTRAINT constr_ID UNIQUE (column_a, column_b, column_c);
如果表上发生任何会产生重复项的操作,MySQL 将引发约束违反错误。您可以使用 ON DUPLICATE KEY UPDATE
选项忽略该错误:
INSERT INTO mytable(column_a, column_b, column_c)
VALUES(value_a, value_b, value_c)
ON DUPLICATE KEY UPDATE column_a = column_a;
在这个 demo on DB Fiddle ,我们插入了 3 条记录,其中有 2 条重复记录,最终我们在表中得到了 2 条记录,正如预期的那样。
另一方面,如果您想将重复检查限制为仅一个查询,和/或如果您想避免在重复键上浪费自动增量序列,那么您可以求助于 INSERT ... SELECT
语句,带有执行重复检查的 WHERE NOT EXISTS
条件:
INSERT INTO mytable(column_a, column_b, column_c)
SELECT src.*
FROM (SELECT value_a column_a, value_b column_b, value_c column_c) src
WHERE NOT EXISTS (
SELECT 1
FROM mytable
WHERE
column_a = src.column_a
AND column_b = src.column_b
AND column_c = src.column_c
);
如果您尝试插入重复项,查询将不执行任何操作(并且不会生成错误或警告)。
关于python - 如果一行中不存在所有值,则插入记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54659478/
相关文章:
mysql - docker-compose nodejs 在运行 docker composer 时出错。 MySQL ER_NOT_SUPPORTED_AUTH_MODE
php - 通过 php 将 jQuery 对象(exif 坐标)发送到我在 MySql 中的表
mysql - SQL 查询破坏了我们的游戏! (后端服务器已满)
python - SQLAlchemy 可以在不查询数据库的情况下填充外键关系吗?
python - "/lib64"与 "/lib/../lib64/"不同吗?
sql - 查询SQL数据库,如何获取用户位置附近的最近点?