如果我将数据插入到包含以下字段的表中:
serialNumber活跃国家/地区
如果active为no,我只需要插入重复的serialNumbers。
例如:我想插入一个带有serialNumber 1234的记录。
如果表格中已经存在序列号,请继续添加。如果它已经存在,请检查'有效'有效是肯定的,然后不添加新记录,如果不是,则添加记录。
如何在MYSQL中实现这一目标?
答案 0 :(得分:2)
如果表缺少必要的唯一密钥而您没有权限,或者您不想设置所需的密钥,则可以使用此替代方法:
INSERT INTO `table1`
(`field1`,
`field2`)
SELECT value1,
value2
FROM (SELECT 1) t_1
WHERE NOT EXISTS (SELECT 1
FROM `table1`
WHERE `field1` = value1
AND `field2` = value2);
对于你的问题,它可以写成
INSERT INTO `activity`
(`serialNumbers`,
`active`)
SELECT 1234,
'yes'
FROM (SELECT 1) t_1
WHERE EXISTS (SELECT 1
FROM `activity`
WHERE `serialNumbers` = 1234
AND `active` = 'no');
答案 1 :(得分:1)
您可以在INSERT INTO查询后使用ON DUPLICATE KEY语句更新行(如果已存在)。文档:https://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html
INSERT INTO table (serialNumber , active, country) VALUES (1010, 'no', 'FR')
ON DUPLICATE KEY UPDATE active='yes';
答案 2 :(得分:0)
您可以在MySQL中使用insert ... on duplicate key update
。它类似于其他SQL数据库中使用的MERGE,但MySQL不提供MERGE语句,因此这是次佳的。
INSERT INTO TABLE (serialNumber, active, country)
VALUES (1234, 'active', 'GB') ON DUPLICATE KEY UPDATE country = 'ND';
另外,如果您不想生成错误,请使用INSERT IGNORE
。