我有这张桌子:
create table user_roles
(
user_id INT UNSIGNED NOT NULL,
role_id INT UNSIGNED NOT NULL,
UNIQUE (user_id, role_id),
INDEX(id)
);
user_id
和role_id
是其他表的主键,即user
和roles
。 UNIQUE (user_id, role_id),
是什么意思?这是否意味着所有user_id
/ role_id
对都必须是唯一的?
什么是INDEX(user_id)
?
答案 0 :(得分:4)
UNIQUE
确实确保进入字段的所有值都与前一个不同。
INDEX(user_id)
将在user_id字段上创建一个索引,以便更好地编制索引,即可以更快地搜索它。
如果没有索引,MySQL必须以第一行开头,然后读取整个表以查找相关行。
答案 1 :(得分:1)
是的,UNIQUE(user_id,role_id)表示任何特定行的这两个字段的组合不能多次存在于表中。
INDEX(user_id)在user_id列上应用索引,使得对该列的搜索速度非常快(插入/更新到表时会有一些小的性能开销)
答案 2 :(得分:1)
是的,这意味着user_id / role_id对是唯一的。