sql怎么设置外键

sql怎么设置外键,第1张

sql server中建立外键约束有3中方式:enterprise manager中,tables,design table,设置table的properties,可以建立constraint, reference key;enterprise manager中,diagrams, new diagrams,建立两个表的关系;直接用transact sql语句。

1、三个方法都需要先建立数据表。

1)创建表author :

create table [dbo][author] (

[id] [bigint] not null ,

[authorname] [char] (10) null ,

[address] [char] (480)  null ,

[introduction] [ntext]  null

)

2)创建表mybbs:

reate table [dbo][mybbs] (

[id] [bigint] identity (1, 1) not null ,

[authorid] [bigint] not null ,

[title] [char] (40)  null ,

[date_of_created] [datetime] null ,

[abstract] [char] (480)  null ,

[content] [ntext]  null

)

2、设置表mybbs中的authorid为外键,参照author表的id字段,直接使用transact sql语句,过程如下:

1)增加表mybbs(authorid)的外键约束fk_mybbs_author,表mybbs中的authorid受表author中的主键id约束:

begin transaction

alter table dbomybbs add constraint fk_mybbs_author

foreign key (authorid)

references  dboauthor([id]) on update cascade on delete cascade

2)删除外键约束fk_mybbs_author:

--alter table dbomybbs drop constraint fk_mybbs_author

--rollback

commit transaction

上面on update cascade,on delete cascade两个选项,指明以后author表的id字段有delete,update *** 作时,mybbs表中的id也会被级联删除或更新。如果没有选中,是不可以对author表中已被mybbs表关联的id进行update或者delete *** 作的。

SQL的主键和外键的作用:

1、插入非空值时,如果主键表中没有这个值,则不能插入。

2、更新时,不能改为主键表中没有的值。

3、删除主键表记录时,你可以在建外键时选定外键记录一起级联删除还是拒绝删除。

4、更新主键记录时,同样有级联更新和拒绝执行的选择。

简而言之,SQL的主键和外键就是起约束作用。

这里,你要理解主键和外键的基本含义,简单来说就是:

1、主键是用来唯一地标识一行数据。主键列必须包含唯一的值,且不能包含空值(null)。

2、外键用于与另一张表的关联。是能确定另一张表记录的字段,用于保持数据的一致性。

你的后面外键的定义可以错误报错信息已经很清楚的告诉你问题在哪了,在被引用表 'staff' 中没有与外键 'fk_room_sID_staff_sID' 中的引用列列表匹配的主键或候选键。,你的staff表是复合主键,但是你外键定义时没有加上所有主键码,这样的外键是无法创建成功的。

原因还是从上面主外键定义来分析,主外键最终数据都是同步级联更新的,你的定义不同步,就会导致你没法更新,举个例子

表1(列1, 列2)主键列1,列2

表2(列A,列B)外键列A对应主键码 列1

如果是这样定于的话,当你删除表2记录时,因为时级联删除,表1可能会删除掉其他不需要删除的信息,因为不是根据表1主键删除的。

你按照各表主键去重新修改定义下你的外键问题就解决了。

constraint是约束关键字,后面[]中的是约束名,然后primary key又是关键字,[user_id]指定字段

约束定义的格式:

constraint 约束名 约束类型 字段/表达式

例如:

1

constraint ch_1 check (sal>2000);

--这个ch_1约束是自动检查sal是否大于2000

2

constraint fk_1 foreign key (字段1) references table1(字段2);

--定于外键约束:该表的字段1参照table1表中的字段2

--部门信息表

create table Departments

(

d_id int not null primary key,

d_name varchar(20) not null,

)

use POS

--员工信息表

create table employee

(

e_id int not null primary key,

ename varchar(10) not null,

esex char(2) not null,

constraint CK_yg check ( esex in('男','女')),

eduties varchar(10) not null,

epassword int not null,

eleve char(4) not null,

eshengfen int not null,

d_id int not null,

constraint FK_ano foreign key(d_id) references Departments(d_id)

)

--供应商信息表

create table offer

(

o_id int not null primary key,

oname varchar(10) not null,

oaddress varchar(20) not null,

post int not null,

phonenumber int not null,

tax int not null,

obanknumber int not null,

obank varchar(20) not null,

ocontact varchar(10) not null,

onote varchar(20)

)

--会员信息表

create table Member

