在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(跟随外键改动)c
SET NULL(设空值)
SET DEFAULT(设默认值)
NO ACTION(无动作,默认的)
搞个例子,简单演示一下使用,做dage和xiaodi两个表,大哥表是主键,小弟表是外键:
建表:
CREATE TABLE `dage` (
`id` int ( 11 ) NOT NULL auto_increment,
`name` varchar ( 32 ) default '' ,
PRIMARY KEY (`id`)
) ENGINE = InnoDB DEFAULT CHARSET = latin1;
CREATE TABLE `xiaodi` (
`id` int ( 11 ) NOT NULL auto_increment,
`dage_id` int ( 11 ) default NULL ,
`name` varchar ( 32 ) default '' ,
PRIMARY KEY (`id`),
KEY `dage_id` (`dage_id`),
CONSTRAINT `xiaodi_ibfk_1` FOREIGN KEY (`dage_id`) REFERENCES `dage` (`id`)
) 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`))
提示:小子,想造反呀!你还没大哥呢!
把外键约束增加事件触发限制:
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了呢!
例子说明的应该蛮清楚了吧,其他功能对应手册自己实践吧!:-)
转自: http://www.cppblog.com/wolf/articles/69089.html
分享到:
相关推荐
标题中的"S7-1200 PLC_1212C DCDCRLY"指的是西门子S7-1200系列中的1212C型号可编程逻辑控制器(PLC),配合直流直流继电器模块(DCDCRLY)。这款控制器是工业自动化领域常用的设备,用于控制和监测生产过程、机械...
根据提供的文件信息,“SX1212中文数据手册.pdf”主要涵盖了SX1212这款芯片的相关技术细节。为了更好地理解和应用SX1212,下面将从几个方面详细介绍其核心知识点。 ### 一、SX1212概述 #### 1.1 芯片简介 SX1212是...
在本案例中,我们讨论的是一个名为"adc.rar"的压缩包,其中包含了与ADC相关的多个文件,如"adc0时钟"、"adc1212.com"、"adc1212com"、"adcbeh.com"以及可能指向更多资源的"www.adc1212.com"。 首先,"adc0时钟"可能...
在这个特定的场景中,我们关注的是一个名为"CPU 1212C ACDCRLY 6ES7212-1BE40-0XB0"的固件更新,版本号为V4.6.1。这是一款西门子(Siemens)SIMATIC S7-1200系列的控制器固件。 SIMATIC S7-1200系列是西门子推出的...
标题 "S7-1200PLC_1212C DCDCDC_CAD图纸(DWG格式).rar" 提供的信息是关于西门子S7-1200系列PLC的一个具体型号——S7-1212C的CAD设计图纸,这些图纸以DWG格式存储在RAR压缩包中。描述进一步确认了内容,即包含S7-...
标题中的"固件-S7-1212C-DCDCRLY-6ES7-212-1HE40-0XB0-V4.6.0.zip" 提及的固件是为西门子S7-1212C PLC(可编程逻辑控制器)设计的。S7-1212C属于西门子SIMATIC系列,是一款紧凑型PLC,广泛应用于工业自动化中的各种...
标题中的“固件_S7-1212C_DCDCDC_6ES7212-1AE40-0XB0_V4.5.2.rar”指的是西门子S7-1212C系列PLC(可编程逻辑控制器)的固件升级包。这个固件版本为V4.5.2,型号6ES7212-1AE40-0XB0,是西门子SIMATIC产品线的一部分。...
标题中的"S7-1200 PLC_1212C ACDCRLY"指的是西门子S7-1200系列中的1212C型号PLC(可编程逻辑控制器),它是一款紧凑型的工业自动化控制设备,广泛应用于各种工业控制系统中。"ACDCRLY"可能是对PLC输入/输出模块特性...
标题中的“固件_S7-1212C_DCDCDC_6ES7212-1AE40-0XB0(V4.2.1-V4.5.2).rar”揭示了这个压缩包是关于Siemens S7-1212C PLC(可编程逻辑控制器)的固件更新。S7-1212C是Siemens公司生产的一款紧凑型PLC,广泛应用于...
在本文中,我们将深入探讨“CPU 1212C DCDCRLY 6ES7212-1HE40-0XB0 V4.6.1版本”的固件更新,这是西门子SIMATIC S7-1200系列PLC(可编程逻辑控制器)的一个关键组件。 CPU 1212C是西门子SIMATIC S7-1200系列中的一...
科蒂斯1212S电机控制器是面向电动车辆设计的一种高度精密的电机转速控制器。它通过向永磁驱动电机提供精确而平稳的控制,从而优化车辆的驱动性能。该控制器适用于托盘搬运车等相关应用。1212S控制器由Curtis ...
标题中的“sx1212参考设计.zip”指的是一个关于sx1212无线收发芯片的参考资料包,其中包含了该芯片的详细设计和实现。 sx1212是一款超低功耗的无线通信芯片,广泛应用于物联网(IoT)设备、远程传感器网络和低功耗蓝牙...
### 高性能射频芯片SX1212关键知识点解析 #### 一、概述 SX1212是一款高性能的单芯片收发器,工作频率范围覆盖300MHz至510MHz,专为超低功耗设计。该芯片在接收模式下的电流消耗仅为3mA,具有极高的能效比。SX1212...
sx1212是一款专为超低功耗无线通信设计的高性能芯片,广泛应用于物联网、远程传感器网络和无线控制等领域。这款芯片具有优秀的射频性能和极低的电流消耗,使其成为电池供电设备的理想选择。在本参考资料中,我们将...
标题中的“固件-S7-1212C-DCDCDC-6ES7212-1AE40-0XB0-V4.6.0.zip”表明这是一个与西门子S7-1212C PLC(可编程逻辑控制器)相关的固件更新包。固件是设备或系统的底层软件,它控制硬件的操作并提供基本的服务,对于...
标题提到的"CPU 1212C DCDCDC 6ES7212-1AE40-0XB0 V4.6.1版本"是西门子SIMATIC系列的一款PLC(可编程逻辑控制器)的CPU模块,适用于自动化系统,是工业控制的核心部件。 CPU 1212C是西门子S7-1200系列PLC的一个型号...
标题中的“固件_S7-1212C_DCDCRLY_6ES7_212-1HE40-0XB0(V4.2.1-V4.5.2).rar”指的是西门子S7-1212C系列PLC的固件更新包,具体型号为6ES7 212-1HE40-0XB0,版本号涵盖了从V4.2.1到V4.5.2的范围。固件是设备或系统的...
SX1212是一款高性能的LoRa调制解调器,由Semtech公司设计,用于长距离、低功耗的无线通信应用。这个开发资料压缩包包含了一系列与SX1212开发相关的资源,帮助开发者深入理解和高效使用该芯片。 首先,"SX1212中文...
标题与描述概述的知识点主要集中在高精度、宽动态范围的模拟到数字转换器(ADC)——ADS1212和ADS1213上。这两款芯片被设计用于需要高分辨率测量的应用场景,如智能变送器、工业过程控制、称重秤、色谱分析以及便携...
UTC1212无线模块是一款在物联网应用中广泛使用的通信组件,主要负责提供无线数据传输功能。本文档将深入解析该模块的特性和使用方法,帮助用户更好地理解和操作这一技术。 UTC1212无线模块的主要特点包括: 1. **...