마케팅스프린트
[ GitHub ]

[ jungyijun@naver.com ]


  • Category
    • 마케팅 자동화
    • old posting
      • ChatGPT
      • Java
      • MySQL
      • JSP
      • Spring Framework
      • Node.js
Total
Today
Yesterday
hELLO · Designed By 정상우.
old posting/MySQL

[SQL] 제약조건(Constraint)

2021. 5. 31. 21:17
  • 제약조건(Constraint)
    • DBMS는 데이터의 무결성을 보장하기 위해, 잘못된 데이터가 저장되는 것을 방지하기 위해 사용한다.
    • 제약조건은 테이블의 컬럼에 설정하여 사용한다.
    • 해당 컬럼에 설정된 제약조건에 위배된 데이터가 들어오는 경우 에러가 발생한다.
  • 데이터 무결성(Integrity) : 저장된 데이터에는 잘못된 데이터가 없어야 한다.

 

  • 제약조건 종류
    • NOT NULL
      • 이 조건이 설정된 컬럼에는 NULL 입력 불가
    • UNIQUE
      • 이 조건이 설정된 컬럼에는 중복값 입력 불가
    • PRIMARY KEY
      • 테이블당 단 1개 설정 가능, 데이터의 유일성 보장 NOT NULL + UNIQUE의 의미
    • FOREIGN KEY
      • 다른 테이블의 컬럼을 참조해서 무결성 검사, 외래키 값은 NULL 혹은 참조할 수 있는 값이어야 한다.
    • CHECK
      • 설정된 값만 입력 허용
  • 무결성 종류
    • 릴레이션 : 테이블
    • 속성 : 컬럼
    • 튜플 : 레코드, row
    • 널 무결성
      • 릴레이션의 속성값이 NULL이 될 수 없다.
        • NOT NULL
    • 고유 무결성
      • 특정 속성에 속한 값은 서로 달라야 한다.
        • UNIQUE
        • NOT NULL
        • PRIMARY KEY
    • 참조 무결성
      • 외래키 값은 NULL 이거나, 참조 할 수 없는 외래키 값을 가질 수 없다.
        • FOREIGN KEY
    • 도메인 무결성
      • 특정 속성의 값은 그 속성이 정의된 도메인에 속한 값이어야 한다.
        • CHECK
        • DEFAULT
        • NOT NULL
    • 관계 무결성
      • 릴레이션
        • ON DELETE
        • ON UPDATE
    • 개체 무결성
      • PRIMARY KEY
  • 제약조건을 설정하는 방법
    1. 테이블 생성시 동시에 제약조건을 설정하는 방법
    2. 테이블 생성 후 제약조건을 추가하는 방법
  • 제약조건명
    • 제약조건을 활성화/비활성화 하는 등의 관리가 필요할 떄가 발생하는데 제약조건을 관리하려면 제약조건에 이름을 붙여서 관리해야한다.
      • CREATE TABLE test (name varchar2(10) CONSTRAINT test_name_pk PRIMARY KEY);
  • 제약조건 조회
    • 딕셔너리(Dictionary)
      • 스키마, 사용자, 객체, 권한, 롤, 데이터베이스의 정보 등, 데이터베이스를 운영하는데 필요한 정보를 관리하는 별도의 객체들
    • 사용자 딕셔너리
      • USER_CONSTRAINT 와 USER_CONS_COLUMNS 사용
    • DB 전체 딕셔너리
      • DBA_CONSTRAINT 와 DBA_CONSTRAINT_COLUMNS 사용
  • 테이블 생성 후 제약조건 추가하기
    • ALTER 명령어를 사용하여 테이블에 제약조건 추가 가능
      • ALTER TABLE test ADD CONSTRAINT test_name_uk UNIQUE(name);
    • NOT NULL로 제약조건을 추가할 때는 컬럼의 기본값이 NULL로 설정되어 있기 때문에 ADD가 아닌 MODIFY로 컬럼의 제약조건을 추가해야한다.
      • ALTER TABLE test MODIFY (name CONSTRAINT test_name_nn NOT NULL);
    • 외래키 설정시
      • 참조되는 부모테이블의 컬럼은 PRIMARY KEY 이거나 UNIQUE 이어야 한다.
    • FK를 설정한 후 부모테이블의 데이터를 지우고 싶을 경우 자식테이블에서 부모테이블의 해당 데이터를 참조하고 있으면 지울 수 없다.
      • FK를 생성할 떄 ON DELETE CASCADE 옵션을 주면 부모테이블의 데이터가 지워질 떄 자식테이블의 데이터도 함께 지울 수 있다.
      • ON DELETE SET NULL 옵션을 주면 부모테이블의 데이터가 지워질 떄 자식 테이블을 NULL 값으로 설정하게 된다.
      • ON UPDATE 에도 옵션을 부여할 수 있다. (ORACLE은 불가능)
  • ON DELETE, ON UPDATE 옵션
    • NO ACTION
      • 참조테이블(부모테이블)에 변화가 있어도 자식테이블에 아무런 조치를 취하지 않는다.
    • CASCADE
      • 참조테이블의 데이터가 삭제되면 자식테이블의 관련 데이터도 모두 삭제
      • 참조테이블의 데이터가 변경되면 자식테이블의 관련 데이터도 모두 변경
    • SET NULL
      • 참조테이블의 변화가 있으면 자식테이블의 관련데이터는 NULL로 변경한다.
    • SET DEFAULT
      • 참조테이블의 변화가 있으면 자식테이블의 관련 데이터는 기본데이터로 변경한다.
저작자표시 (새창열림)
'old posting/MySQL' 카테고리의 다른 글
  • [SQL] 데이터베이스 설계 단계와 데이터 모델링 그리고 ER Model
  • [SQL] ROWNUM, ROW_NUMBER(), RANK()
  • [SQL] 집합연산자
  • [SQL] Natural Join과 USING
마케팅스프린트
마케팅스프린트
쿠팡, 스마트스토어 자동화 솔루션

티스토리툴바