MYSQL外键(Foreign Key)的使用

RK3568 NFS rootfs配置与调试实战指南(已验证) 本文提供了在RK3568开发板上配置NFS rootfs的完整实战指南。通过详细步骤讲解如何配置uboot的bootargs参数、编译支持NFS的内核,并在PC端搭建TFTP与NFS服务器,最终实现从网络挂载根文件系统,从而极大提升驱动调试和应用程序开发的迭代效率。 阅读详情
转:http://www.cppblog.com/wolf/articles/69089.html

在MySQL 3.23.44版本后,InnoDB引擎类型的表支持了外键约束。
外键的使用条件:
1.两个表必须是InnoDB表,MyISAM表暂时不支持外键(据说以后的版本有可能支持,但至少目前不支持);
2.外键列必须建立了索引,MySQL 4.1.2以后的版本在建立外键时会自动创建索引,但如果在较早的版本则需要显示建立; 
3.外键关系的两个表的列必须是数据类型相似,也就是可以相互转换类型的列,比如int和tinyint可以,而int和char则不可以;

外键的好处:可以使得两张表关联,保证数据的一致性和实现一些级联操作;

外键的定义语法:
[CONSTRAINT symbol] FOREIGN KEY [id] (index_col_name, ...)
    REFERENCES tbl_name (index_col_name, ...)
    [ON DELETE {RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT}]
    [ON UPDATE {RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT}]
该语法可以在 CREATE TABLE 和 ALTER TABLE 时使用,如果不指定CONSTRAINT symbol,MYSQL会自动生成一个名字。
ON DELETE、ON UPDATE表示事件触发限制,可设参数:
RESTRICT(限制外表中的外键改动)
CASCADE(跟随外键改动)
SET NULL(设空值)
SET DEFAULT(设默认值)
NO ACTION(无动作,默认的)

搞个例子,简单演示一下使用,做dage和xiaodi两个表,大哥表是主键,小弟表是外键:
建表:

 1 CREATE   TABLE  `dage` (
 2   `id`  int ( 11 )  NOT   NULL  auto_increment,
 3   `name`  varchar ( 32 )  default   '' ,
 4    PRIMARY   KEY   (`id`)
 5 ) ENGINE = InnoDB  DEFAULT  CHARSET = latin1;
 6
 7 CREATE   TABLE  `xiaodi` (
 8   `id`  int ( 11 )  NOT   NULL  auto_increment,
 9   `dage_id`  int ( 11 )  default   NULL ,
10   `name`  varchar ( 32 )  default   '' ,
11    PRIMARY   KEY   (`id`),
12    KEY  `dage_id` (`dage_id`),
13    CONSTRAINT  `xiaodi_ibfk_1`  FOREIGN   KEY  (`dage_id`)  REFERENCES  `dage` (`id`)
14 ) ENGINE = InnoDB  DEFAULT  CHARSET = latin1;

插入个大哥:
1 mysql >   insert   into  dage(name)  values ( ' 铜锣湾 ' );
2 Query OK,  1  row affected ( 0.01  sec)
3 mysql >   select   *   from  dage;
4 + -- --+--------+
5 |  id  |  name    |
6 + -- --+--------+
7 |    1   |  铜锣湾  |
8 + -- --+--------+
9 1  row  in   set  ( 0.00  sec)

插入个小弟:
1 mysql >   insert   into  xiaodi(dage_id,name)  values ( 1 , ' 铜锣湾_小弟A ' );
2 Query OK,  1  row affected ( 0.02  sec)
3
4 mysql >   select   *   from  xiaodi;
5 + -- --+---------+--------------+
6 |  id  |  dage_id  |  name          |
7 + -- --+---------+--------------+
8 |    1   |         1   |  铜锣湾_小弟A  |
9 + -- --+---------+--------------+

把大哥删除:
1 mysql >   delete   from  dage  where  id = 1 ;
2 ERROR  1451  ( 23000 ): Cannot  delete   or   update  a parent row: a  foreign   key   constraint  fails (`bstar / xiaodi`,  CONSTRAINT  `xiaodi_ibfk_1`  FOREIGN   KEY  (`dage_id`)  REFERENCES  `dage` (`id`))


提示:不行呀,有约束的,大哥下面还有小弟,可不能扔下我们不管呀!

插入一个新的小弟:

