mysql中的外键foreign key

一、如果一张表中有一个非主键的字段指向了别一张表中的主键,就将该字段叫做外键。

  一张表中可以有多个外键。

  外键的默认作用有两点:

  1.对子表(外键所在的表)的作用:子表在进行写操作的时候,如果外键字段在父表中找不到对应的匹配,操作就会失败。

  2.对父表的作用:对父表的主键字段进行删和改时,如果对应的主键在子表中被引用,操作就会失败。

  外键的定制作用----三种约束模式:

    district:严格模式(默认), 父表不能删除或更新一个被子表引用的记录。

    cascade:级联模式, 父表操作后,子表关联的数据也跟着一起操作。

    set null:置空模式,前提外键字段允许为NLL,  父表操作后,子表对应的字段被置空。

  使用外键的前提:

  1. 表储存引擎必须是innodb,否则创建的外键无约束效果。

  2. 外键的列类型必须与父表的主键类型完全一致。

  3. 外键的名字不能重复。

  4. 已经存在数据的字段被设为外键时,必须保证字段中的数据与父表的主键数据对应起来。

二、新增外键

  1. 在创建时增加

   create table my_tab1(

   id int primary key auto_increment,

   name varchar(10) not null,

   class int,

   foreign key(class) references my_tab2;

   )charset utf8;

  2. 在创建好的表中增加

   alter table my_tab1 add [constraint 外键名] foreign key(外键字段名) references mytab2(主键字段名);

三、删除外键

  alter table my_tab drop foreign key 外键名字;

时间: 2024-12-16 11:42:53

mysql中的外键foreign key的相关文章

[原创]MYSQL中利用外键实现级联删除和更新

MySQL中利用外键实现级联删除.更新 MySQL支持外键的存储引擎只有InnoDB,在创建外键的时候,要求父表必须有对应的索引,子表在创建外键的时候也会自动创建对应的索引.在创建索引的时候,可以指定在删除.更新父表时,对子表进行的相应操作,包括RESTRICT.NO ACTION.SET NULL和CASCADE.其中RESTRICT和NO ACTION相同,是指在子表有关联记录的情况下父表不能更新:CASCADE表示父表在更新或者删除时,更新或者删除子表对应记录:SET NULL则是表示父表

MySQL学习9:详解MySQL中的外键约束

本篇主要讲解MySQL中的外键约束. 一约束概述 创建约束的目的就是保证数据的完整性和一致性.约束根据约束针对的字段的数目的多少划分为表级约束和列级 约束. 如果约束按照功能来划分的话刻印划分为:NOT NULL(非空约束).PRIMARY KEY(主键约束).UNIQUE KEY(唯一约束).DEFAULT(默认约束)和FOREIGN KEY(外键约束). 在前面我们已经初步涉及到了除外键约束之外的四个约束,这一次我们来谈谈最复杂的外键约束. 二外键约束的要求 FOREIGN KEY(外键约束

MySQL中的外键是什么、有什么作用

最近自学数据库MySQL,然后有个疑问,一直不得其解,查询了相关资料,最后还是没有解决. 我的疑问是 "使用外键约束" ,然后我对 "外键" 这个词不是很理解,查询相关资料都是讲一些术语,说外键的主要作用是:保持数据的一致性.完整性.听得我是一头雾水. 关于外键,我有自己的一些理解,但是不晓得是否正确,举个例子来表达我的看法:假如现在需要建立一个表,一个什么样的表呢?一个班级的学生个人信息表: 所以在设计的时候,就给表1添加一个外键,这个外键就是表2中的学号字段,那

[转载]SET FOREIGN_KEY_CHECKS=0;在Mysql中取消外键约束

Mysql中如果表和表之间建立的外键约束,则无法删除表及修改表结构. 解决方法是在Mysql中取消外键约束:  SET FOREIGN_KEY_CHECKS=0; 然后将原来表的数据导出到sql语句,重新创建此表后,再把数据使用sql导入, 然后再设置外键约束: SET FOREIGN_KEY_CHECKS=1;

Navicat在MySQL中添加外键详细过程

Navicat在MySQL中添加外键详细过程   /** *@author blovedr *功能: Navicat在MySQL中添加外键 *日期: 2018年6月21日   22:42 *注释: 学习数据库MySQL的点点记录, 谢谢网上各位大神分享经验,欢迎各位大神批评指导与交流. */   1. 打开Navicat连接上数据库, 并建立新的数据库:"test": 2. 在数据库"test"中创建两个表"emp"(主表)和"dept

MYSQL外键(Foreign Key)的使用

转载自:http://www.cppblog.com/wolf/articles/69089.html#Post 原文实在太精辟又形象,忍不住转载过来留下笔记,像作者致敬 在MySQL 3.23.44版本后,InnoDB引擎类型的表支持了外键约束.外键的使用条件:1.两个表必须是InnoDB表,MyISAM表暂时不支持外键(据说以后的版本有可能支持,但至少目前不支持):2.外键列必须建立了索引,MySQL 4.1.2以后的版本在建立外键时会自动创建索引,但如果在较早的版本则需要显示建立: 3.外

mysql 外键(FOREIGN KEY)使用介绍

一.基本概念 1.MySQL中"键"和"索引"的定义相同,所以外键和主键一样也是索引的一种.不同的是MySQL会自动为所有表的主键进行索引,但是外键字段必须由用户进行明确的索引.用于外键关系的字段必须在所有的参照表中进行明确地索引,InnoDB不能自动地创建索引. 2.外键可以是一对一的,一个表的记录只能与另一个表的一条记录连接,或者是一对多的,一个表的记录与另一个表的多条记录连接. 3.如果需要更好的性能,并且不需要完整性检查,可以选择使用MyISAM表类型,如果

mysql|中主外键关系(转)

http://my.oschina.net/liting/blog/356150 一.外键: 1.什么是外键 2.外键语法 3.外键的条件 4.添加外键 5.删除外键 1.什么是外键: 主键:是唯一标识一条记录,不能有重复的,不允许为空,用来保证数据完整性 外键:是另一表的主键, 外键可以有重复的, 可以是空值,用来和其他表建立联系用的.所以说,如果谈到了外键,一定是至少涉及到两张表.例如下面这两张表: 上面有两张表:部门表(dept).员工表(emp).Id=Dept_id,而Dept_id就

mysql中主外键关系

一.外键: 1.什么是外键 2.外键语法 3.外键的条件 4.添加外键 5.删除外键 1.什么是外键: 主键:是唯一标识一条记录,不能有重复的,不允许为空,用来保证数据完整性 外键:是另一表的主键, 外键可以有重复的, 可以是空值,用来和其他表建立联系用的.所以说,如果谈到了外键,一定是至少涉及到两张表.例如下面这两张表: 上面有两张表:部门表(dept).员工表(emp).Id=Dept_id,而Dept_id就是员工表中的外键:因为员工表中的员工需要知道自己属于哪个部门,就可以通过外键Dep