본문 바로가기
Database/MariaDB

[MariaDB; 마리아디비] foreign key ( 외래키 ) 추가 / 삭제 / 확인

by daddydontsleep 2024. 1. 30.
728x90
728x90

사진: Unsplash 의 Joshua Peacock

추가

- foreign key 추가

ALTER TABLE [테이블명] ADD CONSTRAINT [제약조건명] FOREIGN KEY(컬럼)
REFERENCES [관련_테이블명](PK컬럼) [ON DELETE CASCADE / ON UPDATE CASCADE];

<예시>

ALTER TABLE orders
ADD CONSTRAINT fk_orders_customer
FOREIGN KEY (customer_id)
REFERENCES customers(id);

ON DELETE CASCADE

  • "ON DELETE CASCADE" 옵션은 외래 키를 가진 테이블에서 행이 삭제될 때 연관된 행도 함께 삭제됩니다.
  • 예를 들어, "orders" 테이블에 "customer_id"라는 외래 키가 있고, "customers" 테이블의 "id" 열을 참조한다고 가정해 봅시다.
  • "ON DELETE CASCADE" 옵션을 사용하면 "customers" 테이블에서 특정 고객의 행을 삭제하면, "orders" 테이블에서 해당 고객의 주문 행도 자동으로 삭제됩니다.

ON UPDATE CASCADE

  • "ON UPDATE CASCADE" 옵션은 외래 키를 가진 테이블에서 행이 업데이트될 때 연관된 행도 자동으로 업데이트됩니다.
  • 예를 들어, "customers" 테이블에서 고객의 "id" 값을 변경한다고 가정해 봅시다.
  • "ON UPDATE CASCADE" 옵션을 사용하면 "customers" 테이블의 해당 고객의 "id" 값을 업데이트하면, "orders" 테이블에서도 해당 고객의 주문 행의 외래 키 값이 자동으로 업데이트됩니다.

삭제

  • 외래 키 제약 조건 확인
    - 먼저, 어떤 테이블에서 외래 키를 삭제할지 확인합니다.
    - 해당 테이블에 있는 외래 키 제약 조건의 이름을 알아야 합니다.
  • 외래 키 제약 조건 삭제
    - ALTER TABLE 문을 사용하여 외래 키 제약 조건을 삭제할 수 있습니다.
ALTER TABLE 테이블명
DROP FOREIGN KEY 외래키_제약조건_이름;

<예시>

ALTER TABLE orders
DROP FOREIGN KEY fk_orders_customer;

확인

  • 테이블 구조 확인
    - 먼저, 외래 키를 확인하려는 테이블의 구조를 확인합니다.
    - 이를 위해 DESCRIBE 문이나 SHOW CREATE TABLE 문을 사용할 수 있습니다.
DESCRIBE 테이블명;
SHOW CREATE TABLE 테이블명;
  • 외래 키 정보 확인
    - 테이블의 구조를 확인한 후, 외래 키 정보를 확인합니다.
    - DESCRIBE 문이나 SHOW CREATE TABLE 문에서 외래 키 제약 조건과 관련된 정보를 찾을 수 있습니다.
  • 정보 스키마 쿼리 사용
    - 데이터베이스 시스템에 따라 INFORMATION_SCHEMA 데이터베이스를 사용하여 외래 키 정보를 확인할 수도 있습니다.
    - INFORMATION_SCHEMA 데이터베이스에는 데이터베이스, 테이블, 열 등의 메타데이터가 저장되어 있습니다.
    - INFORMATION_SCHEMA 데이터베이스의 TABLE_CONSTRAINTS 또는 KEY_COLUMN_USAGE 테이블을 쿼리 하여 외래 키 정보를 확인할 수 있습니다.
SELECT *
FROM information_schema.table_constraints
WHERE table_name = '테이블명';

SELECT *
FROM information_schema.table_constraints
WHERE constraint_schema = '데이터베이스명';

CONSTRAINT_CATALOG: 제약 조건이 속한 카탈로그의 이름
CONSTRAINT_SCHEMA: 제약 조건이 속한 스키마의 이름
CONSTRAINT_NAME: 제약 조건의 이름
TABLE_CATALOG: 테이블이 속한 카탈로그의 이름
TABLE_SCHEMA: 테이블이 속한 스키마의 이름
TABLE_NAME: 테이블의 이름
CONSTRAINT_TYPE: 제약 조건의 유형 (예: FOREIGN KEY, PRIMARY KEY, UNIQUE 등)
IS_DEFERRABLE: 제약 조건이 지연 가능한지 여부
INITIALLY_DEFERRED: 제약 조건이 초기에 지연된 상태인지 여부

끝.

728x90
300x250