Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如果id不存在,则插入到中;如果id存在,则忽略;如果任何字段不同,则插入新字段_Mysql_Insert Into - Fatal编程技术网

Mysql 如果id不存在,则插入到中;如果id存在,则忽略;如果任何字段不同,则插入新字段

Mysql 如果id不存在,则插入到中;如果id存在,则忽略;如果任何字段不同,则插入新字段,mysql,insert-into,Mysql,Insert Into,我有一张有人和地址的桌子。这些地址经常被输入数据库,它们不会改变,但是如果改变了,我想保留最后一个地址,并添加一个新地址,加上时间戳 此表中没有主键。person_id是Persons表中的键 如果person_id不存在,请将数据添加到表中 如果person_id存在且详细信息相同,则忽略 如果person_id存在且任何详细信息不同,请添加数据 我在其中尝试了很多东西: INSERT INTO addresses (person_id,street,zip,timestamp) SELE

我有一张有人和地址的桌子。这些地址经常被输入数据库,它们不会改变,但是如果改变了,我想保留最后一个地址,并添加一个新地址,加上时间戳

此表中没有主键。person_id是Persons表中的键

  • 如果person_id不存在,请将数据添加到表中
  • 如果person_id存在且详细信息相同,则忽略
  • 如果person_id存在且任何详细信息不同,请添加数据
我在其中尝试了很多东西:

INSERT INTO addresses (person_id,street,zip,timestamp) SELECT ("1","122
Farm", "4422",CURRENT_TIMESTAMP) FROM addresses WHERE NOT EXISTS 
(SELECT person_id,street,zip FROM addresses WHERE person_id = "1" AND 
street = "122 Farm" AND zip = "4422")

谢谢大家!

我刚刚找到的解决方案是: 1-创建相关字段的唯一索引:

ALTER TABLE addresses ADD UNIQUE INDEX a_uindex (person_id,street,zip)
然后使用:

INSERT IGNORE INTO addresses VALUES ("1","122 Farm","4422", CURRENT_TIMESTAMP)

Threre是mysql中的“替换为”语法。这不是很有用吗?如果详细信息相同,您是否有强烈的理由不想更新?除了我认为避免更新详细信息比每次更新都快之外,没有其他主要原因。我想我可以使用replace-into,只需创建一个包含除timestamp之外的所有字段的唯一索引。我试试看。。非常感谢。