데이터 베이스 MySQL 튜토리얼 MySQL的外键约束级联删除

MySQL的外键约束级联删除

Jun 07, 2016 pm 03:08 PM
linux mysql 삭제 외래 키 강제 종속 입력하다

欢迎进入Linux社区论坛,与200万技术人员互动交流 >>进入 在更新数据库时使用外键约束 第一个表存储一些简单博客数据,而第二个表则存放这些博客的有关评论。这例子的巧妙之处在于,它给子表定义了一个外键约束,从而允许我们在博客文章被删除时自动地删除有

欢迎进入Linux社区论坛,与200万技术人员互动交流 >>进入

  在更新数据库时使用外键约束

  第一个表存储一些简单博客数据,而第二个表则存放这些博客的有关评论。这例子的巧妙之处在于,它给子表定义了一个外键约束,从而允许我们在博客文章被删除时自动地删除有关的所有评论。下面给出这两个表的定义,它们建立了一个一对多的关系:

  01

  DROP   TABLE   IF   EXISTS  `test`.`blogs`;

  02

  03

  CREATE   TABLE  `test`.`blogs` (

  04

  05

  `id`  INT ( 10 ) UNSIGNED AUTO_INCREMENT,

  06

  07

  `title`  TEXT ,

  08

  09

  `content`  TEXT ,

  10

  11

  `author`  VARCHAR ( 45 )  DEFAULT   NULL ,

  12

  13

  PRIMARY   KEY  (`id`)

  14

  15

  ) ENGINE = InnoDB  DEFAULT  CHARSET = utf8;

  16

  17

  18

  19

  DROP   TABLE   IF   EXISTS  `test`.`comments`;

  20

  21

  CREATE   TABLE  `test`.`comments` (

  22

  23

  `id`  INT ( 10 ) UNSIGNED AUTO_INCREMENT,

  24

  25

  `blog_id`  INT ( 10 ) UNSIGNED  DEFAULT   NULL ,

  26

  27

  `comment`  TEXT ,

  28

  29

  `author`  VARCHAR ( 45 )  DEFAULT   NULL ,

  30

  31

  PRIMARY   KEY  (`id`),

  32

  33

  KEY  `blog_ind` (`blog_id`),

  34

  35

  CONSTRAINT  `comments_ibfk_1`  FOREIGN   KEY  (`blog_id`)  REFERENCES  `blogs` (`id`)  ON   UPDATE   CASCADE

  36

  37

  ) ENGINE = InnoDB  DEFAULT  CHARSET = utf8;

  除了给以上两个InnoDB表定义一些简单字段外,上述的代码还使用了一个外键约束,使得每当父表的“id”键更新时,表comments的相应内容也会级联更新。给父字段“id”定义约束的代码如下所示:

  1

  CONSTRAINT  `comments_ibfk_1`  FOREIGN   KEY  (`blog_id`)  REFERENCES  `blogs` (`id`)  ON   UPDATE   CASCADE

  InnoDB引擎除了可以规定根据父表完成的操作对子表进行的级联更新以外,还可以执行其他的操作,包括“NO ACTION”和“RESTRICT”,这样即使父表发生更新或者删除操作,也不会引起对子表的任何操作。

  现在,根据上面的MySQL表的定义,填充如下所示的数据:

  1

  INSERT   INTO  blogs (id, title, content, author)  VALUES  ( NULL , ' Title of the first blog entry ' ,  ' Content of the first blog entry ' ,  ' Tom ' )

  2

  3

  INSERT   INTO  comments (id, blog_id, comment, author)  VALUES  ( NULL ,  1 ,  ' Commenting first blog entry ' ,  ' Susan Norton ' ), ( NULL ,  1 ,  ' Commenting first blog entry ' ,  ' Rose ' )

  然后,由于某种原因,我们更新了第一个博客数据,那么只要运行下列SQL语句,与该博客文章有关的所有评论也会随之自动更新:

  UPDATE  blogs  SET  id  =   2 , title  =   ' Title of the first blog entry ' , content  =   ' Content of the first blog entry ' , author  =   ' John Doe '   WHERE  id  =   1

  这看起来非常不错,对吧?前面讲过,外键约束容许您将表之间的关系的维护工作委托给数据库层,这意味着编写与数据层交互的应用程序时可以省去不少的代码。

[1] [2] [3] 

MySQL的外键约束级联删除

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

뜨거운 기사 태그

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

DeepSeek 웹 버전 입구 DeepSeek 공식 웹 사이트 입구 DeepSeek 웹 버전 입구 DeepSeek 공식 웹 사이트 입구 Feb 19, 2025 pm 04:54 PM

DeepSeek 웹 버전 입구 DeepSeek 공식 웹 사이트 입구

Android TV Box, 비공식 Ubuntu 24.04 업그레이드 제공 Android TV Box, 비공식 Ubuntu 24.04 업그레이드 제공 Sep 05, 2024 am 06:33 AM

Android TV Box, 비공식 Ubuntu 24.04 업그레이드 제공

DeepSeek을 설치하는 방법 DeepSeek을 설치하는 방법 Feb 19, 2025 pm 05:48 PM

DeepSeek을 설치하는 방법

MySQL 8.4에서 mysql_native_password가 로드되지 않음 오류를 수정하는 방법 MySQL 8.4에서 mysql_native_password가 로드되지 않음 오류를 수정하는 방법 Dec 09, 2024 am 11:42 AM

MySQL 8.4에서 mysql_native_password가 로드되지 않음 오류를 수정하는 방법

BitPie Bitpie 지갑 앱 다운로드 주소 BitPie Bitpie 지갑 앱 다운로드 주소 Sep 10, 2024 pm 12:10 PM

BitPie Bitpie 지갑 앱 다운로드 주소

Bitget 공식 웹 사이트 설치 (2025 초보자 안내서) Bitget 공식 웹 사이트 설치 (2025 초보자 안내서) Feb 21, 2025 pm 08:42 PM

Bitget 공식 웹 사이트 설치 (2025 초보자 안내서)

Zabbix 3.4 소스 코드 컴파일 설치 Zabbix 3.4 소스 코드 컴파일 설치 Sep 04, 2024 am 07:32 AM

Zabbix 3.4 소스 코드 컴파일 설치

자세한 설명: 쉘 스크립트 변수 판단 매개변수 명령 자세한 설명: 쉘 스크립트 변수 판단 매개변수 명령 Sep 02, 2024 pm 03:25 PM

자세한 설명: 쉘 스크립트 변수 판단 매개변수 명령

See all articles