1 mysql >   insert   into  xiaodi(dage_id,name)  values ( 2 , ' 旺角_小弟A ' );              
2 ERROR  1452  ( 23000 ): Cannot  add   or   update  a child row: a  foreign   key   constraint  fails (`bstar / xiaodi`,  CONSTRAINT  `xiaodi_ibfk_1`  FOREIGN   KEY  (`dage_id`)  REFERENCES  `dage` (`id`))
3


提示:小子,想造反呀!你还没大哥呢!

把外键约束增加事件触发限制:

 1 mysql >  show  create   table  xiaodi;
 2
 3    CONSTRAINT  `xiaodi_ibfk_1`  FOREIGN   KEY  (`dage_id`)  REFERENCES  `dage` (`id`)
 4
 5 mysql >   alter   table  xiaodi  drop   foreign   key  xiaodi_ibfk_1; 
 6 Query OK,  1  row affected ( 0.04  sec)
 7 Records:  1   Duplicates:  0   Warnings: 
 8 mysql >   alter   table  xiaodi  add   foreign   key (dage_id)  references  dage(id)  on   delete   cascade   on   update   cascade ;
 9 Query OK,  1  row affected ( 0.04  sec)
10 Records:  1   Duplicates:  0   Warnings:  0

再次试着把大哥删了:
1 mysql >   delete   from  dage  where  id = 1 ;
2 Query OK,  1  row affected ( 0.01  sec)
3
4 mysql >   select   *   from  dage;
5 Empty  set  ( 0.01  sec)
6
7 mysql >   select   *   from  xiaodi;
8 Empty  set  ( 0.00  sec)



得,这回对应的小弟也没了,没办法,谁让你跟我on delete cascade了呢!

例子说明的应该蛮清楚了吧,其他功能对应手册自己实践吧!:-)

YOLO项目部署:从Python脚本到Docker容器的企业级交付全流程 YOLO模型企业级Docker部署方案 核心挑战 环境一致性:解决"本地能跑,服务器崩掉"问题 可扩展性:支持单实例到多实例扩展 稳定性:确保99.9%可用性 部署流程 项目改造:模块化代码,分离配置 Docker镜像:支持CPU/GPU环境 API服务:封装推理逻辑 监控告警:实现自动化运维 技术方案 需求 解决方案 环境一致性 Docker镜像+依赖冻结 可扩展性 K8s+负载均衡 稳定性 健康检查+自动重启 项目结构 模块化代码组织 外部化配置管理 精确依赖版本控制 摘要重点:通过 阅读详情

相关推荐

小程序结合Three.js与gsap:打造流畅3D动画的完整指南

本文详细介绍了如何在小程序中整合Three.js与GSAP动画库,打造流畅的3D动画效果。通过从环境搭建、基础场景创建到模型加载与复杂动画编排的完整指南,帮助开发者克服小程序性能限制,实现如商品360度展示等沉浸式交互体验,提升产品视觉吸引力。

python9snake的博客 548

FOREIGN KEY 约束

外键约束MySql外键约束 外键约束 InnoDB也支持外键约束。InnoDB中对外键约束定义的语法看起来如下: [CONSTRAINT symbol] FOREIGN KEY [id] (index_col_name, ...)

tenor的专栏 6110

AMD MI50 Linux ROCm 6.4 手动编译与大模型推理实战

GPU加速计算是现代AI推理的核心基础,其性能依赖于硬件架构、驱动栈与运行时环境的深度协同。ROCm作为AMD开源GPU计算平台,采用‘自下而上’的Linux生态集成路径,强调对上游内核、编译器与固件的强耦合。MI50基于Vega 20(gfx900)架构,虽具备32GB HBM2高带宽显存与14.7 TFLOPS FP16算力,但因ROCm官方支持策略转向CDNA架构,自6.5版本起被移出支持列表,仅ROCm 6.4仍提供实验性兼容——这使其成为Linux下部署私有大模型的关键‘最后一班船’。本文围绕MI

weixin_32770423的博客 370

MySQL数据库——MySQL外键约束(FOREIGN KEY)

MySQL 外键约束(FOREIGN KEY)是表的一个特殊字段,经常与主键约束一起使用。对于两个具有关联关系的表而言,相关联字段中主键所在的表就是主表(父表),外键所在的表就是从表(子表)。

Itmastergo的博客 5万+

从Maya到Unity:3D模型导入全流程避坑指南(含FBX导出设置)

