create table A( aaa int primary key,...)
create table B(
bbb int primary key,
aaa int,
... ...
foreign key (aaa) references A (aaa) on delete ... on update ...
)
要注意 B中的aaa类型 和 名字要和A中的完全一样,还有 那些空格你最好有,虽然有的时候没关系,但是有时候就有问题。
1.外键的作用,主要有两个:一个是让数据库自己通过外键来保证数据的完整性和一致性
一个就是能够增加er图的可读性
2.外键的配置
1)先创建一个主表,代码如下:
#创建表student,并添加各种约束
create
table
student
(
id
int
primary
key
,
#主键约束
name
varchar(20)
,
#唯一约束
age
int
not
null,
#非空约束
sex
varchar(2)
,
address
varchar(20)
default
'重庆'
#默认约束
)
再通过一个外键,创建一个分数表,这样的话,就可以方便查询。代码如下:
#创建分数表
create
table
score
(
id
int
primary
key
,
sid
int
,
china
int
,
history
int,
english
int,
constraint
fk_sid
foreign
key(sid)
references
student(id)
#通过外键创建链接
)
创建外键的方法有很多,其中最常见创建外键的格式是:constraint
fk_***
foreign
key(**)
references
链接的外表
删除外键:
alter
table
drop
foreign
key
'外键名'.
注意:
只有在定义外键时,用constraint
外键名
foreign
key
....
方便进行外键的删除
外键约束对父表的含义:在父表上进行update/delete以更新或删除在子表中有一条或多条对应匹配行的候选键时,父表的行为取决于:在定义子表的外键时指定的on update/on delete子句, InnoDB支持5种方式, 分列如下
. cascade方式
在父表上update/delete记录时,同步update/delete掉子表的匹配记录
On delete cascade从mysql3.23.50开始可用on update cascade从mysql4.0.8开始可用
. set null方式
在父表上update/delete记录时,将子表上匹配记录的列设为null
要注意子表的外键列不能为not null
On delete set null从mysql3.23.50开始可用on update set null从mysql4.0.8开始可用
. No action方式
如果子表中有匹配的记录,则不允许对父表对应候选键进行update/delete *** 作
这个是ANSI SQL-92标准,从mysql4.0.8开始支持
. Restrict方式
同no action, 都是立即检查外键约束
不知道这文章对你有没有帮助!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)