
修改一下
把
foreign key (BudNo) REFERENCES Building(BudNo),
foreign key (BudUnit) REFERENCES Building(BudUnit),
foreign key (RoomNo) REFERENCES Building(RoomNo),
修改为
foreign key (BudNo, BudUnit, RoomNo) REFERENCES Building(BudNo, BudUnit, RoomNo)
SQL 2008 Express 下测试通过。
1> create table Building2> (BudNo int check (BudNo>=1 and BudNo<=30),
3> BudUnit int check (BudUnit>=1 and BudUnit <=5),
4> RoomNo int,
5> Dno char(20),
6> RoomArea float not null,
7> RoomType char(20),
8> BudUnitCost float not null,
9> BudAllCost float not null,
10> PayDate date,
11> StructurePicture char(5),
12> ExpectStructurePicture char(5),
13> States char(10),
14> primary key(BudNo, BudUnit, RoomNo),
15> -- foreign key(Dno) REFERENCES Developer(Dno),
16> )
17> go
1> create table Contracts
2> (
3> Cno char(20) primary key,
4> BudNo int check (BudNo>=1 and BudNo<=30),
5> BudUnit int check (BudUnit>=1 and BudUnit <=5),
6> RoomNo int,
7> ConNo char(20),
8> Sno char(20),
9> EveryMonthMoney float,
10> CountMonth int,
11> Cdeadline date,
12> DownGold float,
13> Interests float,
14> CR char(20),
15> foreign key (BudNo, BudUnit, RoomNo) REFERENCES Building(BudNo, BudUnit, Roo
mNo)
16> -- foreign key (ConNo ) REFERENCES Consumer(ConNo),
17> -- foreign key (Sno ) REFERENCES Staff(Sno),
18> )
19> go
1>
数据库外码的含义:数据库中如果一个关系中的一个属性是另外一个关系中的主码则这个属性为外码。外码在数据库中是相对主码而言的,即外键用于建立和加强两个表数据之间的链接的一列或多列。主码与外部码提供了一个实现关系间联系的手段,也是在计算机世界描述现实世界实体间联系的手段。
sqlserver中建立外键约束有3中方式:enterprisemanager中,tables,designtable,设置table的properties,可以建立constraint,referencekey;enterprisemanager中,diagrams,newdiagrams,建立两个表的关系;直接用transactsql语句。
1、三个方法都需要先建立数据表。
1)创建表author:
createtable[dbo][author](
[id][bigint]notnull,[authorname][char](10)null,[address][char](480)null,[introction][ntext]null
)
2)创建表mybbs:
reatetable[dbo][mybbs](
[id][bigint]identity(1,1)notnull,[authorid][bigint]notnull,[title][char](40)null,[date_of_created][datetime]null,[abstract][char](480)null,[content][ntext]null
)
2、设置表mybbs中的authorid为外键,参照author表的id字段,直接使用transactsql语句,过程如下:
1)增加表mybbs(authorid)的外键约束fk_mybbs_author,表mybbs中的authorid受表author中的主键id约束:
begintransaction
altertabledbomybbsaddconstraintfk_mybbs_author
foreignkey(authorid)
referencesdboauthor([id])onupdatecascadeondeletecascade
2)删除外键约束fk_mybbs_author:
--altertabledbomybbsdropconstraintfk_mybbs_author
--rollback
committransaction
上面onupdatecascade,ondeletecascade两个选项,指明以后author表的id字段有delete,update *** 作时,mybbs表中的id也会被级联删除或更新。如果没有选中,是不可以对author表中已被mybbs表关联的id进行update或者delete *** 作的。
:SQL的主键和外键的作用:
1、插入非空值时,如果主键表中没有这个值,则不能插入。
2、更新时,不能改为主键表中没有的值。
3、删除主键表记录时,你可以在建外键时选定外键记录一起级联删除还是拒绝删除。
4、更新主键记录时,同样有级联更新和拒绝执行的选择。
简而言之,SQL的主键和外键就是起约束作用。
--修改主键
ALTER
TABLE
tablename
--修改表
ADD
CONSTRAINT
tb_PRIMARY
PRIMARY
KEY
CLUSTERED
(列名)
/将你要设置为主键约束的列/
--修改约束ALTER
TABLE
销售表
--修改表
ADD
CONSTRAINT
ck_sl
--创建检查约束
CHECK
(数量
>=
1
and
数量
<=
10000)
--添加约束条件
--修改外键alter
table
表名
add
constraint
外键名称
foreign
key
(字段)
references
关系表名
(关系表内字段)
SQL语言创建表时候用Primary Key(属性名)定义主码,用Foreign Key(属性名)定义外码。
主码是一种唯一关键字,表定义的一部分。一个表的主码可以由多个关键字共同组成,并且主码的列不能包含空值。主码是可选的,并且可在 CREATE TABLE语句中用Primary Key(属性名)定义。
将一个表的值放入第二个表来表示关联,所使用的值是第一个表的主键值(在必要时可包括复合主键值)。此时,第二个表中保存这些值的属性称为外键,用Foreign Key(属性名)定义。
结构化查询语言(Structured Query Language)简称SQL,结构化查询语言是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。
sql语句就是对数据库进行 *** 作的一种语言。
总结如下:
主码不应包含动态变化的数据,如时间戳、创建时间列、修改时间列等。实际上,因为主码除了唯一地标识一行之外,再没有其他的用途了,所以也就没有理由去对它更新。如果主码需要更新,则说明主码应对用户无意义的原则被违反了。
以上就是关于关于数据库外码设置问题全部的内容,包括:关于数据库外码设置问题、数据库 外码是什么、sql怎么设置外键(sql怎么设置外键约束)等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)