网站首页 > 技术文章 正文
什么是外键?
???外键是指引用另外一个表中的一列或多列数据,被引用的列应该具有主键约束或者唯一性约束(简单来说外键是另一个表的主键或者唯一约束)。外键可以有重复的, 可以是空值,用来建立和加强两个表数据之间的连接
主外键关系
在上图上涉及的两个表中,学生信息表 (stuInfo)为主表,学生
成绩表(score)为从表;那么主从表之间有什么关系呢?
1、当主表中没有对应的记录时,不能将记录添加到子表
??--------学生成绩表中不能出现学生信息表中没有的学号
2、不能更改主表中的值而导致子表中的记录孤立
??--------学生信息表中的id变化了,学生成绩表中的id也要随着发生改变
3、子表存在与主表对应的记录,不能从主表中删除该行
??--------不能把部门表中的数据删除
4、删除主表前,先删子表
??--------先删除成绩表、后删除学生信息表
外键的使用
外键的使用需要满足下列的条件:
1、两张表必须都是InnoDB表,并且它们没有临时表。
2、建立外键关系的对应列必须具有相似的InnoDB内部数据类型。
3、建立外键关系的对应列必须建立了索引。
创建外键的两种方式:
方式一:在创建表的时候进行添加
方式二:表已经创建好了,继续修改表的结构来添加外键。
在创建表的时候添加外键:
表1:
create table stuInfo(
Scode int primary key, --学生的学号
Sname char(10), --学生的姓名
Saddress varchar(50), --学生的住址
Sgrade int, --学生所在班级
Semail varchar(50), --学生的邮箱地址
Sbrith date
)DEFAULT CHARSET='utf8';
表2:
create table score(
studentID int,
coureseID int,
score int,
scoreID int primary key,
foreign key(studentID) references stuInfo(Scode) --添加外键 )
DEFAULT charset='utf8';
建表以后添加外键:
语法:alter table 表名称 add foreign key (列名称) references 关联表名称(列名称);
例:
alter table stuInfo add foreign key (Scode) references score(studentID);
三、删除外键
语法:alter table 表名称 drop foreign key 外键名称;
例:
alter table score drop foreign key score_ibQk_1;
注意:如果没有在建表的时候标明外键名称,
可以通过:
show create table 表名;
进行查看外键名称
猜你喜欢
- 2024-12-05 SQLite3:外键约束在命令行里不起作用,Navicat却无法插值
- 2024-12-05 学习VB编程第95天,使用sql命令创建修改删除数据库
- 2024-12-05 软考笔记|2-4 信息系统项目生命周期及典型模型
- 2024-12-05 多列数据删除重复值,快捷键Alt+D+P三步搞定,80%人没见过
- 2024-12-05 外键禁用,MySQL还能玩出什么花样?
- 2024-12-05 GBASE南大通用示例,使用 INDEX DISABLED 创建外键约束
- 2024-12-05 mysql外键实战
- 2024-12-05 mysql存在外键导入导出
- 2024-12-05 阿里:不得在数据库中使用外键
- 2024-12-05 数据库主键和外键
- 最近发表
- 标签列表
-
- cmd/c (90)
- c++中::是什么意思 (84)
- 标签用于 (71)
- 主键只能有一个吗 (77)
- c#console.writeline不显示 (95)
- pythoncase语句 (88)
- es6includes (74)
- sqlset (76)
- apt-getinstall-y (100)
- node_modules怎么生成 (87)
- chromepost (71)
- flexdirection (73)
- c++int转char (80)
- mysqlany_value (79)
- static函数和普通函数 (84)
- el-date-picker开始日期早于结束日期 (76)
- js判断是否是json字符串 (75)
- asynccallback (71)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- java (73)
- js数组插入 (83)
- mac安装java (72)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)