MySQL 외래 키는 제약 조건 역할을 하며 데이터베이스 수준에서 데이터 무결성을 보장합니다.
예를 들어 CASCADE(계단 연결) 유형의 외래 키를 사용하면 하위 테이블(예: user_info)이 상위 테이블(예: user)과 연결될 때 상위 테이블이 업데이트되거나 삭제되면 하위 테이블이 레코드를 업데이트하거나 삭제합니다. 이 프로세스는 데이터베이스 수준에서 완료됩니다.
초기 엔터프라이즈 시스템에는 많은 데이터베이스 설계가 있습니다. 프로그래머가 삭제 및 업데이트 작업을 절약하는 데 도움이 되지만 실제로는 숨겨진 규칙이 증가하고 소프트웨어 복잡성이 증가하며 성능이 저하됩니다.
따라서 애플리케이션 설계에서는 데이터베이스 수준이 아닌 애플리케이션 계층(예: 트랜잭션 처리 메커니즘 사용)에서 데이터 무결성을 보장하기 위해 최선을 다해야 합니다.
다음은 MySQL의 외래키에 대한 소개입니다.
MySQL에서 외래 키를 지원하는 유일한 스토리지 엔진은 InnoDB입니다. 외래 키를 생성할 때 부모 테이블에 해당 색인이 있어야 합니다. 하위 테이블도 자동으로 생성됩니다. 외래 키를 생성할 때 해당 인덱스.
인덱스를 생성할 때
RESTRICT(제한 제한)
NO ACTION
SET NULL을 포함하여 상위 테이블을 삭제하거나 업데이트할 때 하위 테이블에서 수행할 해당 작업을 지정할 수 있습니다.
CASCADE(연결)
RESTRICT는 NO ACTION과 동일합니다. 즉, 하위 테이블에 연결된 레코드가 있으면 상위 테이블을 업데이트할 수 없습니다.
CASCADE는 상위 테이블을 의미합니다. 업데이트 또는 삭제됨 하위 테이블의 해당 레코드를 업데이트 또는 삭제하는 경우
SET NULL은 상위 테이블이 업데이트되거나 삭제될 때 하위 테이블의 해당 필드가 SET NULL임을 의미합니다.
InnoDB 엔진만이 외래 키 사용을 허용하므로 데이터 테이블은 InnoDB 엔진을 사용해야 합니다.
데이터베이스 생성:
Create database test;
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');
참고: sc 테이블에 데이터를 삽입할 때 If sid가 삽입된 경우 22이면 외래 키 sid
가 stu 테이블의 id 기본 키에서 나오므로 외래 키 제약 조건을 위반하여 삽입이 실패합니다. 즉, stu의 id에는 22와 같은 데이터가 없습니다.
캐스케이드 삭제: stu 테이블에서 ID가 2인 학생을 삭제하면 sc 테이블의 학생 성적도 계단식 삭제됩니다.
delete from stu where sid = '2';
캐스케이드 업데이트: stu 테이블에서 ID가 3인 학생이 다음으로 변경됩니다. id는 6이고, sc 테이블에 있는 학생의 해당 id도 업데이트됩니다. cascade
update stu set sid=6 where sid='3';
Note
테이블 삭제 시 외래키 테이블(sc)을 먼저 삭제한 후 삭제해야 합니다. 기본 키 테이블(stu)
위 그림은 외래 키 제약 조건 위반으로 삭제할 수 없음을 보여줍니다.
위 그림은 sc 테이블을 먼저 삭제한 다음 stu 테이블을 삭제하는 정상적인 모습입니다.
위 내용은 MySQL 외래 키 캐스케이드 구현 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!