如果表中不存在列值,则在表中插入行

9fkzdhlc  于 2021-06-21  发布在  Mysql
关注(0)|答案(3)|浏览(357)

我有以下疑问:

INSERT INTO LICENSE_TABLE
(code, license_type, distributor)
values ("uniquecode", "standard", "walmart")

我只想在没有已经存在的行的情况下插入该行 code="uniquecode" 我该怎么做?
我找到了一些解决办法 INSERT IGNORE ,关于 DUAL ,还有一些,但我不明白哪一个适用于我的情况。
如果有关系的话,我正在使用 pymysql .

jdzmm42g

jdzmm42g1#

只是使用 INSERT IGNORE 喜欢

INSERT IGNORE INTO LICENSE_TABLE
(code, license_type, distributor)
values ("uniquecode", "standard", "walmart")

但是你需要在页面上有一个唯一的索引 code 列。检查你是否已经有一个 show indexes from LICENSE_TABLE; 或者 show create table LICENSE_TABLE; 如果没有,可以这样创建:

create unique index uidx_license_table_code on LICENSE_TABLE(code);
j9per5c4

j9per5c42#

你应该先创建一个 UNIQUE INDEX 在“代码”列上。然后,您可以使用以下方法安全地插入数据而不发出警告:

INSERT INTO LICENSE_TABLE(code, license_type, distributor)
SELECT 'uniquecode', 'standard', 'walmart'
FROM (SELECT 1) AS x
WHERE NOT EXISTS (
    SELECT 1
    FROM LICENSE_TABLE
    WHERE code = 'uniquecode'
)
zbsbpyhn

zbsbpyhn3#

最好的方法是 on duplicate key update :
首先,您需要一个唯一的索引,以便数据库保持数据的完整性。
第二:

INSERT INTO LICENSE_TABLE (code, license_type, distributor)
    VALUES ('uniquecode', 'standard', 'walmart')
    ON DUPLICATE KEY UPDATE code = VALUES(code);

这比一个 WHERE 子查询 EXISTS 因为它是线程安全的。这意味着不同线程中的多个更新永远不会导致问题。
这比 INSERT IGNORE 因为 INSERT IGNORE 将忽略其他错误。 ON DUPLICATE KEY UPDATE 做你想做的事。

相关问题