MySQL에서 외래 키의 역할 이해

coldplay.xixi
풀어 주다: 2020-08-31 16:59:36
앞으로
2465명이 탐색했습니다.

MySQL에서 외래 키의 역할 이해

【관련 학습 권장 사항:mysql 학습

MySQL 외래 키의 역할:

데이터 일관성과 무결성을 유지하는 것이 주요 목적입니다. 외래 키 테이블 데이터. 두 테이블을 연결하려면 외래 키는 테이블의 열 값만 참조하면 됩니다!

두 개의 테이블을 만들어 보겠습니다

CREATE TABLE `example1` ( `stu_id` int(11) NOT NULL DEFAULT '0', `course_id` int(11) NOT NULL DEFAULT '0', `grade` float DEFAULT NULL, PRIMARY KEY (`stu_id`,`course_id`) ); CREATE TABLE `example2` ( `id` int(11) NOT NULL, `stu_id` int(11) DEFAULT NULL, `course_id` int(11) DEFAULT NULL, PRIMARY KEY (`id`), KEY `f_ck` (`stu_id`,`course_id`), CONSTRAINT `f_ck` FOREIGN KEY (`stu_id`, `course_id`) REFERENCES `example1` (`stu_id`, `course_id`) ); insert into example1 (stu_id,course_id,grade)values(1,1,98.5),(2,2,89); insert into example2 (id,stu_id,course_id)values(1,1,1),(2,2,2);
로그인 후 복사

stu_id 학생 번호,course_id 과목 번호, 성적 점수가 포함된

example1 테이블을 만들었습니다. id, stu_id 학생 번호,course_id 과목 번호가 포함된

example2 테이블을 만든 다음 생성합니다. 외래 키

를 입력하고 두 테이블에 각각 데이터를 삽입합니다.

example2 테이블의 외래 키인 stu_id 및course_id를 호출합니다. example1은 상위 테이블이고 example2는 단어 테이블입니다. 단어 테이블의 데이터는 해당 데이터보다 먼저 삭제되어야 합니다.

이제 예제1에서 데이터를 삭제해 보겠습니다.

delete from example1 where stu_id=2;
로그인 후 복사

오류가 발생합니다.

ERROR 1451 (23000): 상위 행을 삭제하거나 업데이트할 수 없습니다. 외래 키 제약 조건이 실패합니다(`테스트). `.`example3`, CONSTRAINT `f_ck ` FOREIGN KEY (`stu_id`, `course_id`) REFERENCES `example2` (`stu_id`, `course_id`))

example2의 데이터는 example1의 데이터와 연결되어 있으므로, 삭제할 수 없으며 외래 키에 도달함 Function;

그런 다음 example2 테이블의 데이터를 먼저 삭제한 다음 example1 테이블의 데이터를 삭제합니다.

delete from example2 where stu_id=2;
stu_id=2인 example1에서 삭제;

성공했습니다.

이벤트 트리거 제한 사항:

삭제 및 업데이트 시 매개변수 계단식 설정(외래 키 변경 사항 준수), 제한(외부 키 변경 제한)을 설정할 수 있습니다. table) ), set Null(널 값 설정), set Default(기본값 설정), [default] 동작 없음

어떤 이벤트 트리거 제한이 있는지 살펴보겠습니다. . .

먼저 외래 키를 삭제한 다음 이벤트 트리거 제한을 적용하여 외래 키를 다시 설정합니다.

alter table example2 drop 외래 키 f_ck; alter table example2 add CONSTRAINT `f_ck` FOREIGN KEY (`stu_id`, `course_id`) REFERENCES `example1` (`stu_id`, `course_id`) ON DELETE CASCADE ON UPDATE CASCADE;

데이터를 먼저 확인해 보겠습니다

mysql> select * from example1;select * from example2;
+--------+-----------+-------+ | stu_id | course_id | grade | +--------+-----------+-------+ | 1 | 1 | 98.5 | +--------+-----------+-------+ 1 row in set (0.00 sec) +----+--------+-----------+ | id | stu_id | course_id | +----+--------+-----------+ | 1 | 1 | 1 | +----+--------+-----------+ 1 row in set (0.00 sec)
로그인 후 복사

이때 합계는 example1과 example2의 stu_id는 모두 1입니다.

example1 테이블의 데이터를 수정하고

update example1 set stu_id=3,course_id=3 where stu_id=1;

데이터를 다시 확인해 봅시다

mysql> ; example1에서 * 선택; example2에서 * 선택;
+--------+-----------+-------+ | stu_id | course_id | grade | +--------+-----------+-------+ | 3 | 3 | 98.5 | +--------+-----------+-------+ 1 row in set (0.00 sec) +----+--------+-----------+ | id | stu_id | course_id | +----+--------+-----------+ | 1 | 3 | 3 | +----+--------+-----------+ 1 row in set (0.00 sec)
로그인 후 복사

example1과 example2의 stu_id와course_id가 3이 된 것을 확인하셨나요?

example1 테이블의 데이터를 삭제하겠습니다

stu_id=인 example1에서 삭제합니다. 3;

삭제될 수 있으며, 예제 2의 데이터가 사라졌습니다.

사실 이는 데이터 일관성과 무결성을 유지하는 외래 키의 역할입니다. 함께 변경되는 것은 이벤트 트리거에 의해 결정됩니다.

관련 학습 권장 사항:프로그래밍 비디오

위 내용은 MySQL에서 외래 키의 역할 이해의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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