我在mysql数据库上设置了一个名为“access”的表,其中有三列名为:
rights_id,(PRIMARY KEY)
用户名,
名,
在rights_id列中,用户只能输入3个不同的值(“1”,“2”或“3”)1表示资源,2表示管理员,3表示管理员。我的问题发生时,有多个行具有相同的rights_id(即:多个管理员)。它显示一个错误,告诉我我不能有一个重复的条目为PRIMARY KEY ...我想知道是否有是一种压制这个错误并允许我这样做的方法吗?即时通讯使用vb.net与我在Windows 7操作系统上运行的MYSQL数据库进行交互。谢谢!
答案 0 :(得分:2)
rights_id
是主键。表中只能包含不同的主键值。因此,请考虑使用其他主键或不要以这种方式使用rights_id
列。如果您想使用它们,您应该了解有关关系数据库的更多信息。
在我看来,最好的解决方案是添加另一个列id
,它可能是主键(您也可以设置多列主键,但在我看来这不适合您的数据)。< / p>
答案 1 :(得分:1)
创建PRIMARY KEY
和rights_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_id
和username
的复合主键。