it-source

테이블 관계를 설정하기 위해 "Cascade", "Set Null" 및 "Restrict"는 무엇을 합니까?

criticalcode 2023. 1. 15. 16:57
반응형

테이블 관계를 설정하기 위해 "Cascade", "Set Null" 및 "Restrict"는 무엇을 합니까?

새로운 프로젝트에서 테이블 관계를 사용하기 시작하고 싶습니다.

구글 검색 후 InnoDB로 2개의 테이블을 설정했습니다.

링크하는 키는 다음과 같습니다.

->users->userid(프라이머리)->userid(인덱스)

이 프로세스에서 유일하게 이해할 수 없는 것은 "업데이트 시"와 "삭제 시"에 대한 다양한 설정이 수행하는 작업입니다.

옵션은 다음과 같습니다.

  • --(아무것도 없어?)
  • 캐스케이드(?))
  • [Set Null] (모든 것을 [Null]로 설정)
  • 액션 없음(글쎄요...)
  • 제한(--?))

기본적으로 사용자가 완전히 삭제되었을 때 세션의 데이터를 삭제합니다. 세션은 만료가 세션 매니저에 의해 감지되었을 때만 삭제되므로...

그래서 이 옵션들이 어떤 역할을 하는지 알려주시면 감사하겠습니다.

CASCADE는 부모 변경 시 변경을 전파합니다.( 행을 삭제하면 해당 행을 참조하는 구속 테이블 내의 행도 삭제됩니다).

SET NULL부모 행이 없어지면 컬럼 값을 NULL로 설정합니다.

RESTRICT부모행의 DELETE 시행이 실패하게 됩니다.

편집: 질문하지 않았지만 SQL 표준에서는 다음 두 가지 작업을 정의하고 있습니다.SET DEFAULT그리고.NO ACTIONMySQL에서는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

반응형