2015-06-27 34 views
1

我想在插入值时忽略或更新重复项。我知道on duplicate key,但我找不出解决方案。这里是示例表格示例。插入如果在表中找不到重复更新

| ID | roll  | sub | mark | 
| ---- |----------| ------|------| 
| 1 | 100  | 11 | 15 | 
| 2 | 101  | 11 | 16 | 
| 3 | 102  | 11 | 17 | 
| 4 | 100  | 12 | 10 | 
| 5 | 101  | 12 | 11 | 
| 6 | 102  | 12 | 12 | 

这里idprimary key但我想插入检查roll & sub已经存在,update,否则插入新行。我用下面的代码尝试过,但这是插入重复行,但它应该更新下表中的第6行。

CREATE INDEX mycompo_index on student(roll,sub); 

insert into student(roll, mark, sub) 
      values (102, 22, 12) 
on duplicate key update mark = values(mark); 
+0

如果你不想重复,你应该定义辊子的组合作为附加键。 – Mureinik

+0

什么是键可以使列组合,以及如何使它可以请你解释我 – rana7cse

+0

因为这确实似乎是问题,我添加了一个解释它的答案(它比评论更方便) - 看到那里。 – Mureinik

回答

2

如果rollsub组合应该是唯一的,你应该在你的表定义这样的关键:

ALTER TABLE student ADD CONSTRAINT student_uq UNIQUE(roll, sub) 

请注意,如果你这样做,你不必明确创建您正在创建的索引,约束将为您创建。一旦你有了这个地方,你可以使用on duplicate key语法您试图使用:

INSERT INTO student(roll, mark, sub) 
VALUES (102, 22, 12) 
ON DUPLICATE KEY UPDATE mark = VALUES(mark) 
相关问题