关闭

史上最简单的 MySQL 教程(二十八)「外键(上)」

标签: MySQL外键主键新增修改
1982人阅读 评论(2) 收藏 举报
分类:

温馨提示:本系列博文已经同步到 GitHub,地址为「mysql-tutorial」,欢迎感兴趣的童鞋StarFork,纠错。

外键

外键foreign key,外面的键,即不在自己表中的键。如果一张表中有一个非主键的字段指向另外一张表的主键,那么将该字段称之为外键。每张表中,可以有多个外键。

新增外键

外键既可以在创建表的时候增加,也可以在创建表之后增加(但是要考虑数据的问题)。

第 1 种:在创建表的时候,增加外键

  • 基本语法foreign key(外键字段) + references + 外部表名(主键字段);

执行如下 SQL 语句,进行测试:

-- 创建外键
create table my_foreign1(
    id int primary key auto_increment,
    name varchar(20) not null comment '学生姓名',
    c_id int comment '班级表ID',
    -- 增加外键
    foreign key(c_id) references class(id)  
)charset utf8;

foreign1

观察上图可知,字段c_idkey显示为MUL,表示多个键的意思。这是因为外键要求字段本身是一个索引(普通索引)如果字段本身没有索引,外键就会先创建一个索引,然后才创建外键本身。此外,CONSTRAINT后面的my_foreign_ibfk_1表示外键的名字。

第 2 种:在创建表之后,增加外键

  • 基本语法alter table + 表名 + add[constraint + 外键名字] + foreign key(外键字段) + references + 外部表名(主键字段);

执行如下 SQL 语句,进行测试:

-- 创建外键
create table my_foreign2(
    id int primary key auto_increment,
    name varchar(20) not null comment '学生姓名',
    c_id int comment '班级表ID'
)charset utf8;

-- 增加外键
alter table my_foreign2 add
-- 指定外键名
constraint test_foreign
-- 指定外键字段
foreign key(c_id)
-- 引用外部表主键
references class(id);

foreign2

如上图所示,显然咱们已经增加外键成功啦!

修改外键 & 删除外键

外键不能修改,只能先删除后增加。

  • 基本语法alter table + 表名 + drop foreign key + 外键名字;

执行如下 SQL 语句,进行测试:

-- 删除外键
alter table my_foreign1 drop foreign key my_foreign1_ibfk_1;

foreign3

观察上图可知,删除外键不能通过查看表结构来体现,而是应该通过创建表的语句来查看。


温馨提示:符号[]括起来的内容,表示可选项;符号+,则表示连接的意思。


———— ☆☆☆ —— 返回 -> 史上最简单的 MySQL 教程 <- 目录 —— ☆☆☆ ————

2
0
查看评论

关于mysql数据库主从同步报表主外键约束错误

1. 因为配置数据库主从关系,需要数据库表结构一样,可能会出现下列情况:    a. 直接把需要同步的表从主服务器的库表拖到从服务器的,这个时候因为主服务器的一些表有主外键联系,也会一并在从服务器,当主服务器的有主外键关系的表增加数据的时候,会报主外键错误  ...
  • u011677147
  • u011677147
  • 2015-04-17 14:46
  • 772

史上最简单的 MyBatis 教程

1 前言  MyBatis 源于 Apache 的一个开源项目 iBatis,而 iBatis 一词则来源于“internet”和“abatis”的组合,2010年这个项目由 Apache Software Foundation 迁移到了 Google Code,并且改名为MyBatis ,2013...
  • qq_35246620
  • qq_35246620
  • 2017-02-01 00:49
  • 6613

史上最简单的SpringCloud教程 | 第一篇: 服务的注册与发现(Eureka)

一、spring cloud简介 spring cloud 为开发人员提供了快速构建分布式系统的一些工具,包括配置管理、服务发现、断路器、路由、微代理、事件总线、全局锁、决策竞选、分布式会话等等。它运行环境简单,可以在开发人员的电脑上跑。另外说明spring cloud是基于spri...
  • fend0875
  • fend0875
  • 2017-04-21 08:39
  • 1568

史上最简单的SpringCloud教程

转载请标明出处:  http://blog.csdn.net/forezp/article/details/70148833  本文出自方志朋的博客 错过了这一篇,你可能再也学不会 Spring Cloud 了!Spring Boot做为下一代 web 框架,Spr...
  • zhongzh86
  • zhongzh86
  • 2017-11-22 14:15
  • 50

微服务:史上最简单的 SpringCloud 教程 | 终章

http://blog.csdn.net/forezp/article/details/70148833  本文出自方志朋的博客 案例全部采用Spring Boot 1.5.x ,Spring Cloud版本为Dalston.RELEASE  码农下载:https://gi...
  • superdangbo
  • superdangbo
  • 2017-11-01 17:20
  • 288

史上最简单的 SpringCloud 教程 | 第一篇: 服务的注册与发现(Eureka)

spring cloud 为开发人员提供了快速构建分布式系统的一些工具,包括配置管理、服务发现、断路器、路由、微代理、事件总线、全局锁、决策竞选、分布式会话等等。它运行环境简单,可以在开发人员的电脑上跑。另外说明spring cloud是基于springboot的。本文主要介绍了服务的注册与发现。
  • forezp
  • forezp
  • 2017-04-08 18:16
  • 310084

史上最直白的logistic regression教程 之 五

史上最直白的logistic regression教程整理稿,将4篇博文整理成一个完整的pdf文档,且修改成学术语境。 链接在这里: http://download.csdn.net/detail/u011539200/9290695 0积分下载,求rp,^_^
  • u011539200
  • u011539200
  • 2015-11-22 15:57
  • 658

史上最简单的SpringCloud教程 | 第三篇: 服务消费者(Feign)

这篇文章主要讲述通过feign去消费服务。Feign是一个声明式的web服务客户端,它使得写web服务变得更简单。使用Feign,只需要创建一个接口并注解。它具有可插拔的注解特性,包括Feign 注解和JAX-RS注解。Feign同时支持可插拔的编码器和解码器。
  • forezp
  • forezp
  • 2017-04-09 11:53
  • 188880

log4j 史上最简单的配置

log4j.properties 文件内容:具体需求课根据自己的意愿选择不同的权限# Log4j properties log4j.rootLogger=INFO, stdoutlog4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j....
  • forever_insist
  • forever_insist
  • 2017-11-20 11:26
  • 106

史上最简单的 MySQL 教程(二十一)「数据的高级操作 之 蠕虫复制」

数据的高级操作蠕虫复制蠕虫复制:从已有的数据表中获取数据,然后将数据进行新增操作,数据成倍(以指数形式)的增加。根据已有表创建新表,即复制表结构,其基本语法为: create table + 表名 + like + [数据库名.]表名; 执行如上 SQL 语句,进行测试:-- 根据已有表,创建新表,...
  • qq_35246620
  • qq_35246620
  • 2017-06-03 21:14
  • 2611
    个人资料
    • 访问:959276次
    • 积分:12893
    • 等级:
    • 排名:第1268名
    • 原创:258篇
    • 转载:85篇
    • 译文:11篇
    • 评论:954条
    博主的 GitHub 账号
    GitHub : Charies Gavin

        鉴于 CSDN 糟糕的用户体验,博主会将一些优质的文章迁移到 Charies Gavin's Blog  欢迎大家在 GitHub 上 Follow 博主,以及 Fork、Star、Watch 博主的项目。


      青春不老 奋斗不止


      好学若饥虚心若愚
    博客专栏