테이블 관계를 설정하기 위해 "Cascade", "Set Null" 및 "Restrict"는 무엇을 합니까?
새로운 프로젝트에서 테이블 관계를 사용하기 시작하고 싶습니다.
구글 검색 후 InnoDB로 2개의 테이블을 설정했습니다.
링크하는 키는 다음과 같습니다.
->users->userid(프라이머리)->userid(인덱스)
이 프로세스에서 유일하게 이해할 수 없는 것은 "업데이트 시"와 "삭제 시"에 대한 다양한 설정이 수행하는 작업입니다.
옵션은 다음과 같습니다.
- --(아무것도 없어?)
- 캐스케이드(?))
- [Set Null] (모든 것을 [Null]로 설정)
- 액션 없음(글쎄요...)
- 제한(--?))
기본적으로 사용자가 완전히 삭제되었을 때 세션의 데이터를 삭제합니다. 세션은 만료가 세션 매니저에 의해 감지되었을 때만 삭제되므로...
그래서 이 옵션들이 어떤 역할을 하는지 알려주시면 감사하겠습니다.
CASCADE
는 부모 변경 시 변경을 전파합니다.( 행을 삭제하면 해당 행을 참조하는 구속 테이블 내의 행도 삭제됩니다).
SET NULL
부모 행이 없어지면 컬럼 값을 NULL로 설정합니다.
RESTRICT
부모행의 DELETE 시행이 실패하게 됩니다.
편집: 질문하지 않았지만 SQL 표준에서는 다음 두 가지 작업을 정의하고 있습니다.SET DEFAULT
그리고.NO ACTION
MySQL에서는NO ACTION
와 동등하다RESTRICT
(일부 DBMS에서는NO ACTION
는 지연된 체크이지만 MySQL에서는 모든 체크가 즉시 이루어집니다.)MySQL 파서는SET DEFAULT
단, InnoDB 엔진과 NDB 엔진 모두 이러한 문을 거부합니다.SET DEFAULT
실제로는 어느 쪽에도 사용할 수 없다ON UPDATE
또는ON DELETE
제약이 있습니다.
또한 캐스케이드 외부 키 액션은 MySQL에서 트리거를 활성화하지 않습니다.
외부 키를 포함하는 테이블을 참조 또는 자녀 테이블이라고 하며 후보 키를 포함하는 테이블을 참조 또는 부모 테이블이라고 합니다.
Set NULL : 부모 테이블 행을 삭제할 때 컬럼 값을 NULL로 설정합니다.
CASCADE : 부모 변경 시 변경이 전파됩니다.행을 삭제하면 해당 행을 참조하는 구속 테이블 내의 행도 삭제됩니다.
RESTRICT : RESTRICT를 지정하면 부모 행의 값을 참조하는 자녀 행이 존재하는 경우 해당 부모 행을 삭제할 수 없습니다.
No Action : No Action과 RESTRICT는 매우 유사합니다.참조된 테이블에서 UPDATE 또는 DELETE 스테이트먼트가 실행되면 DBMS는 스테이트먼트 실행이 끝날 때 참조 관계를 위반하지 않았는지 확인합니다.짧은 자식 행의 경우 부모 행이 삭제되거나 업데이트될 염려가 없습니다.
언급URL : https://stackoverflow.com/questions/5383612/setting-up-table-relations-what-do-cascade-set-null-and-restrict-do
'it-source' 카테고리의 다른 글
org.postgresql.displays.displayPSQLException:FATAL:죄송합니다.이미 클라이언트가 너무 많습니다. (0) | 2023.01.15 |
---|---|
라라벨 오더 반응 속도를 크게 늦춤으로써 (0) | 2023.01.15 |
Java 8: Java.util.function의 TriFunction(및 kin)은 어디에 있습니까?아니면 대체방법이 뭐죠? (0) | 2023.01.15 |
n번째 문자마다 문자열을 분할하시겠습니까? (0) | 2023.01.15 |
SQL에서 GROUP BY와 ORDER BY의 차이점은 무엇입니까? (0) | 2023.01.15 |