表中联合主键的问题

nightgoblin 2012-08-24 10:23:55
MSSQL 2008中,一张表已有一个主键pk_a,现在想将另外一列b,也设置为主键形成双主键,并且主键pk_a被其他表引用了外键,
请问这个时候怎么设置联合主键??
请看源码:

CREATE TABLE test1
(a VARCHAR(20) NOT NULL ,
b VARCHAR(20) NULL,
c VARCHAR(20) NULL,
CONSTRAINT pk_a PRIMARY KEY (a)
);

CREATE TABLE test2
( a VARCHAR(20) NOT NULL ,
t1 INT NULL ,
t2 VARCHAR(20),
CONSTRAINT fk_a FOREIGN KEY (a) REFERENCES test1(a)
);
...全文
198 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
筱筱澄 2012-08-24
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]

引用 7 楼 的回复:

引用 6 楼 的回复:

引用 2 楼 的回复:

为什么要设置成主键?建立个联合的唯一约束就可以了吧。
而且你的a已经是主键了,联合主键已经没有意义了,a不同,a,b必然不同,这个联合主键完全起不到限制b的作用。如果只是想增加一个唯一的约束,不如直接在b上创建一个unique约束或者直接创建key(不是primary,就是key)。

因为我要……
[/Quote]
只能不要外键了。
ORAClE SE 2012-08-24
  • 打赏
  • 举报
回复
删除主键,再重新创建复合主键。。。
nightgoblin 2012-08-24
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]

引用 6 楼 的回复:

引用 2 楼 的回复:

为什么要设置成主键?建立个联合的唯一约束就可以了吧。
而且你的a已经是主键了,联合主键已经没有意义了,a不同,a,b必然不同,这个联合主键完全起不到限制b的作用。如果只是想增加一个唯一的约束,不如直接在b上创建一个unique约束或者直接创建key(不是primary,就是key)。

因为我要从其他表导入数据到这个表中,但另……
[/Quote]
这个真麻烦啊。。
孤独加百列 2012-08-24
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]

引用 2 楼 的回复:

为什么要设置成主键?建立个联合的唯一约束就可以了吧。
而且你的a已经是主键了,联合主键已经没有意义了,a不同,a,b必然不同,这个联合主键完全起不到限制b的作用。如果只是想增加一个唯一的约束,不如直接在b上创建一个unique约束或者直接创建key(不是primary,就是key)。

因为我要从其他表导入数据到这个表中,但另外在表test3中a,b两列设置……
[/Quote]
那你这样导入之后,test1里面a不是也重复了吗?那你这样只能把a的primary key删除,然后建立一个联合主键,而以前的a外键也不能要了,因为a多值做不了外键。
nightgoblin 2012-08-24
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

为什么要设置成主键?建立个联合的唯一约束就可以了吧。
而且你的a已经是主键了,联合主键已经没有意义了,a不同,a,b必然不同,这个联合主键完全起不到限制b的作用。如果只是想增加一个唯一的约束,不如直接在b上创建一个unique约束或者直接创建key(不是primary,就是key)。
[/Quote]
因为我要从其他表导入数据到这个表中,但另外在表test3中a,b两列设置是双主键,因为a列中有相同的值存在,将数据从test3导入到test1中时,就会报错。所以想将test1的a,b两列设置成双主键。你看我要实现这个导入,有其他办法吗?
筱筱澄 2012-08-24
  • 打赏
  • 举报
回复
你是要把主键a 改成联合主键 ab?
然后 领一个表值外键a
nightgoblin 2012-08-24
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

SQL code

alter table #t
add constraint 约束名 primary key (字段1,字段2)
[/Quote]
你这样不行。。
gw6328 2012-08-24
  • 打赏
  • 举报
回复
你说的是候选键吧。一个表只能一个主键。
你在b列加一个唯一约束就可以了。
孤独加百列 2012-08-24
  • 打赏
  • 举报
回复
为什么要设置成主键?建立个联合的唯一约束就可以了吧。
而且你的a已经是主键了,联合主键已经没有意义了,a不同,a,b必然不同,这个联合主键完全起不到限制b的作用。如果只是想增加一个唯一的约束,不如直接在b上创建一个unique约束或者直接创建key(不是primary,就是key)。
Aaron_Chan 2012-08-24
  • 打赏
  • 举报
回复

alter table #t
add constraint 约束名 primary key (字段1,字段2)

nightgoblin 2012-08-24
  • 打赏
  • 举报
回复
感谢各位的回答,我只能把要导入的表里面重新设计下了。。

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