MySql-仅当某些字段尚未插入时插入

MySql-仅当某些字段尚未插入时插入,mysql,Mysql,我有一个MySql表,有field1id、field2name和field3surname 我只想在字段2和字段3对尚未插入时插入值。我怎么做 INSERT IGNORE不起作用,因为field1是int autoincrement,并且每个INSERT都不同 另外,我想把REPLACE改成,因为如果数据已经存在,重写它是没有意义的 干杯 编辑 表结构 id=INT主 name=VARCHAR 姓=瓦查尔 姓名和姓氏不能都是唯一的。我可以有两个相同值的姓名或姓氏。我想要的是,这对名字和姓氏没有相

我有一个MySql表,有field1id、field2name和field3surname

我只想在字段2和字段3对尚未插入时插入值。我怎么做

INSERT IGNORE不起作用,因为field1是int autoincrement,并且每个INSERT都不同

另外,我想把REPLACE改成,因为如果数据已经存在,重写它是没有意义的

干杯

编辑

表结构 id=INT主 name=VARCHAR 姓=瓦查尔

姓名和姓氏不能都是唯一的。我可以有两个相同值的姓名或姓氏。我想要的是,这对名字和姓氏没有相同的值

es:

0马可·科迪OK

1马可·达吉恩,好的

2法比奥·科迪OK

3马可·科迪不正常,已经确定

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) ; 

要有人帮您回答这个问题,您需要发布实际的表结构,包括存在的任何主键/唯一键

如果您的表没有主键/唯一键,那么执行此操作的唯一方法是运行SELECT并查看是否返回了任何行,如果没有找到任何行,则执行INSERT

如果希望表中的行在字段2和字段3上是唯一的,那么应该在这些列上创建一个唯一的索引,这可以通过查询完成

编辑:您需要一个唯一的索引,不是单独在每个字段上,而是在两个字段上。您要运行此查询:

ALTER TABLE `yourtable`
ADD UNIQUE INDEX `unique_name` (`field2`, `field3`);

完成后,可以使用INSERT IGNORE。

我假设您的意思是,如果字段中还没有条目,则进行更新。???我没有ID…如果名称和姓氏值已经插入,我只需要在表中搜索。否则,我把它们放在DB上。如果你是说真的。。。仅当“两个”字段均为空时才更新:更新myTable集合名称=“newname”,姓氏=“newsurname”,其中id=myID,name为null,姓氏为null;哦我懂了。。。然后将其插入myTablename,姓氏值为'newname','newurnName',其中id不在从myTable中选择id,其中名称>和姓氏>;嗯,好的,所以在这种情况下最好使用替换成:添加一些进一步的信息!选中outEdited-覆盖两列的单个唯一索引将完全满足您的需要!嗯,好的,拍得不错!但是使用这个方法,我有一个关于VARCHAR元素的键。在一个键上只有INT并使用replace-into不是更好吗?在计算时间方面,我的意思是:更好-不,它不应该有任何负面影响。这正是唯一索引的目的。完成同样事情的任何其他方法都会更糟糕。嗯……但是约翰·K.的解决方案比放唯一的钥匙更有效,不是吗?