大给分,关于建表的时候,如何设置外建约束???100分

yqaw 2003-05-07 08:01:00
在sql server中,如何定义外键约束?怎么写约束表达式?另外我看介绍sql server的书中讲到,“在定义主关键字约束的表中更新列值时其它表中有与之相
关联的外关键字约束的表中的外关键字列也将被相应地做相同的更新”,但是需要写入约束表达式,请问这个表达式怎么写?另外,作好了这样的外键约束后,能否使得,对一个表进行插入操作的时候,能自动的对另一个与他有外键关系的表中相对应的列也进行插入操作?

谢谢,100分
...全文
65 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
joygxd 2003-05-07
  • 打赏
  • 举报
回复
有约束后,外建表中不能插入主建表中没有的数据,更能保证数据库的完整性和唯一性
jimzj 2003-05-07
  • 打赏
  • 举报
回复
给你一个例子( 级联不删除, 级联更新)
create table table1(
id int,
remark varchar( 255),
primary Key ( id )
)
create table table2
(
id int Foreign Key References table1( id ) On Delete No Action On Update Cascade,
remark varchar( 255 )
)
pengdali 2003-05-07
  • 打赏
  • 举报
回复
Create database cat
go
use cat
go
CREATE TABLE s(s# int not null primary key,s_name varchar(8) not null)
go
CREATE TABLE c (c# int not null primary key,c_name varchar(8) not null)
go
CREATE TABLE cs(c# int not null,s# int not null,cj tinyint not null default(0),
primary key (c#,s#),foreign key(s#) references s(s#),foreign key(c#) references c(c#))
go



insert s values(1,'saa')
insert c values(1,'caa')

--这句是对的
insert cs values(1,1,86)

--这句是错的,sql会报错,应为s表的s#列里没有2
insert cs vlaues(2,1,45)
funboy88 2003-05-07
  • 打赏
  • 举报
回复
CREATE TABLE
[ database_name.[ owner ] . | owner. ] table_name
( { < column_definition >
| column_name AS computed_column_expression
| < table_constraint > ::= [ CONSTRAINT constraint_name ] }

| [ { PRIMARY KEY | UNIQUE } [ ,...n ]
)

[ ON { filegroup | DEFAULT } ]
[ TEXTIMAGE_ON { filegroup | DEFAULT } ]

< column_definition > ::= { column_name data_type }
[ COLLATE < collation_name > ]
[ [ DEFAULT constant_expression ]
| [ IDENTITY [ ( seed , increment ) [ NOT FOR REPLICATION ] ] ]
]
[ ROWGUIDCOL]
[ < column_constraint > ] [ ...n ]

< column_constraint > ::= [ CONSTRAINT constraint_name ]
{ [ NULL | NOT NULL ]
| [ { PRIMARY KEY | UNIQUE }
[ CLUSTERED | NONCLUSTERED ]
[ WITH FILLFACTOR = fillfactor ]
[ON {filegroup | DEFAULT} ] ]
]
| [ [ FOREIGN KEY ]
REFERENCES ref_table [ ( ref_column ) ]
[ ON DELETE { CASCADE | NO ACTION } ]
[ ON UPDATE { CASCADE | NO ACTION } ]
[ NOT FOR REPLICATION ]
]
| CHECK [ NOT FOR REPLICATION ]
( logical_expression )
}

< table_constraint > ::= [ CONSTRAINT constraint_name ]
{ [ { PRIMARY KEY | UNIQUE }
[ CLUSTERED | NONCLUSTERED ]
{ ( column [ ASC | DESC ] [ ,...n ] ) }
[ WITH FILLFACTOR = fillfactor ]
[ ON { filegroup | DEFAULT } ]
]
| FOREIGN KEY //这里是建立外键的语法
[ ( column [ ,...n ] ) ] //当前表的列名
REFERENCES ref_table [ ( ref_column [ ,...n ] ) ] //关联表的表名和列名
[ ON DELETE { CASCADE | NO ACTION } ] //在这里设置级联更新和级联删除
[ ON UPDATE { CASCADE | NO ACTION } ]
[ NOT FOR REPLICATION ]
| CHECK [ NOT FOR REPLICATION ]
( search_conditions )
}
不能在插入的时候也相应插入,只有写触发器了


caiyunxia 2003-05-07
  • 打赏
  • 举报
回复
up
Rewiah 2003-05-07
  • 打赏
  • 举报
回复
1、如何定义外键约束?
看create table和alter table语句的帮助

2、“在定义主关键字约束的表中更新列值时其它表中有与之相
关联的外关键字约束的表中的外关键字列也将被相应地做相同的更新”,指的是级联更新和级联删除

3、另外,作好了这样的外键约束后,能否使得,对一个表进行插入操作的时候,能否自动的对另一个与他有外键关系的表中相对应的列也进行插入操作?
不能,除非写插入触发器

34,590

社区成员

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

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