(

Mno int not null primary key,

Mname varchar(10) not null,

Msex char(2) not null,

constraint CK_ya check ( Msex in('男','女')),

Mid int not null,

Mamount money not null,

Mintegral int not null

)

--商品信息表

create table product

(

p_id int not null primary key,

pclass varchar(20) not null,

pquantity int not null,

pprice money not null,

pname varchar(10) not null

)

--入库信息表

create table import

(

i_id int identity(0 ,1) not null primary key ,

idate datetime ,

p_id int ,

constraint FK_an foreign key(p_id) references product(p_id),

Punit int ,

iprice money,

Sales_price money ,

iquantity int,

Total_amount money,

o_id int ,

constraint FK_cn foreign key(o_id) references offer(o_id),

Salesman_No int ,

constraint FK_on foreign key(Salesman_No) references employee(e_id)

)

--销售出货单主信息表

create table xiaoshouzhu

(

xdate datetime not null,

xtotal_amount money not null,

xsfxj char(2) not null,

xsfmember char(2) not null,

Mno int not null,

constraint FK_ak foreign key(Mno) references Member(Mno),

MRsyybh int not null,

constraint FK_ek foreign key(MRsyybh) references employee(e_id)

)

--销售出货单子信息(

create table xiaoshouzi

(

xzRno int not null,

quantity int not null,

price money not null,

zkbl float not null,

amount money not null

)

--1当在商品信息表中添加一条商品信息时,同时将该商品信息记录在入库信息表中(触发器)

create trigger triger_1

on product

after insert

as

begin

declare @a int, @b varchar(20),@c int,@d money, @e varchar(20)

select @a = p_id ,@b = pclass,@c = pquantity , @d = pprice ,@e = pname from inserted

insert into import(idate,p_id,Punit,iprice,Sales_price,iquantity,Total_amount,p_id,Salesman_No)

values (null ,@a , null , null,@d, @c ,null , null,null)

end

--2销售一件商品时,将该销售信息记录在销售出货单子信息表中,并从入库信息表中将对应产品的数量减一(触发器)

create trigger triger_2

on xiaoshouzi

after insert

as

begin

update import

set iquantity = (iquantity -1)

where p_id =(select p_id from inserted)

end

--3撤消某部门时,将该部门记录从部门表中删除,并将员工表中对应该部门的员工记录删除(触发器)

create trigger triger_3

on Departments

after delete

as

begin

delete employee

where d_id = (SELECT d_id from deleted)

end

--4当更新商品信息表中商品单价时,同时更改入库信息表中对应商品的销售价格(触发器)

create trigger triger_4

on product

after update

as

begin

update import

set Sales_price = (select pprice from inserted)

where p_id = (select p_id from deleted )

end

--5向销售出货单子信息表中添加一条信息,并输出表中商品总金额。(存储过程)

create procedure productpricing_1

@total_amount money output,

@a int,

@b int,

@c money,

@d float,

@e money

as

begin

insert into xiaoshouzi

values (@a , @b ,@c ,@d ,@e);

select @total_amount = (price quantity) from xiaoshouzi

end

--6输出副食类商品的入库平均价格。(存储过程)

create procedure productpricing_2

@avg_price money output

as

begin

select @avg_price = avg(pprice)

from product

where pname = '副食类'

end

--7输出收银员“刘明”在2010年3月6号销售的商品总金额(存储过程)

create procedure productpricing_3

@total_amount money output

as

begin

select @total_amount = DRtotal_amount

from xiashouzhu , employee

where xiaoshouzhuMRsyybh = employeee_id and employeeename = '刘明' and xiaoshouzhuxdate = '2010年3月6号'

end

CONSTRAINT METHOD_AGENTTYPE CHECK--创建约束((PUBLICEM_CATEGORY_METHODSAGENTTYPE) IN (('jmx:rmi'),('jmx:t3'),('ssh'),('socket'))),

--AGENTTYPE是(('jmx:rmi'),('jmx:t3'),('ssh'),('socket'))),中的一个

CONSTRAINT FK_METHOD_CATEGORY FOREIGN KEY--创建外键(CATEG_ID) REFERENCES PUBLICEM_CATEGORIES(CATEGORYID))CATEG_ID是外键被参照的表是EM_CATEGORIES,被参照的列是CATEGORYID

以上就是关于sql怎么设置外键全部的内容,包括:sql怎么设置外键、SQL数据库问题(为什么我后面四个运行不了啊)求救、sql server 2005建表语句有句不明白等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9316772.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存