`
阅读更多

在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-1200PLC_1212C DCDCRLY_CAD图纸(DWG格式).rar

    标题中的"S7-1200 PLC_1212C DCDCRLY"指的是西门子S7-1200系列中的1212C型号可编程逻辑控制器(PLC),配合直流直流继电器模块(DCDCRLY)。这款控制器是工业自动化领域常用的设备,用于控制和监测生产过程、机械...

    SX1212中文数据手册.pdf

    根据提供的文件信息,“SX1212中文数据手册.pdf”主要涵盖了SX1212这款芯片的相关技术细节。为了更好地理解和应用SX1212,下面将从几个方面详细介绍其核心知识点。 ### 一、SX1212概述 #### 1.1 芯片简介 SX1212是...

    adc.rar_adc0时钟_adc1212.com_adc1212com_adcbeh.com_www.adc1212.com

    在本案例中,我们讨论的是一个名为"adc.rar"的压缩包,其中包含了与ADC相关的多个文件,如"adc0时钟"、"adc1212.com"、"adc1212com"、"adcbeh.com"以及可能指向更多资源的"www.adc1212.com"。 首先,"adc0时钟"可能...

    固件-CPU 1212C ACDCRLY 6ES7212-1BE40-0XB0 V4.6.1版本.zip

    在这个特定的场景中,我们关注的是一个名为"CPU 1212C ACDCRLY 6ES7212-1BE40-0XB0"的固件更新,版本号为V4.6.1。这是一款西门子(Siemens)SIMATIC S7-1200系列的控制器固件。 SIMATIC S7-1200系列是西门子推出的...

    S7-1200PLC_1212C DCDCDC_CAD图纸(DWG格式).rar

    标题 "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-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_DCDCDC_6ES7212-1AE40-0XB0_V4.5.2.rar”指的是西门子S7-1212C系列PLC(可编程逻辑控制器)的固件升级包。这个固件版本为V4.5.2,型号6ES7212-1AE40-0XB0,是西门子SIMATIC产品线的一部分。...

    S7-1200PLC_1212C ACDCRLY_CAD图纸(DWG格式).rar

    标题中的"S7-1200 PLC_1212C ACDCRLY"指的是西门子S7-1200系列中的1212C型号PLC(可编程逻辑控制器),它是一款紧凑型的工业自动化控制设备,广泛应用于各种工业控制系统中。"ACDCRLY"可能是对PLC输入/输出模块特性...

    固件_S7-1212C_DCDCDC_6ES7212-1AE40-0XB0(V4.2.1-V4.5.2).rar

    标题中的“固件_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版本.zip

    在本文中,我们将深入探讨“CPU 1212C DCDCRLY 6ES7212-1HE40-0XB0 V4.6.1版本”的固件更新,这是西门子SIMATIC S7-1200系列PLC(可编程逻辑控制器)的一个关键组件。 CPU 1212C是西门子SIMATIC S7-1200系列中的一...

    Curtis Electronic Motor Controller 1212S 操作手册中文版

    科蒂斯1212S电机控制器是面向电动车辆设计的一种高度精密的电机转速控制器。它通过向永磁驱动电机提供精确而平稳的控制,从而优化车辆的驱动性能。该控制器适用于托盘搬运车等相关应用。1212S控制器由Curtis ...

    sx1212参考设计.zip

    标题中的“sx1212参考设计.zip”指的是一个关于sx1212无线收发芯片的参考资料包,其中包含了该芯片的详细设计和实现。 sx1212是一款超低功耗的无线通信芯片,广泛应用于物联网(IoT)设备、远程传感器网络和低功耗蓝牙...

    高性能射频芯片sx1212

    ### 高性能射频芯片SX1212关键知识点解析 #### 一、概述 SX1212是一款高性能的单芯片收发器,工作频率范围覆盖300MHz至510MHz,专为超低功耗设计。该芯片在接收模式下的电流消耗仅为3mA,具有极高的能效比。SX1212...

    sx1212参考设计

    sx1212是一款专为超低功耗无线通信设计的高性能芯片,广泛应用于物联网、远程传感器网络和无线控制等领域。这款芯片具有优秀的射频性能和极低的电流消耗,使其成为电池供电设备的理想选择。在本参考资料中,我们将...

    固件-S7-1212C-DCDCDC-6ES7212-1AE40-0XB0-V4.6.0.zip

    标题中的“固件-S7-1212C-DCDCDC-6ES7212-1AE40-0XB0-V4.6.0.zip”表明这是一个与西门子S7-1212C PLC(可编程逻辑控制器)相关的固件更新包。固件是设备或系统的底层软件,它控制硬件的操作并提供基本的服务,对于...

    固件-CPU 1212C DCDCDC 6ES7212-1AE40-0XB0 V4.6.1版本.zip

    标题提到的"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_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开发资料,含中文手册,封装、官方驱动程序等

    SX1212是一款高性能的LoRa调制解调器,由Semtech公司设计,用于长距离、低功耗的无线通信应用。这个开发资料压缩包包含了一系列与SX1212开发相关的资源,帮助开发者深入理解和高效使用该芯片。 首先,"SX1212中文...

    ADS1212/13的说明

    标题与描述概述的知识点主要集中在高精度、宽动态范围的模拟到数字转换器(ADC)——ADS1212和ADS1213上。这两款芯片被设计用于需要高分辨率测量的应用场景,如智能变送器、工业过程控制、称重秤、色谱分析以及便携...

    utc1212无线模块文档说明

    UTC1212无线模块是一款在物联网应用中广泛使用的通信组件,主要负责提供无线数据传输功能。本文档将深入解析该模块的特性和使用方法,帮助用户更好地理解和操作这一技术。 UTC1212无线模块的主要特点包括: 1. **...

Global site tag (gtag.js) - Google Analytics