试图理解这个MySQL表的含义

时间:2011-05-04 10:41:03

标签: mysql

我有这张桌子:

create table user_roles
(
user_id INT UNSIGNED NOT NULL,
role_id INT UNSIGNED NOT NULL,
UNIQUE (user_id, role_id),
INDEX(id)
);

user_idrole_id是其他表的主键,即userrolesUNIQUE (user_id, role_id),是什么意思?这是否意味着所有user_id / role_id对都必须是唯一的?

什么是INDEX(user_id)

3 个答案:

答案 0 :(得分:4)

UNIQUE确实确保进入字段的所有值都与前一个不同。

INDEX(user_id)将在user_id字段上创建一个索引,以便更好地编制索引,即可以更快地搜索它。

  

如果没有索引,MySQL必须以第一行开头,然后读取整个表以查找相关行。

http://dev.mysql.com/doc/refman/5.0/en/mysql-indexes.html

答案 1 :(得分:1)

是的,UNIQUE(user_id,role_id)表示任何特定行的这两个字段的组合不能多次存在于表中。

INDEX(user_id)在user_id列上应用索引,使得对该列的搜索速度非常快(插入/更新到表时会有一些小的性能开销)

答案 2 :(得分:1)

是的,这意味着user_id / role_id对是唯一的。