MySql - 仅在某些字段尚未加入时才插入

时间:2011-01-26 15:41:28

标签: mysql

我有一个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(不行,已经确定)

2 个答案:

答案 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。