定义

外键:如果一个表的某个字段指向另一个表的主键,就称之为外键。被指向的表,称之为主表,也叫父表,那么另一个表就是从表,也叫子表

#先新建两个表

mysql> create table author_table(
-> author_id int(4) not null primary key auto_increment,
-> author_name char(20) not null);
Query OK, 0 rows affected (0.02 sec)
mysql> create table article_table(
-> article_id int(4) not null primary key auto_increment,
-> article_title char(20) not null,
-> author_id int(4) not null,
-> foreign key(author_id) references author_table(author_id));  #这一步使得article_table中的author_id字段成为外键
Query OK, 0 rows affected (0.02 sec)

#添加数据

mysql> insert into author_table values
-> (1,'zhao'),
-> (2,'qian'),
-> (3,'sun'),
-> (4,'li');
Query OK, 4 rows affected (0.01 sec)
Records: 4 Duplicates: 0 Warnings: 0
mysql> insert into article_table values
-> (1001,'c++',1),
-> (1002,'java',1),
-> (1003,'python',2),
-> (1004,'mysql',3),
-> (1005,'jacascript',4);
Query OK, 5 rows affected (0.00 sec)
Records: 5 Duplicates: 0 Warnings: 0

#子表和附表之间的约束

0 article_table中不能添加author_id为5的记录;

1 author_table中不能删除author_id为4的记录,因为子表中还有作者4的文章

#删除外键约束

mysql> alter table article_table drop foreign key article_table_ibfk_1;
Query OK, 0 rows affected (0.02 sec)
Records: 0 Duplicates: 0 Warnings: 0

#级联操作

#添加外键

mysql> alter table article_table
-> add foreign key fk_id(author_id)  #这里fk_id可以自己指定
-> references author_table(author_id)
-> on delete cascade  #cascade表示关联操作。子表会依赖父表中的数据关联删除或更新
-> on update cascade;    
Query OK, 5 rows affected (0.02 sec)
Records: 5 Duplicates: 0 Warnings: 0

#set null关键字

set null,表示子表数据不指向父表任何记录。当不加set null和cascade时,默认为restrict(拒绝主表的相关操作),所以开始主表无法删除数据

程序媛计划——mysql外键的更多相关文章

  1. 程序媛计划——mysql索引

    定义: 索引是一种单独的.物理的对数据库表中一列或多列的值进行排序的一种存储结构   #为字段创建索引 #在表中的字段中创建索引mysql> create index ind_score on ...

  2. 程序媛计划——mysql连接表

    #inner join等值连接/内连接 mysql> select * from info; +------+-------------+----------+ | name | phone | ...

  3. 程序媛计划——mysql修改表结构

    #查看表的结构 mysql> desc score; +------------+--------------+------+-----+---------+----------------+ ...

  4. 程序媛计划——mysql 插入、查找、修改、删除数据

    #插入.查找数据 [mysql>create table if not exists exam_score( ..>id int(4) not null primary key auto_ ...

  5. 程序媛计划——mysql基本操作

    本文适用于mac 在官网上下载community 版mysql,选择dmy这种.在终端中安装好mysql. #进入mysql /usr/local/mysql/bin/mysql -uroot -p ...

  6. Mysql 外键设置

    MySql外键设置详解 (1) 外键的使用: 外键的作用,主要有两个:    一个是让数据库自己通过外键来保证数据的完整性和一致性    一个就是能够增加ER图的可读性    有些人认为外键的建立会给 ...

  7. mysql 外键约束备注

    梳理mysql外键约束的知识点. 1.mysql外键约束只对InnoDb引擎有效: 2.创建外键约束如下: DROP TABLE IF EXISTS t_demo_product; CREATE TA ...

  8. MySQL外键之级联

    简介 MySQL外键起到约束作用,在数据库层面保证数据的完整性.例如使用外键的CASCADE类型,当子表(例如user_info)关联父表(例如user)时,父表更新或删除时,子表会更新或删除记录,这 ...

  9. MySQL外键约束On Delete、On Update各取值的含义

    主键.外键和索引的区别?   主键 外键 索引 定义: 唯一标识一条记录,不能有重复的,不允许为空 表的外键是另一表的主键, 外键可以有重复的, 可以是空值 主索引(由关键字PRIMARY定义的索引) ...

随机推荐

  1. EXP-00056:遇到oracle错误12154

    执行命令如下: 引用 exp user/pwd@dbname file=d:text.dmp owner=(user) 碰到了错误: 引用 EXP-00056:遇到oracle错误12154 ORA- ...

  2. jquery正则表达式验证:验证身份证号码

    需求说明: 前端页面使用正则表达式验证文本输入框输入的身份证号码是否符合规则. 代码说明: 这里只介绍正则表达式部分,其他部分的代码不做介绍.如有其它需求请自行修改即可. 步骤一:建立一个页面可以是h ...

  3. 解决lhgDialog插件在IE11浏览器的BUG

    项目中用到一款lhgDialog插件,最近在Win7系统IE11浏览器打上最新补丁(KB4012204)后,对话框内容的高度变成默认高度,经过调试,修改了lhgDialog里的iframe高度,问题解 ...

  4. svn.SvnX

    1. 使用SvnX的入门 http://www.divvun.no/doc/tools/docu-svn-user-svnx.html 2. SvnX的代码 https://code.google.c ...

  5. c++11多线程学习笔记之三 condition_variable使用

    从windows角度来说,condition_variable类似event. 阻塞等待出发,不过condition_variable可以批量出发. 代码如下: // 1111111.cpp : 定义 ...

  6. 8.15 session 有效时间, session在数据查询中最后不用

    1.在tomcat-->conf-->conf/web.xm中的<session-config>中设置: <session-config> <session- ...

  7. pyspider示例代码五:实现自动翻页功能

    实现自动翻页功能 示例代码一 #!/usr/bin/env python # -*- encoding: utf- -*- # Created on -- :: # Project: v2ex fro ...

  8. FTP中各文件目录的说明

    DirectAdmin:FTP中各文件目录的说明     当您使用FTP连上空间后,FTP列表会出现以下文件和目录: domains目录:网站文件存放目录:public_html目录:快捷目录,可以快 ...

  9. 2018.09.28 bzoj3688: 折线统计(dp+树状数组)

    传送门 简单树状数组优化dp. 注意到k很小提示我们搜(d)(d)(d)索(p)(p)(p). 先按第一维排序. 用f[i][j][0/1]f[i][j][0/1]f[i][j][0/1]表示第i个点 ...

  10. 2018.09.21 atcoder An Invisible Hand(贪心)

    传送门 简单贪心啊. 这题显然跟t并没有关系,取差量最大的几组买入卖出就行了. 于是我们统计一下有几组差量是最大的就行了. 代码: #include<bits/stdc++.h> #def ...