我有一个MySql表,包含field1(id),field2(name)和field3(surname)。
我想仅在对象field2和field3尚未插入时才插入值。我该怎么办?
INSERT IGNORE不起作用,因为field1是int autoincrement,每个INSERT都不同。
P.S。我想摆脱REPLACE INTO,因为如果数据已经存在它就没有意义“重写”
干杯
修改
表结构 id = INT primary name = VARCHAR surname = VARCHAR
name和surname不能是每个UNIQUE(我可以有2个名称或姓氏具有相同的值)。我想要的是对名称和姓氏没有相同的值。
es:
0 Marco Cordi(好)
1 Marco Daghine(好)
2 Fabio Cordi(OK)
3 Marco Cordi(不行,已经确定)
答案 0 :(得分:1)
update myTable
set name = coalesce(name, 'newname'),
surname = coalesce(surname, 'newsurname')
where id = myID;
(更新)
insert into myTable(name, surname)
values ('newname', 'newsurname')
where NOT EXISTS (select id from myTable where name = newname and surname = surname) ;
答案 1 :(得分:1)
如果有人为您回答此问题,您需要发布实际的表格结构(包括现有的任何主要/唯一密钥)。
如果您的表没有主键/唯一键,那么执行此操作的唯一方法是运行SELECT并查看是否返回任何行,如果没有找到行,则执行INSERT。
如果希望表中的行在field2和field3上是唯一的,那么您应该在这些列上创建唯一索引(可以使用ALTER TABLE查询完成)。
编辑:您需要一个唯一索引,而不是单独在每个字段上,而是在它们两个上。您想要运行此查询:
ALTER TABLE `yourtable`
ADD UNIQUE INDEX `unique_name` (`field2`, `field3`);
完成后,您可以使用INSERT IGNORE。