在mysql数据库中设置主键的问题...帮忙?

时间:2011-09-11 18:26:34

标签: mysql database vb.net primary-key

我在mysql数据库上设置了一个名为“access”的表,其中有三列名为:

  

rights_id,(PRIMARY KEY)

     

用户名,

     

名,

在rights_id列中,用户只能输入3个不同的值(“1”,“2”或“3”)1表示资源,2表示管理员,3表示管理员。我的问题发生时,有多个行具有相同的rights_id(即:多个管理员)。它显示一个错误,告诉我我不能有一个重复的条目为PRIMARY KEY ...我想知道是否有是一种压制这个错误并允许我这样做的方法吗?即时通讯使用vb.net与我在Windows 7操作系统上运行的MYSQL数据库进行交互。谢谢!

4 个答案:

答案 0 :(得分:2)

rights_id是主键。表中只能包含不同的主键值。因此,请考虑使用其他主键或不要以这种方式使用rights_id列。如果您想使用它们,您应该了解有关关系数据库的更多信息。

在我看来,最好的解决方案是添加另一个列id,它可能是主键(您也可以设置多列主键,但在我看来这不适合您的数据)。< / p>

答案 1 :(得分:1)

创建PRIMARY KEYrights_id的复合username(如果用户名是唯一的)。

答案 2 :(得分:1)

我不确定该表中的“名称”含义。如果我可以安全地忽略它。 。

如果每个用户名只能有一个“rights_id”,那么主键应该是用户名。如果每个用户名可以有多个“rights_id” - 如果用户Catcall可以同时拥有rights_id 1和2 - 那么您的主键应该是列对(rights_id,username)。

由于MySQL不强制执行CHECK约束,因此您应该有一个包含三行的权限ID号的单独表。

create table rights_ids (
  rights_id integer primary key
);
insert into rights_ids values (1);
insert into rights_ids values (2);
insert into rights_ids values (3);

然后,您可以设置一个外键约束,以防止除这三个之外的任何数字出现在名为“access”的表中。像

这样的东西
alter table access
add constraint foreign key (rights_id) references rights_ids (rights_id);

答案 3 :(得分:0)

不,你无法抑制那个错误。问题是rights_id不是您的主要关键。

主键必须能够唯一标识表中的行。如果您可以有超过1个rights_id条目,则无法履行主键的角色。

阅读this wiki article有关唯一键的信息(主键是特定类型的唯一键)。

正如Shef指出的那样,如果该组合实际上唯一地标识了表中的单个行,您可能希望使用rights_idusername的复合主键。