2012-08-31 回答

mysql外键设置详解

(1) 外键的使用:

外键的作用,主要有两个:

一个是让数据库自己通过外键来保证数据的完整性和一致性

一个就是能够增加er图的可读性

有些人认为外键的建立会给开发时操作数据库带来很大的麻烦.因为数据库有时候会由于没有通过外键的检测而使得开发人员删除,插入操作失败.他们觉得这样很麻烦

其实这正式外键在强制你保证数据的完整性和一致性.这是好事儿.

例如:

有一个基础数据表,用来记录商品的所有信息。其他表都保存商品id。查询时需要连表来查询商品的名称。单据1的商品表中有商品id字段,单据2的商品表中也有商品id字段。如果不使用外键的话,当单据1,2都使用了商品id=3的商品时,如果删除商品表中id=3的对应记录后,再查看单据1,2的时候就会查不到商品的名称。

当表很少的时候,有人认为可以在程序实现的时候来通过写脚本来保证数据的完整性和一致性。也就是在删除商品的操作的时候去检测单据1,2中是否已经使用了商品id为3的商品。但是当你写完脚本之后系统有增加了一个单据3 ,他也保存商品id找个字段。如果不用外键,你还是会出现查不到商品名称的情况。你总不能每增加一个使用商品id的字段的单据时就回去修改你检测商品是否被使用的脚本吧,同时,引入外键会使速度和性能下降。

(2) 添加外键的格式:

alter table yourtablename

add [constraint 外键名] foreign key [id] (index_col_name, ...)

references tbl_name (index_col_name, ...)

[on delete {cascade | set null | no action | restrict}]

[on update {cascade | set null | no action | restrict}]

说明:

on delete/on update,用于定义delete,update操作.以下是update,delete操作的各种约束类型:

cascade:

外键表中外键字段值会被更新,或所在的列会被删除.

restrict:

restrict也相当于no action,即不进行任何操作.即,拒绝父表update外键关联列,delete记录.

set null:

被父面的外键关联字段被update ,delete时,子表的外键列被设置为null.

而对于insert,子表的外键列输入的值,只能是父表外键关联列已有的值.否则出错.

外键定义服从下列情况:(前提条件)

1)

所有tables必须是innodb型,它们不能是临时表.因为在mysql中只有innodb类型的表才支持外键.

2)

所有要建立外键的字段必须建立索引.

3)

对于非innodb表,foreign key子句会被忽略掉。

注意:

创建外键时,定义外键名时,不能加引号.

如: constraint 'fk_1' 或 constraint "fk_1"是错误的

(3) 查看外键:

show create table ***;可以查看到新建的表的代码以及其存储引擎.也就可以看到外键的设置.

删除外键:

alter table drop foreign key '外键名'.

注意:

只有在定义外键时,用constraint 外键名 foreign key .... 方便进行外键的删除.

若不定义,则可以:

先输入:alter table drop foreign key -->会提示出错.此时出错信息中,会显示foreign key的系统默认外键名.--->

用它去删除外键.

