十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
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
....
方便进行外键的删除
主键是定义一个表中起主要作用的数据项,这些数据项的数据在表中是唯一的,同时系统按主键为表建立索引。\x0d\x0a\x0d\x0a外键是定义一个表中的某数据项的数据,要参照另一个表的主键数据。既没有在另一个表的主键数据中出现的数据,不允许在这个表的外键数据项中出现。\x0d\x0a\x0d\x0a主键:表中记录的唯一标识\x0d\x0a\x0d\x0a外键:依赖于别的表的数据\x0d\x0a\x0d\x0a唯一键:在表中唯一\x0d\x0a\x0d\x0a键是一个或多个字段的组合\x0d\x0a\x0d\x0a唯一键:可以确定一条记录的字段(或字段组合),一张表可以有多个唯一键,正如可以识别你的身份的可以是身份证,学生证,军人证\x0d\x0a\x0d\x0a主键:你把唯一键的一个选做主键,一张表只能有一个主键\x0d\x0a\x0d\x0a外键:所定义的外键是另一张表的主键,\x0d\x0a\x0d\x0a主键:表中记录的唯一标识,外键:依赖于别的表的数据,唯一键:在表中唯一。\x0d\x0a\x0d\x0a主键和唯一键的一个区别:主键是不允许为NULL的,唯一键则可以,当然你可以加上NOT NULL来限制它\x0d\x0a\x0d\x0a主键:能够唯一表示数据表中的每个记录的字段或者字段的组合就称为主键。一个主键是唯一识别一个表的每一行记录,但这只是其作用的一疗分,主键的主要作用是将记录和存放在其他表中的数据进行关联,在这一点上,主键是不同表中各记录间的简单指针,主键约整就是确定表中的每一条记录,主键不能是空值,唯一约束是用于指定一个或多个列的组合值具有唯一性,以防止在列中输入重复的值,所以,主键的值对用户而言是没有什么意义,并且和它赋予的值也没有什么特别联系。\x0d\x0a\x0d\x0a外键:\x0d\x0a\x0d\x0a若有两个表A,B,C是A的主键,而B中也有C字段,则C就是表B的外键,外键约束主要用来维护两个表之间数据的一致性。\x0d\x0a\x0d\x0aA为基本表,B为信息表。\x0d\x0a\x0d\x0a在数据库中,常常不只是一个表,这些表之间也不是相互独立的,不同的表之间需要建立一种关系,才能将它们的数据相互沟通,而在这个沟通过程中,就需要表中有一个字段作为标志,不同的记录对应的字段取值不能相同,也不能是空白的,通过这个字段中不同的值可以区别各条记录,就像我们区别不同的人,每个人都有名字,但它却不能作为主键,因为人名很容易出现重复,而身份证号是每个人都不同的,所以可以根据它来区别不同的人,数据库的表中作为主键的段段就要像人的身份证号一样,必须是每个记录的值都不同,这才能根据主键的值来确定不同的记录。\x0d\x0a\x0d\x0a什么是外键?\x0d\x0a\x0d\x0a说明你的表A中的某项a,是引用表B的某列b\x0d\x0a\x0d\x0a为什么要使用外键?\x0d\x0aRDBMS的基本概念,可以维护数据库的完整。\x0d\x0a\x0d\x0a如何来用,涉及到数据库的定义。\x0d\x0a\x0d\x0a唯一约束和主键的区别是什么?\x0d\x0a\x0d\x0a唯一性约束\x0d\x0a\x0d\x0a唯一性约束所在的列允许空值,但是主键约束的列不允空值。\x0d\x0a\x0d\x0a可以把唯一约束放在一个或者多个列上,但是,唯一性约束所在的列并不是表的主键列。\x0d\x0a\x0d\x0a唯一性约束强制在指定的列上创建一个唯一性索引,在默认情况下,创建唯一性的非聚簇索引,但是,也可以指定所创建的索引是聚簇索引。\x0d\x0a\x0d\x0a主键:\x0d\x0a\x0d\x0a用于标识某行而且与之相关\x0d\x0a\x0d\x0a是不可能更新\x0d\x0a\x0d\x0a不应该允许空\x0d\x0a\x0d\x0a唯一域/字段\x0d\x0a\x0d\x0a用于作为访问某行的可选手段。\x0d\x0a\x0d\x0a只要唯一就可以更新\x0d\x0a\x0d\x0a可以为空\x0d\x0a\x0d\x0a注意唯一和主键的区别,它们都是创建一个唯一的索引,一个表格仅含有一个主键约束列,但是,它有可能在其他列中含有许多的唯一约束。
详细说明可以百度搜我的博客: mysql foreign外键详细使用方法和使用事项_2018_lcf
---------下面是使用方法
使用外键的前提:
1. 表储存引擎必须是innodb,否则创建的外键无约束效果。
2. 外键的列类型必须与父表的主键类型完全一致。
3. 外键的名字不能重复(一般使用。
建外键表两种方式(创建表时关联/添加外键)
1) 第一种方式创建表时加外键使用实例:
mysql create table A( name char(12), id int(8) ,index(id))engine=innodb; //先建立A表,
mysql create table B( //建立B表,同时做外键
- id int(9),
- money int(9),
- index(id),
- foreign key(id) references A (id) //这个是必加项,foreign key(B表要关联的字段),references A表名 (对应字段)
- on delete cascade on update cascade //这里是可选项的,只加一项或都不加都可以的,看需求.
- )engine=innodb; //这个必须是innodb类型,并且和A表的一致
第二方式在已有的表上做和A表关联的外键(最好是新建好没有记录的,不然会因为记录对不上而创建不成功)
mysql create table C( //这里先创建一个空表C
- id int(7),
- money int(5),
- index(id)
- )engine=innodb;
mysql alter table Cadd constraint abc //在C表上添加和表A关联的外键,constraint 外键名(自己任意取)
- foreign key(id) references A(id) //和创建时一样的输入
- on delete cascade on update cascade; //一样是可选项,这行不写也可以通过.
注: @以上的cascade是上面介强的四种模式之一,是可以替换成其它模式的,如写成on update set null
@还可以同时做两个外键,如写成foreign key(id,money) references A(id,money) 即可
@两张表关联字段名可以取不一样名字,但类型必须一致