如何插入新行,但如果已存在2个值的组合,则更新该行?

时间:2014-05-29 22:08:10

标签: mysqli

我的表看起来像这样

CREATE TABLE sample 
(
 id int auto_increment primary key, 
 W_ID varchar(20), 
 TC_ID varchar(20),
  foo varchar(20),
  bar varchar(20)
);

我想在此表中插入一个新行,但如果W_ID和TC_ID的组合已经存在,我想用'foo'和'bar'的新值更新行

我知道这里有很多类似的问题,但我无法理解......

sqlfiddle.com

中制作了一个样本

我正在使用5.6.11-MySQL - Apache / 2.2.22(Win32)PHP / 5.3.25

2 个答案:

答案 0 :(得分:1)

如果您在两列上添加唯一约束,则可以使用on duplicate key update语法。 添加一个独特的约束应该是这样的:

alter table table_name add unique index index_name(col1, col2);

您可以找到更多详细信息here

答案 1 :(得分:1)

您可以创建W_ID和TC_ID组合的唯一键,然后按如下方式对其执行upsert:

CREATE TABLE sample 
    (
     id int auto_increment primary key, 
     W_ID varchar(20), 
     TC_ID varchar(20),
      foo varchar(20),
      bar varchar(20)
    );

alter table sample add constraint UNIQUE (W_ID, TC_ID);

INSERT INTO sample 
(W_ID, TC_ID,foo,bar)
VALUES ('1', '2','123','123');
INSERT INTO sample 
(W_ID, TC_ID,foo,bar)
VALUES ('2', '2','123','123');
INSERT INTO sample 
(W_ID, TC_ID,foo,bar)
VALUES ('3', '2','123','123');
INSERT INTO sample 
(W_ID, TC_ID,foo,bar)
VALUES ('1', '4','123','123');
INSERT INTO sample 
(W_ID, TC_ID,foo,bar)
VALUES ('2', '3','123','123');

INSERT INTO sample 
(W_ID, TC_ID,foo,bar)
VALUES ('1', '2','123','123')
ON DUPLICATE KEY UPDATE
`foo` = 'newFoo';

您的搜索结果如下:

ID  W_ID    TC_ID    FOO    BAR
1   1   2            newFoo 123
2   2   2            123    123
3   3   2            123    123
4   1   4            123    123
5   2   3            123    123