MySQL插入相同的行

时间:2016-05-03 19:30:06

标签: mysql sql sql-insert unique-index

有一个像这样的SQL表 enter image description here

这样的索引 enter image description here

INSERT INTO users_words(iduser,idword,status_of_word) VALUES(4,6,2);
INSERT INTO users_words(iduser,idword,status_of_word) VALUES(4,6,1);
INSERT INTO users_words(iduser,idword,status_of_word) VALUES(4,6,0);
INSERT INTO users_words(iduser,idword,status_of_word) VALUES(5,6,0);
INSERT INTO users_words(iduser,idword,status_of_word) VALUES(8,7,1);
INSERT INTO users_words(iduser,idword,status_of_word) VALUES(8,9,2);
  

我想将一个唯一的索引与iduser,idword一起使用。   如何避免将具有相同值的查询插入索引列?   例如:Bloking行插入如13和14(idusers_words)行

SELECT * FROM users_words;

> idusers_words  |  iduser | idword | status_of_word |
         12             4       6            2
         13             4       6            1
         14             4       6            0
         15             5       6            0
         16             8       7            1
         17             8       9            2

编辑:

  

我试过这段代码。但是出现了错误“#1062 - 关键'my_unique'重复输入'1-1'”

ALTER TABLE users_words
ADD CONSTRAINT my_unique UNIQUE(iduser,idword);

2 个答案:

答案 0 :(得分:2)

您的唯一索引应仅针对您的要求的 iduser idword 列。

您在idusers_words,iduser and idword.上有索引这意味着所有三列的组合应该是唯一的。

由于idusers_words是自动增量,因此即使idusers和idword是重复的,也会始终满足此条件,并且会插入记录。

答案 1 :(得分:1)

您可以对一组字段设置约束,如下所示:

CREATE TABLE Persons
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CONSTRAINT uc_PersonID UNIQUE (P_Id,LastName)
)

来源:http://www.w3schools.com/sql/sql_unique.asp