mysql表定义外键语法_mysql设置外键的语法怎么写?相关推荐

  1. 数据库表设置外键VS不设置外键,哪个更好?

    转发自极光轻学,原文链接:https://jiguangqingxue.com/info/24 必须设置外键VS不要设置外键的争论 数据库表到底要不要设置外键约束,一直具有非常大的争议.我认为完全没有 ...

  2. mysql给一个表添加外键约束_Mysql添加外键约束

    简单说一下使用外键的好处 1.完整性约束 比如: 用户表中有字段 用户编号(id) , 名称(username) 设备表中有字段 设备编号(id) , 设备名称(devicename) 设备属于的用户 ...

  3. mysql的主键有什么作用_mysql设置主键有什么用

    mysql设置主键的作用是:1.唯一地标识表中的每一行,通过它可强制表的实体完整性:2.主要是用于其他表的外键关联,以及本记录的修改与删除. [相关学习推荐:mysql教程] mysql设置主键的作用 ...

  4. mysql建立外键快捷方式_mysql建立外键

    InnoDB与Myisam的六大区别: 1.  构成上的区别 MyISAM: 每个MyISAM在磁盘上存储成三个文件.第一个文件的名字以表的名字开始,扩展名指出文件类型..frm文件存储表定义.数据文 ...

  5. mysql设置主键的作用_mysql设置主键有什么用

    mysql设置主键的作用是:1.唯一地标识表中的每一行,通过它可强制表的实体完整性:2.主要是用于其他表的外键关联,以及本记录的修改与删除. [相关学习推荐:mysql教程] mysql设置主键的作用 ...

  6. mysql主外键添加_mysql 增加外键:(+创建主键)

    MySQL是开源免费的数据库软件,是一款很优秀的软件,作为我们的学生或者科研人员在开发软件的时候,最好用也是最省钱的.所以MySQL学好是至关重要的! SQL语言包含4个部分: ※ 数据定义语言(DD ...

  7. mysql 外键冲突_mysql添加外键错误是什么原因

    mysql添加外键错误的原因:1.外键的字段与关联字段的类型不匹配:2.外键名重复:3.外键没有建立索引:4.外键存在默认值:5.语法错误. 原因分析: 第一种情况:外键的字段与关联的字段的类型不匹配 ...

  8. mysql中平方米显示不出来_MySQL - 添加外键

    目录 整理了一下这个知识,虽然很简单哈,为了以后的方便. 为已经添加好的数据表添加外键 语法: alter table 表名 add constraint FK_ID foreign key(你的外键 ...

  9. mysql创建外键时1025_navicat设置外键报错1025怎么办

    navicat设置外键报错1025怎么办,字段,类型,表字,给大家,报错 navicat设置外键报错1025怎么办 易采站长站,站长之家为您整理了navicat设置外键报错1025怎么办的相关内容. ...

最新文章

  1. SolrCloud和MultiCore的区别
  2. 《LeetCode力扣练习》第6题 C语言版 (做出来就行,别问我效率。。。。)
  3. HTTP1.0,HTTP1.1,HTTPS和HTTP2.0的区别
  4. 访问进程环境变量environ时的一个坑
  5. Linux有关Shell算数运算的用法补充笔记
  6. 201671010128 2017-10-08《Java程序设计》之Lambda与内部类
  7. 【数据结构与算法】算法的空间复杂度
  8. GCC全过程详解+剖析生成的.o文件[转]
  9. [转载]Qt之自定义界面(二)添加最小化、关闭按钮、添加背景
  10. android中prop配置参数名,21.Android系统属性build.prop文件(笔记)
  11. 关于《Delphi源代码分析》的讨论
  12. 港台术语与内地术语之对照
  13. 数据包络分析法(DEA) R实现
  14. Photoshop 更换证件照底色
  15. MATLAB之模型仿真(一)简单自由落体运动
  16. WY-2000B空气质量检测系统
  17. 基于python使用CV裁剪图片
  18. Julia两天极速入门学习笔记
  19. An Introduction to Pairing-Based Cryptography学习笔记
  20. 大田后生仔用计算机怎么弹奏,大田后生仔闽南语怎么唱?大田后生仔歌词谐音翻译...

热门文章

  1. GIT项目管理工具(part8)--版本控制
  2. Visual Studio Code 里针对 SAP Commerce Cloud Impex 文件的语法高亮扩展
  3. Angular 依赖注入里factory函数的调用时机
  4. rxjs of操作符生成的Observable对象的执行详细分析
  5. 从医院到家,再重返SAP成都研究院
  6. 如何自定义SAP Spartacus 产品明细的url pattern
  7. SAP Commerce Extension的Web应用启动问题
  8. React应用里Invalid hook call错误消息的处理
  9. 如何免费试用SAP的Fiori应用
  10. 我的同事Leo做的一个AR增强现实的项目