在给定相同主键的情况下,如何检查插入值是否不同


How to check insert values are different given same primary key?

如果我有一个包含一组值的insert语句,其中第一个值是一个id,也是数据库的主键,我如何检查这些值中的其他内容是否不完全相同,并更新不同的字段?(第二部分不是答案的必要部分,但它会很好。如果第二部分太复杂,我可以先删除记录,然后插入更新值的整行)

我猜这和SELECT FROM TABLE1 * WHERE id=1有关,然后用INSERT INTO TABLE1 VALUES ('1','A'... etc.)做一个不等式声明,但我不知道该怎么写。

编辑:我想我问错了问题,所以我会再试一次:

我有一个数据库,它的第一个列id是主键,然后是很多其他列,太长了,无法手动键入。我有一个脚本,将获得数据,我不知道这个数据是否重复,例如

id    value
1     dog
2     cat

如果输入的新信息是"1,dog",那么我需要一个信号(比如布尔值)告诉我真,如果新信息是"1,monkey",那么我就需要一个在匹配时告诉我假的信号,然后更新每个字段。问题是,我如何生成布尔值来告诉我具有相同id的新值是否与数据库中的值完全相同?

一个次要的问题是,在那之后我该如何更新行,因为我不想键入每一个字段,我的临时解决方案是删除主id过期的行,然后插入新数据,但如果有一种快速的方法来更新行中的所有列,那就太好了。

MySQL可以作为插入语句的一部分进行"重复密钥更新":

INSERT INTO table (id, ...) VALUES ($id, ...)
ON DUPLICATE KEY UPDATE somefield=VALUES(somefield), ...=VALUES(...)

简单有效。只有在主键重复的情况下,才能指定要更改的字段,并且以前存在的记录中的任何其他字段都保持不变。