我有一个表格,我想插入新的行,如
ID | MAGICID | PERSONREF | DATA
1 | 1 | 0000010 | any trash data
2 | 1 | 0000011 | any trash data
3 | 1 | 0000012 | any trash data
4 | 1 | 0000013 | any trash data
5 | 2 | 0000010 | any trash data
6 | 2 | 0000011 | any trash data
7 | 2 | 0000012 | any trash data
8 | 2 | 0000013 | any trash data
9 | 3 | 0000010 | any trash data
10 | 3 | 0000011 | any trash data
11 | 3 | 0000012 | any trash data
12 | 3 | 0000013 | any trash data
表ID
中有INT(10)
的PK,MAGICID
是FOREIGN KEY
到INT(10)
的另一个表,PERSONREF
是正常的VARCHAR(8)
对我来说,重复的行是 MAGICID
和PERSONREF
相同
ID | MAGICID | PERSONREF | DATA ---Table without duplicates, is OK
1 | 1 | 0000010 | any trash data
2 | 1 | 0000011 | any trash data
_
ID | MAGICID | PERSONREF | DATA ---Table with duplicates, is bad
1 | 1 | 0000010 | any trash data
2 | 1 | 0000010 | any trash data
插入应该像这样工作
-- table before insert
ID | MAGICID | PERSONREF | DATA
1 | 1 | 0000010 | any trash data
2 | 1 | 0000011 | any trash data
3 | 1 | 0000012 | any trash data
4 | 2 | 0000015 | any trash data
插入
INSERT .... (1 , '0000010' ,'trash')
INSERT .... (1 , '0000011' ,'trash')
INSERT .... (1 , '0000012' ,'trash')
INSERT .... (1 , '0000015' ,'trash')
INSERT .... (1 , '0000016' ,'trash') -- in each procces MAGIC is the same for all inserts
看完......
ID | MAGICID | PERSONREF | DATA
1 | 1 | 0000010 | any trash data
2 | 1 | 0000011 | any trash data
3 | 1 | 0000012 | any trash data
4 | 2 | 0000015 | any trash data
41 | 1 | 0000015 | trash --beacuse is new for this MAGICID ,ID is simulated :)
42 | 1 | 0000016 | trash --beacuse is new for this MAGICID, ID is simulated :)
你可以帮帮我吗?
答案 0 :(得分:1)
在复合(MAGICID, PERSONREF)
:
UNIQUE
约束
ALTER TABLE myTable ADD UNIQUE (MAGICID, PERSONREF);
使用INSERT ... ON DUPLICATE KEY UPDATE
:
INSERT INTO myTable
(MAGICID, PERSONREF, DATA)
VALUES
(1, '0000010', 'trash'),
(1, '0000011', 'trash'),
(1, '0000012', 'trash'),
(1, '0000015', 'trash'),
(1, '0000016', 'trash')
ON DUPLICATE KEY UPDATE
DATA = DATA
;
在sqlfiddle上查看。
答案 1 :(得分:1)
对于这个例子,你给了INSERT .... (1 , '0000010' ,'trash')
,你必须做这样的事情:
INSERT INTO your_table (MAGICID , PERSONREF, DATA)
SELECT 1, '0000010', 'trash' FROM DUAL
WHERE NOT EXISTS(SELECT ID
FROM you_table
WHERE MAGICID = 1 AND PERSONREF = '0000010')
如果MAGICID和PERSONREF的组合是唯一的,这将基本上插入1,'0000010','垃圾'