首页 > 数据库 >关于MySQL数据库的外键作用及如何创建?

关于MySQL数据库的外键作用及如何创建?

时间:2023-06-03 10:24:09浏览次数:53  
标签:SET 数据库 外键 键值 student MySQL TABLE id

一、外键的作用:

外键的主要作用是保证数据的一致性和完整性,并且减少数据冗余。主要体现在以下两个方面:
1、阻止执行
从表插入新行,其外键值不是主表的主键值便阻止插入。
从表修改外键值,新值不是主表的主键值便阻止修改。
主表删除行,其主键值在从表里存在便阻止删除(要想删除,必须先删除从表的相关行)。
主表修改主键值,旧值在从表里存在便阻止修改(要想修改,必须先删除从表的相关行)。
2、级联执行
主表删除行,连带从表的相关行一起删除。
主表修改主键值,连带从表相关行的外键值一起修改。

二、如何添加外键?

1、使用navicate可视化工具

2、使用sql语句创建外键

第一种:创建表时直接创建外键

create table teacher(  
id int unsigned auto_increment,
name varchar(20),
primary key (id)
);
create table student(
id int unsigned auto_increment,
name varchar(20),
gender enum('男','女','保密'),
tid int unsigned,
primary key (id),
constraint stfk foreign key(tid)references teacher(id)
);

 

第二种:创建表后再添加外键

语法:

其中,ON DELETE 和 ON UPDATE 表示事件触发限制

ALTER TABLE 表名 ADD CONSTRAINT 外键名 FOREIGN KEY(外键字段名) REFERENCES 外表表名(主键字段名)
[ON DELETE {RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT}]
[ON UPDATE {RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT}]
# 参数 意义
RESTRICT 限制外表中的外键改动(默认值,也是最安全的设置)
CASCADE 跟随外键改动
SET NULL 设为null值
NO ACTION 无动作
SET DEFAULT 设为默认值

示例:

# 先创建两张表,表引擎为 InnoDB
CREATE TABLE student
(
id int (11) primary key auto_increment,name char(255),sex char(255),age int(11)
) Engine = InnoDB CHARACTER SET utf8 COLLATE utf8_general_ci
CREATE TABLE student_score
(
id int (11) primary key auto_increment,class char(255),score char(255),student_id int(11)
) Engine = InnoDB CHARACTER SET utf8 COLLATE utf8_general_ci
# 创建外键
ALTER TABLE student_score ADD CONSTRAINT s_id FOREIGN KEY(student_id) REFERENCES student(id);
ALTER TABLE student_score ADD CONSTRAINT s_id FOREIGN KEY (student_id) REFERENCES student (id) ON DELETE CASCADE ON UPDATE CASCADE;
# 删除外键
ALTER TABLE 表名 DROP FOREIGN KEY 外键名;
ALTER TABLE student_score DROP FOREIGN KEY s_id;

 

标签:SET,数据库,外键,键值,student,MySQL,TABLE,id
From: https://www.cnblogs.com/dongfangzhaoyue/p/17453404.html

相关文章

  • linux卸载MySQL
    linux卸载MySQL一查找以前是否装有mysqlrpm-qa|grep-imysql显示之前安装了:MySQL-server-5.6.22-1.el6.i686MySQL-client-5.6.22-1.el6.i686二停止mysql服务、删除之前安装的mysql删除命令:rpm-e–nodeps包名rpm-evMySQL-server-5.6.22-1.el6.i686rpm-evMySQL-cli......
  • 使用du查/mysql/bak目录使用1013g,但使用df查却显示使用2.8t
    问题描述:使用du查/mysql/bak目录使用1013g,但使用df查却显示使用2.8t,如下所示:系统:rhel7.3异常原因:删除文件后,du命令便不会在文件系统目录中统计被删除的文件,若此时存在运行中的进程持有已经被删除的文件句柄,那该类文件就不会真正在磁盘中被删除,分区超级块中的信息也不会更改,df命......
  • 2023年06月数据库流行度最新排名
    点击查看最新数据库流行度最新排名(每月更新)2023年06月数据库流行度最新排名TOPDB顶级数据库索引是通过分析在谷歌上搜索数据库名称的频率来创建的一个数据库被搜索的次数越多,这个数据库就被认为越受欢迎。这是一个领先指标。原始数据来自谷歌Trends如果您相信集体智慧,那么TOP......
  • 基于JAVA的springboot篮球论坛系统,附源码+数据库+论文+PPT
    1、项目介绍考虑到实际生活中在篮球论坛方面的需要以及对该系统认真的分析,将系统权限按管理员和用户这两类涉及用户划分。(a)管理员;管理员使用本系统涉到的功能主要有:首页、个人中心、用户管理、篮球论坛、系统管理等功能。管理员用例图如图3-1所示。(b)用户;用户使用本系统......
  • mysql(一):基本原理
    Innodb是如何实现事务的Innodb通过BufferPool,LogBuffer,RedoLog,UndoLog来实现事务,以一个update语句为例:Innodb在收到一个update语句后,会先根据条件找到数据所在的页,并将该页缓存在BufferPool中执行update语句,修改BufferPool中的数据,也就是内存中的数据针对update语句生......
  • Sentinel控制台监控数据持久化到MySQL数据库
    阅读文本大概需要3分钟。    根据官方wiki文档,Sentinel控制台的实时监控数据,默认仅存储5分钟以内的数据。如需持久化,需要定制实现相关接口。https://github.com/alibaba/Sentinel/wiki/在生产环境中使用-Sentinel给出了指导步骤:自行扩展实现MetricsRepository接口;注册成......
  • MySQL复制技术的介绍1
    MySQL是一个非常优秀的开源数据库,也是装机数量最多的数据库之一。少数几台MySQL人工就可以管理了。但当服务器几十、上百台的时候,如果光靠人力维护,这个维护成本就相当高了,如和提高MySQL服务器的可用性这个问题摆在MySQLDBA和系统架构师们面前。你手上这本书讲了一些方法和工具,能够......
  • 时序列数据库选型
    时序列数据库武斗大会之什么是TSDB由于工作上的关系,最近看了一些关于时序列数据库的东西,当然,我所看的也都是以开源方案为主。趁着这股热劲还没退,希望能整理一些资料出来。如果正好你也有这方面的需求,那么希望这一系列的介绍能够帮助到你。1.什么是时序列数据库(Timeseriesdatabas......
  • SQLite数据库查看工具
    SQLite的官方网站[url]http://www.sqlite.org/[/url]SQLite的官方网址列了很多查看SQLite数据库的软件:[url]http://www.sqlite.org/cvstrac/wiki?p=ManagementTools[/url]这里推荐我使用过的几个,当然是免费的才行.1.SQLiteDatabaseBrowser[im......
  • Docker下安装MySQL
    0x01:Docker安装MySQL下载MySQL镜像dockerpullmysql默认是下载latest标签的mysql,那么版本是多少呢?访问以下链接:https://hub.docker.com/_/mysql/启动MySQL镜像,指定密码为123456,映射目录/home/xxljobwork,指定默认编码为utf-8dockerrun-eMYSQL_ROOT_PASSWORD=123456-p3306......