SQL不允许表中出现重复记录。

4

如何避免添加重复内容?我想让它检查除了ID之外的所有列。

我不希望重复的内容被添加。

ID    col1    col2   col3

1    first   middle  last   


ID    col1     col2   col3

2    first   middle  last  

我希望这是有效的。

ID    col1    col2   col3

1    first   middle  last   


ID    col1     col2   col3

2    first    last   middle   

2
你试过什么吗?比如创建唯一的复合主键。 - Alma Do
你应该不显示重复记录,或者说你不想重复显示重复记录? - Sulthan Allaudeen
你的行不是重复的...你有两个不同的ID...现在如果你想逐列检查... - Hackerman
我不想按ID进行检查,我想要的是另一条记录不包含相同的先前记录。 - J0ker
3个回答

14

您需要在所有三个列上使用组合唯一索引。请参考此示例表定义:

CREATE TABLE example (
    ID INT PRIMARY KEY AUTO_INCREMENT,
    col1 VARCHAR(32) NOT NULL,
    col2 VARCHAR(32) NOT NULL,
    col3 VARCHAR(32) NOT NULL,
    UNIQUE(col1, col2, col3)
);

-- expected to be valid
INSERT INTO example (ID, col1, col2, col3) VALUES
    (NULL, 'first', 'middle', 'last'),
    (NULL, 'first', 'last', 'middle');

-- expected to be invalid
INSERT INTO example (ID, col1, col2, col3) VALUES
    (NULL, 'first', 'middle', 'last'),
    (NULL, 'first', 'middle', 'last');

演示 @ SQL Fiddle


1
  1. 在其他所有列上添加唯一键是一种可能的解决方案。
  2. 另一种解决方案取决于软件:

该列可能包含重复值。但我不希望这些列按照“first”、“middle”、“last”的顺序包含重复值。因此,“first”、“last”、“middle”是有效的,因为在那个顺序中还没有记录。 - J0ker
@J0ker - 我相信我的解决方案正好解决了那个问题。 - blue
出现错误 #1062 - 键 'url_id_4' 中有重复条目 '1'。我可以百分之百确定没有任何行是按照相同的顺序排列的。 - J0ker
@J0ker - 看起来你已经有了重复项。如果你确定要删除它们,可以在添加唯一键时查看ALTER IGNORE子句。这将删除所有重复项,因此你可能需要先备份表格。 - blue
你的意思是在一行数据中重复吗?比如说col1不能有两个相同的值? - J0ker

0

尝试使用:

INSERT IGNORE INTO tablename
Set col1="",col2="",col3=""

或者使用

REPLACE INTO tablename
    Set col1="",col2="",col3=""

或者你可以使用INSERT ... ON DUPLICATE KEY UPDATE语法

告诉我它是如何工作的!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接