‘壹’ sql如何建立外键请教高手了
数据库mysql
建立外键的前提:
本表的列必须与外键类型相同(外键必须是外表主键)。
外键作用:
使两张表形成关联,外键只能引用外表中的列的值!
指定主键关键字:
foreign
key(列名)
引用外键关键字:
references
<外键表名>(外键列名)
事件触发限制:
on
delete和on
update
,
可设参数cascade(跟随外键改动),
restrict(限制外表中的外键改动),set
Null(设空值),set
Default(设默认值),[默认]no
action
例如:
outTable表
主键
id
类型
int
创建含有外键的表:
create
table
temp(
id
int,
name
char(20),
foreign
key(id)
references
outTable(id)
on
delete
cascade
on
update
cascade);
说明:把id列
设为外键
参照外表outTable的id列
当外键的值删除
本表中对应的列筛除
当外键的值改变
本表中对应的列值改变。
自己实践
才能完全了解外键的作用
关键是:事件触发限制的作用
‘贰’ sql怎么设置外键
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 ,
[introction] [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 dbo.mybbs add constraint fk_mybbs_author
foreign key (authorid)
references dbo.author([id]) on update cascade on delete cascade
2)删除外键约束fk_mybbs_author:
--alter table dbo.mybbs 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的主键和外键就是起约束作用。
‘叁’ SQL数据库外键
创建外键时可以指定级联删除选项,设置后主表数据被删除,从表数据也会被删除,反之则不然。
参考:http://hi..com/zagelover/item/c0118adda8f92ef592a97475
sql外键约束NO ACTION,CASCADE,SET NULL,SET DEFAULT
NO ACTION
指定如果试图删除/修改某一行,而该行的键被其他表的现有行中的外键所引用,则产生错误并回滚 DELETE/UPDATE语句。
CASCADE、SET NULL 和 SET DEFAULT
允许通过删除或更新键值来影响指定具有外键关系的表,这些外键关系可追溯到在其中进行修改的表。如果为目标表也定义了级联引用操作,那么指定的级联操作也将应用于删除或更新的那些行。不能为具有 timestamp 列的外键或主键指定 CASCADE。
ON DELETE CASCADE
指定如果试图删除某一行,而该行的键被其他表的现有行中的外键所引用,则也将删除所有包含那些外键的行。
ON UPDATE CASCADE
指定如果试图更新某一行中的键值,而该行的键值被其他表的现有行中的外键所引用,则组成外键的所有值也将更新到为该键指定的新值。 (如果 timestamp 列是外键或被引用键的一部分,则不能指定 CASCADE。 )
ON DELETE SET NULL
指定如果试图删除某一行,而该行的键被其他表的现有行中的外键所引用,则组成被引用行中的外键的所有值将被设置为 NULL。目标表的所有外键列必须可为空值,此约束才可执行。
ON UPDATE SET NULL
指定如果试图更新某一行,而该行的键被其他表的现有行中的外键所引用,则组成被引用行中的外键的所有值将被设置为 NULL。目标表的所有外键列必须可为空值,此约束才可执行。
ON DELETE SET DEFAULT
指 定如果试图删除某一行,而该行的键被其他表的现有行中的外键所引用,则组成被引用行中的外键的所有值将被设置为它们的默认值。目标表的所有外键列必须具 有默认值定义,此约束才可执行。如果某个列可为空值,并且未设置显式的默认值,则会使用 NULL 作为该列的隐式默认值。因 ON DELETE SET DEFAULT 而设置的任何非空值在主表中必须有对应的值,才能维护外键约束的有效性。
ON UPDATE SET DEFAULT
指 定如果试图更新某一行,而该行的键被其他表的现有行中的外键所引用,则组成被引用行中的外键的所有值将被设置为它们的默认值。目标表的所有外键列必须具 有默认值定义,此约束才可执行。如果某个列可为空值,并且未设置显式的默认值,则会使用 NULL 作为该列的隐式默认值。因 ON UPDATE SET DEFAULT 而设置的任何非空值在主表中必须有对应的值,才能维护外键约束的有效性。
‘肆’ sql中怎样创建外键约束
添加外键 ,alter table B
语法:alter table 表名 add constraint 外键约束名 foreign key(列名) references 引用外键表(列名)
如:
altertableStu_PkFk_Sc
addconstraintFk_s
foreignkey(sno)
referencesStu_PkFk_S(sno)
--cc是外键约束名,不能重复,也不能是int类型(如1,2,3)
add constraint cc
--B表里的需要约束的字段(id)
foreign key (id)
--A表后的(id)可省略
references A (id)
(4)sql引用外键扩展阅读:
数据查询语言,其语句,也称为“数据检索语句”,用以从表中获得数据,确定数据怎样在应用程序给出。保留字SELECT是DQL(也是所有SQL)用得最多的动词,其他DQL常用的保留字有WHERE,ORDER BY,GROUP BY和HAVING。这些DQL保留字常与其他类型的SQL语句一起使用。
参考资料:结构化查询语言_网络
‘伍’ 关于SQL建表引用外键问题
系主任电话 char(15) default'', Constraint SdeptPK Primary Key (系号,系名),)建立这个Sdept表成功了。 Create table Teacher( 教师编号 char(10) not null, 教师姓名 char(15) not null, 教师性别 char(15) default'', 教师出生日期 datetime, 职称 char(10) default'', 教师政治面貌 char(10) default'', 办公室房间号 char(10) default'', 教师电话 char(15) default'', 系名 char(30) default'', Constraint TeacherPK Primary Key (教师编号), Constraint TeacherFK Foreign Key (系名) References Sdept (系名), Constraint DatatimeCK Check (教师出生日期1900-1-1 AND 教师出生日期<2000-1-1))出现错误!服务器: 消息 1776,级别 16,状态 1,行 1 在被引用表 'Sdept' 中没有与外键 'SdeptFK' 的引用列的列表匹配的主键或候选键。 服务器: 消息 1750,级别 16,状态 1,行 1 未能创建约束。请参阅前面的错误信息。 哪位牛人给出结果啊?!!!急!
‘陆’ sql数据库添加外键引用orderinfo
外键:foreign key (userLevelId) references userLevel(userLevelId)。 主键:primary key。
‘柒’ SQL数据库中的外键 是怎么输入的
表中的字段都要手写上去的。
主键一般是用来约束自身的,一般值要唯一
外键是外部引用约束,含义是其值必须在所引用的表中字段中存在