我有一个简单的 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 |
+----+----------+-------+
最佳答案
您的逻辑意味着,尝试插入其 id
和 property
已出现在表中的新记录应该会导致该记录的值被更新。 MySQL 提供了一种方法来做到这一点。首先在 id
和 property
列上添加唯一约束:
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/