Mysql的外键

概念:如果一个实体A的某一字段,刚好指向或引用另一个实体B的主键,那么实体A的这个字段就叫作外键,所以简单来说,外键就是外面的主键,就是其他表的主键。

例:

以上的学生表的班级字段,就是一个外键!

其中,被指向的实体集,称之为父表(主表),负责指向的那个表就是子表(从表),上面的学生表就是子表,班级表就是父表!

作用:

外键的意义就是用来约束关系内的实体!

假如上面学生表中有一个学生的班级字段是11,就不符合正常的业务逻辑!因为班级表中没有id为11的记录。

所以,外键约束主要体现在以下的两个方面:

1,  增加子表记录的时候,是否有与之对应的父表记录!

2,当删除或更改父表记录的时候,从表应该如何处理相关的记录!

定义:

语法:foreign key(字表字段) refeerences 父表名(父表键名)

1,先创建父表:

2,再创建子表:

以上只是体现了外键作用的一个方面,也就是当插入子表记录的时候,需要在父表中有与之对应的记录!

还有一个方面:当删除或更改父表记录的时候,从表应该如何处理相关的记录!

此时,需要设置相关的级联操作!

设置级联操作:

原文地址:https://www.cnblogs.com/ccw869476711/p/8746262.html

时间: 2024-10-17 04:14:07

Mysql的外键的相关文章

MySQL的外键约束:Cascade/Restrict/No action/SET NULL

转自:http://blog.csdn.net/cnjsnt_s/article/details/5548280 具体使用时需要参考:http://blog.csdn.net/codeforme/article/details/5539454 (注:没看很明白,囧.) MySQL有两种常用的引擎类型:MyISAM和InnoDB.目前只有InnoDB引擎类型支持外键约束.InnoDB中外键约束定义的语法如下: [CONSTRAINT [symbol]] FOREIGN KEY [index_nam

MySQL 建立外键约束

http://www.jzxue.com/shujuku/mysql/201109/06-8742.html MySQL 建立外键约束的语法太晦涩难懂了, 不得不记下笔记. 1. 在建表时建立外键 CREATE TABLE table_s ( `id` int(11) NOT NULL AUTO_INCREMENT, `column_name_from` int(11) NOT NULL, `name` varchar(256) NOT NULL, PRIMARY KEY (`id`), IND

MySql 修改外键 支持级联删除

首先必须要有外键,InnoDB甚么的都不说了,直接上修改句子. ALTER TABLE `t_terminal` DROP FOREIGN KEY `FK704405E7F06A14EF`; ALTER TABLE `t_terminal` ADD CONSTRAINT `FK704405E7F06A14EF` FOREIGN KEY (`userId`) REFERENCES `t_user` (`id`) ON DELETE CASCADE ON UPDATE RESTRICT; 要先删除该

MYSQL 添加外键报错

2014年6月16日 10:48:51 出错的部分提示摘录: #1452 - Cannot add or update a child row: a foreign key constraint fails result 2 when explaining filename '#sql-3d5_204369' 解决办法: pma 中同时执行两条语句: set foreign_key_checks = 0; ALTER TABLE `table_name` ADD CONSTRAINT `fk_n

MySQL删除外键定义的方法

MySQL外键在定以后,如果我们不再需要这个外键,可以进行删除操作,下面就为您介绍MySQL删除外键定义的方法,供您参考. 不知道大家有没有发现,在定义外键的时候articles.member_id外键比articles.category_id子句多了一个CONSTRAINT fk_member ?这个fk_member就是用来实现MySQL删除外键用的,如下所示: mysql> ALTER TABLE articles DROP FOREIGN KEY fk_member; Query OK,

SQL Server和MySQL主外键写法对比

SQL Server主键的写法: --列级 create table dept ( dept_no int primary key, dept_name nvarchar(20) not null ) --表级 create table dept ( dept_no int not null, dept_name nvarchar(20) not null, primary key (dept_no) ) --修改 create table dept ( dept_no int not null

MySQL定义外键的方法

MySQL定义外键的方法是每个学习MySQL的人都需要掌握的知识,下文就对MySQL定义外键的语句写法进行了详细的阐述,供您参考. 外键为MySQL带来了诸多的好处,下面就为您介绍MySQL定义外键的语句写法,以及MySQL定义外键过程中出现错误的处理方法,供您参考学习. mysql> CREATE TABLE categories ( -> category_id tinyint(3) unsigned NOT NULL AUTO_INCREMENT, -> name varchar(

第二百八十节,MySQL数据库-外键链表之一对多

MySQL数据库-外键链表之一对多 外键链表之一对多 外键链表:就是a表通过外键连接b表的主键,建立链表关系 一对多:就是b表的某一个字段值对应a表外键里的多个值,前提是a表要与b表链表

MySQL的外键,修改表,基本数据类型,表级别操作,其他(条件,通配符,分页,排序,分组,联合,连表操作)

MySQL的外键,修改表,基本数据类型,表级别操作,其他(条件,通配符,分页,排序,分组,联合,连表操作): a.创建2张表 create table userinfo(nid int not null auto_increment primary key, name varchar(10), age int, part_nid int )engine=innodb default charset=utf8; create table part( nid int not null auto_in

MySQL添加外键Foreign Keys出错,报错[HY000][3780]

今天写开发文档的时候需要做一下数据结构相关的内容,于是就想着一个快捷一点儿的操作,直接在DataGrip里面调用视图,然后将视图打印为PDF,这样就可以直接截图获取到图片了.由于开发的过程中也没有怎么注重外键的建立,因为本来就是一个小小的比赛,所以生成视图的时候外键联系的箭头都没有,真的是自闭了,如果这个直接给评委看,评委估计会气哭...所以我打算花点时间加一些外键上去,心里想着也花不了多少时间,谁知道,这下子还遇到一些哲学问题! 首先看下,本来数据库表视图是这样的,我只是想多增加一些外键约束,