本文详细解析了从Maya导出3D模型至Unity的全流程,重点剖析了FBX格式作为跨软件协作“中间人”的优劣与核心设置。指南涵盖了Maya端模型清理、FBX导出关键配置(如嵌入媒体、轴转换),以及Unity端的模型、材质、动画导入优化与常见问题(如材质丢失、UV法线错误、骨骼动画错乱)的实战解决方案,旨在帮助3D美术师与技术美术建立稳定、高效的工作流。

lg888的博客 792

《python算法与数据结构2000讲》算法与数据结构总结

《python算法与数据结构2000讲》算法与数据结构总结

IT 甄选推荐 1104

MySQL - 外键(foreign key)约束的作用和使用

MySQL外键约束是维护表与表之间关系的重要工具,它能够确保数据的完整性和一致性

DU9999999的博客 7431

C++ 小游戏程序 (共七款)

C++编程小游戏_闪耀的天狼星的博客-优快云博客_游戏c++C++跑酷小游戏_闪耀的天狼星的博客-优快云博客。好玩的c++编程小游戏,共六款。代码】C++跑酷小游戏。

小天狼星_布莱克 的博客 3万+

Oracle外键约束reference,表的约束--外键约束 foreign key reference

1 外键约束一个表中某字段的值,受另一张表中某个字段的限制主表(父表):提供数据的表从表(子表):外键所在的表(引用主表中唯一性字段(主健,唯一)的值)外键的值只能是主表中对应字段的值或者为null外键约束的语法(分为列级和表级,起名字和没有名字的)foreign keyreferences 主表(字段) --无名constraint 约束名foreign key references 主表(字段...

weixin_42350314的博客 3400

华为OD面试八股真题 - 操作系统 - 1

华为OD技术面,操作系统相关八股真题提供详细解答,这篇博客主要涉及于进程和线程相关知识点

qq_45776114的博客 1644

【SpringBoot 3.x 第57节】Spring Boot 3 启动快得不讲武德?揭秘 Spring AOT 编译引擎背后的真相!

🏆本文收录于《滚雪球学SpringBoot 3》,专门攻坚指数提升,本年度国内最系统+最专业+最详细(永久更新)。    本专栏致力打造最硬核 SpringBoot3 从零基础到进阶系列学习内容,🚀均为全网独家首发,打造精品专栏,专栏持续更新中…欢迎大家订阅持续学习。 如果想快速定位学习,可以看这篇【SpringBoot3教程导航帖】,你想学习的都被收集在内,快速投入学习!!两不误。    若还想学习更多,可直接前往《滚雪球学SpringBoot(全版本合集)》,涵盖SpringBoot所有版本教学文章

**My Coding Family** 1761

MySQL中的外键(foreign key)

MySQL中的外键(foreign key)

wgchen 4万+

【OpenClaw企业级智能体实战】第04篇:OpenClaw成本优化实战——Token消耗降96%!claude-mem+OpenViking从入门到精通

OpenClaw作为企业级智能体框架,凭借强大的自动化能力成为企业数字化转型的热门工具,但原生机制导致的上下文冗余问题,让众多用户面临“Token消耗失控”的困境——单周账单数千元的案例屡见不鲜。本文基于阿里云实测数据与开源工具官方文档,先深度拆解OpenClaw成本黑洞的核心成因(记忆碎片化、Token指数级膨胀),再系统讲解两款核心优化工具(claude-mem单Agent记忆管理、OpenViking多Agent集群底座)的底层原理、算法架构与实现逻辑,提供从环境搭建、工具集成、参数调优到安全部署

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 705

mysql启动和关闭外键约束的方法(FOREIGN_KEY_CHECKS)

在MySQL中删除一张表或一条数据的时候,出现[Err] 1451 -Cannot deleteor update a parent row: a foreign key constraint fails (...)这是因为MySQL中设置了foreign key关联,造成无法更新或删除数据。可以通过设置FOREIGN_KEY_CHECKS变量来避免这种情况。我们可以使用 SET FORE...

程序员囧辉 8万+

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

MySQL的外键约束FOREIGN KEY

一、建立外键约束 语法如下: [CONSTRAINT [symbol]] FOREIGN KEY [index_name] (col_name, ...) REFERENCES tbl_name (col_name,...) [ON DELETE reference_option] [ON UPDATE reference_option] reference_option: RESTRI...

灯火觅阑珊 6569

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

mysql 外键(foreign key)的详解和实例

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

差不多先生 12万+

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

MySQL之主键(PRIMARY KEY)和外键(FOREIGN KEY)的作用与使用

在关系型数据库中,主键(PRIMARY KEY)和外键(FOREIGN KEY)是用于定义数据表之间关系的关键约束。它们在数据完整性、查询性能、以及表之间的联系上扮演着重要角色。理解这两者的作用和如何使用它们,是设计高效和规范数据库的基础。主键是用于唯一标识表中每一条记录的字段或字段组合。主键的值必须是唯一的,并且不能为NULL。主键确保了数据表中每一行记录的唯一性,它是表中的一种约束。唯一性:主键保证了表中的每一条记录是唯一的,不会有重复的数据行。非空:主键的字段不能为NULL。

2201_75863687的博客 6146

MySQL||外键约束(FOREIGN KEY)

外键 MySQL外键约束(FOREIGN KEY)用来在两个表的数据之间建立链接,它可以是一列或者多列。一个表可以有一个或多个外键。 外键的主要作用是保持数据的一致性、完整性。例如,学生表的主键是 code,成绩表中score 与这个 code关联。 主表(父表):对于两个具有关联关系的表而言,相关联字段中主键所在的表就是主表。 从表(子表):对于两个具有关联关系的表而言,相关联字段中...

JockLiu的博客 875

MYSQL-外键(Foreign Key)

我们来深入探讨 MySQL 中的外键(Foreign Key)。外键是关系型数据库的基石,用于强制保持数据之间的参照完整性(Referential Integrity)。

3439

MySQL外键约束(FOREIGN KEY)是什么?

对MySQL中的外键约束从基础知识开始,说明了创建外键约束的原则,语法及特性,用案例的方式对外键约束进行解说。

平庸 4万+

mysql添加外键报错:Cannot add foreign key constraint

mysql添加外键报错:Cannot add foreign key constraint 问题描述: error1512 Cannot add foreign key constraint或是error1452 Cannot add foreign key constraint等。 解决办法: 首先定义一个表a(字段名有id(主键),name,pas), 表b(id(主键),user_phone...

Tobey_r1的博客 1307

MySQL系列 表的auto_increment自增,foreign key外键

auto_increment 步长 increment 与 偏移量(起始值) offset 表的初始值 若表的初始值不想为1,可以在创建表时设置,或在创建表后更改设置 语法:auto_increment = 起始值 #在创建完表后,修改自增字段的起始值 mysql> create table student( -> id int primary...

avz72927的博客 389

MySQL外键约束-foreign key

一、什么是外键? 外键也称之为外键约束 : 关键字foreign key 外键:外面的键,一张表的一个字段(非主键)指向另外一个表的主键, 那么该字段就称之为外键。 外键所在的表称之为子表(附表);外键所指向的主键所在的表称之为父表(主表) 二、如何加外键 将一个表的字段与另外一张表的主键进行关联(实体与实体之间的联系) mysql> CREATE TABLE person ( id int NOT NULL AUTO_INCREMENT,name varchar(...

cj_eryue的博客 1万+

mysql外键的使用foreign key

一般来说,哪张表添加了外键约束foreign key,哪张表就是子表,而关键字references后面跟的就是主表。3、有表,有数据但没有外键的情况下添加外键:要注意,要选定作为外键列的数据和对应主表列的数据相匹配。2、有空表,有外键约束的情况下插入数据:要先给主表插入数据,在给子表插入数据。创建/添加外键约束,外键约束的名字是系统生成的,需要注意,而且我们再创建活添加的时候不需要给外键约束取名。cascade 同步主表动作,主表删除,子表同步删除,主表更新,子表也跟着更新。

qq_36961508的博客 1324

foreign key options mysql外键_MySQL 关闭子表的外键约束检察方法

准备:定义一个教师表、一个学生表;在学生表中引用教师表IDcreate table teachers(teacherID int not null auto_increment primary key,teacherName varchar(8));create table students(studentID int not null auto_increment primary key,tea...

weixin_32342535的博客 143

SET FOREIGN_KEY_CHECKS=0;在Mysql中取消外键约束

在MySQL中删除一张表或一条数据的时候,出现 [Err] 1451 -Cannot delete or update a parent row: a foreign key constraint fails (...) 这是因为MySQL中设置了foreign key关联,造成无法更新或删除数据。可以通过设置FOREIGN_KEY_CHECKS变量来避免这种情况。 我们可以使用 ...

HelloWorld的专栏 9662
上一篇: 深入理解Android的startservice和bindservice
下一篇: mysql外键(FOREIGN KEY)的简单使用
lcathm
博客等级 码龄18年 37粉丝 44原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值