sql中表级外键约束一个列怎么关联三个其他个列

发布于2021-12-19 17:27:30
2个回答
admin
网友回答2021-12-19

可以引用以下代码:

create table a(aid int CONSTRAINT pk_a_aid PRIMARY KEY , val char(10) )
create table b(bid int CONSTRAINT pk_b_bid PRIMARY KEY , val char(10) )
create table c(cid varchar(10) , abid int not null)

alter table c
add constraint fk_aid foreign key (abid) references a(aid)
go
alter table c
add constraint fk_bid foreign key (abid) references b(bid)
go

insert into a values(1,'aa')
insert into b values(2,'bb')

insert into c (cid,abid)values(234,1)
--INSERT 语句与 FOREIGN KEY 约束"fk_bid"冲突。表"dbo.b", column 'bid'。

insert into c (cid,abid)values(235,2)
--INSERT 语句与 FOREIGN KEY 约束"fk_aid"冲突。表"dbo.a", column 'aid'。


insert into a values(2,'aacc')
insert into b values(1,'bbdd')

insert into c (cid,abid)values(236,1)
insert into c (cid,abid)values(237,2)
--a表的aid列跟b表的bid列同时含有1和2,则在c插入执行成功

drop table c , a , b

admin
网友回答2021-12-19

楼主你好!

列级约束与表级约束的区别:

(1)列级约束:只能应用于一列上。

表级约束:可以应用于一列上,也可以应用在一个表中的多个列上。

(即:如果你创建的约束涉及到该表的多个属性列,则必须创建的是表级约束(必须定义在表级上);否则既可以定义在列级上也可以定义在表级上此时只是SQL语句格式不同而已)

(2)列级约束:包含在列定义中,直接跟在该列的其它定义之后 ,用空格分隔;不必指定列名

表级约束:与列定义相互独立,不包含在列定义中;与定义用‘,’分隔;必须指出要约束的列的名称

(注:因为在创建列级约束时,只需将创建列约束的语句添加到该字段(列)的定义子句后面;而在创建表级约束时,需要将创建表级约束的语句添加到各个字段(列)定义语句的后面,因为并不是每个定义的字段都要创建约束,所以必须指明需要创建的约束的列名。)

举例说明:Create Table project

项目编号 int

Constraint pk_pno primary key,

项目名称 char(20),

项目负责人 char(20),

Constraint un_pname_pm unique(项目名称,项目负责人)

分析:“项目编号”字段设置为主键,主键约束名为pk_pno,此主键约束为列主键约束“项目名称”和“项目负责人”的组合字段设置唯一性约束,此约束为表级约束)

回到
顶部