用于创建表索引的列是否隐式UNIQUE?

时间:2016-12-01 12:26:00

标签: mysql sql database

我在MYSQL中使用以下列

创建了一个表
create table Students (
        id varchar(32) not null,
        name varchar(200),
        key1 varchar(450),
        key2 varchar(255),
        key3 varchar(255),
        key4 varchar(255)
)

现在,我已将此表的索引创建为

create index Students_key_inx on Students (key1(255));

现在,我还没有提到key1的唯一性。既然,我认为索引列应该具有唯一值,那么MYSQL会自动强制执行唯一性吗?意思是,我无法在key1中插入Students的重复值吗?

3 个答案:

答案 0 :(得分:2)

创建索引不会强制实现唯一性。创建唯一索引会:

create unique index unq_students_key1 on Students (key1(255));

答案 1 :(得分:1)

尝试这样:

CREATE UNIQUE INDEX student_key1 ON Students (key1);

答案 2 :(得分:0)

定义(简化)

  • 索引:存储在用于构建索引的列中的有序值集合。这有助于rdbms在表中查找特定值,而无需检查表本身中的数据(可以按任何顺序排序,也可以不以任何方式排序,通常需要更多的IO操作)。
  • 唯一:这是一个CONSTRAINT,用于定义规则可以在数据库中存储哪种数据。

因此,这些是不同的概念,您必须明确告诉您是否需要唯一索引。另请注意,NULL值被视为不同的值。