mysql - INSERT INTO 如果 id 不存在,如果存在则忽略,如果任何字段不同则插入新的

标签 mysql insert-into

我有一张包含人员和地址的表格。这些地址经常被馈送到数据库,并且它们不会改变,但如果改变,我想保留最后一个地址并添加新的地址,并带有时间戳。

该表中没有主键。 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)

关于mysql - INSERT INTO 如果 id 不存在,如果存在则忽略,如果任何字段不同则插入新的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32627441/

相关文章:

javascript - insert 语句期间的字符串连接问题

MySQL INSERT 与 SELECT UNION 给出语法错误

mysql - 加载到Postgres DB后无法显示中文字符

mysql - 更新查询缓慢(选择快 20 倍或错误的表/查询定义)?

php - 如何在 php 中使用 <select> 元素来导航数据库?

sql-server - SQL Server : Insert a new row for every unique value in column 1

MySQL使用一条Insert语句代替游标循环

mysql - 您可以插入到表中的最大列/值数 - mysql

mysql - mySQL 中的重复记录

php - MYSQL_FIELD_NAME 相当于 SQL SERVER