如果两列匹配数据,MySQL更新记录,否则插入行

标签 mysql sql database

我有一个简单的 MySQL 表,包含三列:“id”(INT)、“property”(VARCHAR) 和“value”(VARCHAR)。

所有列必须能够具有相同的记录(即具有相同 ID 的多个记录)。

想法是保存与不同 ID 匹配的不同属性。

我的问题是,如果我的数据与 ID 和属性都匹配,我将如何更新记录,否则添加新记录?

我最初考虑使用ON DUPLICATE KEY,但这行不通,因为我的列都不是唯一的。

以下是所需行为的示例:

1:我从这张表开始:

+----+----------+-------+
| id | property | value |
+----+----------+-------+
| 45 | money    |   500 |
+----+----------+-------+

2:然后我插入:id = 45,property = sex,value =male,我得到:

+----+----------+-------+
| id | property | value |
+----+----------+-------+
| 45 | money    | 500   |
| 45 | sex      | male  |
+----+----------+-------+

3:然后我插入:id = 45,property = Money,value = 600,然后我得到:

+----+----------+-------+
| id | property | value |
+----+----------+-------+
| 45 | money    | 600   |
| 45 | sex      | male  |
+----+----------+-------+

4:最后,我可以这样做:id = 46,property = Money,value = 600,然后得到:

+----+----------+-------+
| id | property | value |
+----+----------+-------+
| 45 | money    | 600   |
| 45 | sex      | male  |
| 46 | money    | 600   |
+----+----------+-------+

最佳答案

您的逻辑意味着,尝试插入其 idproperty 已出现在表中的新记录应该会导致该记录的值被更新。 MySQL 提供了一种方法来做到这一点。首先在 idproperty 列上添加唯一约束:

ALTER TABLE yourTable ADD UNIQUE idx (id, property);

然后使用以下代码执行插入:

INSERT INTO yourTable (id, property, value)
VALUES (45, 'money', 600)
    ON DUPLICATE KEY UPDATE value = 600;

如果您想从头开始创建具有唯一约束的表,您可以尝试以下操作:

CREATE TABLE yourTable (
    id int NOT NULL,
    property varchar(255) NOT NULL,
    value int,
    CONSTRAINT uc_idp UNIQUE (id, property)
);

关于如果两列匹配数据,MySQL更新记录,否则插入行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45369376/

相关文章:

php - 将值从一个表插入到另一个表

php - MySQL 以 "Fatal Error"停止并需要重新启动

mysql - NOT NULL 单元格的 SQL 语法

mysql - 按款式而不是颜色计数

sql - 使用proc sql创建表时如何调用选择日期范围的提示?

java - 如何在 firebase firestore android 中检索文档以匹配我的特定登录凭据

php - MySQL结果多个数组

Mysql 主从复制

android - 在房间数据库中保存数据的存储限制是多少?

具有时间范围的 Mongodb 交集