MySQL 외래 키 캐스케이드 구현 방법

WBOY
풀어 주다: 2023-05-29 21:49:45
앞으로
1391명이 탐색했습니다.

소개

MySQL 외래 키는 제약 조건 역할을 하며 데이터베이스 수준에서 데이터 무결성을 보장합니다.
예를 들어 CASCADE(계단 연결) 유형의 외래 키를 사용하면 하위 테이블(예: user_info)이 상위 테이블(예: user)과 연결될 때 상위 테이블이 업데이트되거나 삭제되면 하위 테이블이 레코드를 업데이트하거나 삭제합니다. 이 프로세스는 데이터베이스 수준에서 완료됩니다.
초기 엔터프라이즈 시스템에는 많은 데이터베이스 설계가 있습니다. 프로그래머가 삭제 및 업데이트 작업을 절약하는 데 도움이 되지만 실제로는 숨겨진 규칙이 증가하고 소프트웨어 복잡성이 증가하며 성능이 저하됩니다.

따라서 애플리케이션 설계에서는 데이터베이스 수준이 아닌 애플리케이션 계층(예: 트랜잭션 처리 메커니즘 사용)에서 데이터 무결성을 보장하기 위해 최선을 다해야 합니다.

다음은 MySQL의 외래키에 대한 소개입니다.

MySQL에서 외래 키를 지원하는 유일한 스토리지 엔진은 InnoDB입니다. 외래 키를 생성할 때 부모 테이블에 해당 색인이 있어야 합니다. 하위 테이블도 자동으로 생성됩니다. 외래 키를 생성할 때 해당 인덱스.

인덱스를 생성할 때

  • RESTRICT(제한 제한)

  • NO ACTION

  • SET NULL을 포함하여 상위 테이블을 삭제하거나 업데이트할 때 하위 테이블에서 수행할 해당 작업을 지정할 수 있습니다.

  • CASCADE(연결)

RESTRICT는 NO ACTION과 동일합니다. 즉, 하위 테이블에 연결된 레코드가 있으면 상위 테이블을 업데이트할 수 없습니다.
CASCADE는 상위 테이블을 의미합니다. 업데이트 또는 삭제됨 하위 테이블의 해당 레코드를 업데이트 또는 삭제하는 경우
SET NULL은 상위 테이블이 업데이트되거나 삭제될 때 하위 테이블의 해당 필드가 SET NULL임을 의미합니다.

Example

InnoDB 엔진만이 외래 키 사용을 허용하므로 데이터 테이블은 InnoDB 엔진을 사용해야 합니다.

데이터베이스 생성:

Create database test;
로그인 후 복사

1. 먼저 두 개의 테이블 stu, sc

create table stu(
sid int UNSIGNED primary key auto_increment,
name varchar(20) not null)
TYPE=InnoDB charset=utf8;

create table sc(
scid int UNSIGNED primary key auto_increment,
sid int UNSIGNED not null,
score varchar(20) default '0',
index (sid),   --外键必须加索引
FOREIGN KEY (sid) REFERENCES stu(sid) ON DELETE CASCADE ON UPDATE CASCADE)
TYPE=InnoDB charset=utf8;
로그인 후 복사

– 참고: 외래 키를 색인화해야 합니다.

FOREIGN 키(sid) 외래 키를 설정하고 sid를 외래 키로 설정합니다. REFERENCES stu(sid) 참조 함수입니다. stu 테이블의 sid를 참조하세요

ON DELETE CASCADE cascade delete

ON UPDATE CASCADE cascade update


2. 두 테이블에 데이터를 삽입하세요

insert into stu (name) value ('zxf');
insert into stu (name) value ('ls');
insert into stu (name) value ('zs');
insert into stu (name) value ('ww');

insert into sc(sid,score) values ('1','98');
insert into sc(sid,score) values ('1','98');
insert into sc(sid,score) values ('2','34');
insert into sc(sid,score) values ('2','98');
insert into sc(sid,score) values ('2','98');
insert into sc(sid,score) values ('3','56');
insert into sc(sid,score) values ('4','78');
insert into sc(sid,score) values ('4','98');
로그인 후 복사

MySQL 외래 키 캐스케이드 구현 방법참고: sc 테이블에 데이터를 삽입할 때 If sid가 삽입된 경우 22이면 외래 키 sid

가 stu 테이블의 id 기본 키에서 나오므로 외래 키 제약 조건을 위반하여 삽입이 실패합니다. 즉, stu의 id에는 22와 같은 데이터가 없습니다.


캐스케이드 삭제: stu 테이블에서 ID가 2인 학생을 삭제하면 sc 테이블의 학생 성적도 계단식 삭제됩니다.

delete from stu where sid = '2';
로그인 후 복사

MySQL 외래 키 캐스케이드 구현 방법캐스케이드 업데이트: stu 테이블에서 ID가 3인 학생이 다음으로 변경됩니다. id는 6이고, sc 테이블에 있는 학생의 해당 id도 업데이트됩니다. cascade

update stu set sid=6 where sid='3';
로그인 후 복사

MySQL 외래 키 캐스케이드 구현 방법Note

테이블 삭제 시 외래키 테이블(sc)을 먼저 삭제한 후 삭제해야 합니다. 기본 키 테이블(stu)

MySQL 외래 키 캐스케이드 구현 방법위 그림은 외래 키 제약 조건 위반으로 삭제할 수 없음을 보여줍니다.

MySQL 외래 키 캐스케이드 구현 방법위 그림은 sc 테이블을 먼저 삭제한 다음 stu 테이블을 삭제하는 정상적인 모습입니다.

위 내용은 MySQL 외래 키 캐스케이드 구현 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:yisu.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!