Mysql 如果id不存在,则插入到中;如果id存在,则忽略;如果任何字段不同,则插入新字段
我有一张有人和地址的桌子。这些地址经常被输入数据库,它们不会改变,但是如果改变了,我想保留最后一个地址,并添加一个新地址,加上时间戳 此表中没有主键。person_id是Persons表中的键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不存在,请将数据添加到表中
- 如果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之外的所有字段的唯一索引。我试试看。。非常感谢。