2017-07-28 71 views
0

我有一個簡單的MySQL表,有三列:「id」(INT),「property」(VARCHAR)和「value」(VARCHAR)。MySQL更新記錄,如果兩列匹配數據,否則插入行

所有列必須能夠具有相同的記錄(即具有相同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 | 
+----+----------+-------+ 
+0

可能重複的[插入MySQL表或更新如果存在](https://stackoverflow.com/questions/4205181/insert-into-a-mysql-table-or-up日期如果存在) –

回答

0

你的邏輯意味着,在試圖插入一個新的記錄,其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) 
); 
+0

太棒了!如何在創建表格時添加此約束? – Fillipuster

相關問題