elevne's Study Note
MySQL 2: SQL 본문
제약조건 (Constraint) 이란 데이터의 무결성을 지키기 위한 제한된 조건을 의미한다. 특정 데이터를 입력할 때 무조건적으로 입력되는 것이 아니라 어떠한 조건을 만족했을 때에 입력되도록 제약할 수 있는 것이다. MySQL 은 데이터의 무결성을 위해 아래 제약조건들을 제공한다.
- PRIMARY KEY
- FOREIGN KEY
- UNIQUE
- CHECK
- DEFAULT
- NULL
Primary Key 제약조건
테이블에 존재하는 많은 행의 데이터를 구분할 수 있는 식별자를 기본 키(primary key)라고 부른다. 기본키에 입력되는 값을 중복될 수 없으며, NULL 이 들어올 수도 없다. 대부분의 테이블은 기본키를 가져야한다. 기본키가 없어도 테이블의 구성이 가능하기는 하지만, 실무적으로는 거대부분의 테이블에는 설정해줄 필요가 있다.
Foreign Key 제약조건
외래 키 제약조건은 두 테이블 사이의 관계를 선언함으로써 데이터의 무결성을 보장해주는 역할을 한다. 외래 키 관계를 설정하면 하나의 테이블이 다른 테이블에 의존하게 된다. 외래키를 정의하는 테이블을 ‘외래 키 테이블’, 외래 키에 의해서 참조되는 테이블을 ‘기준 테이블’ 이라고 한다.
외래 키 테이블에 데이터를 입력할 때는 꼭 기준 테이블을 참조해서 입력하므로 기준 테이블에 이미 데이터가 존재해야한다. 또, 외래 키 테이블이 참조하는 기준 테이블의 열은 반드시 PK 이거나 Unique 제약조건이 설정되어있어야 한다. 또, 외래 키 옵션 중에 ON DELETE CASCADE, ON UPDATE CASCADE 가 있다. 이는 기준 테이블의 데이터가 변경되었을 때 외래 키 테이블도 자동으로 적용되도록 설정해준다. 별도로 지정하지 않으면 ON UPDATE NO ACTINO 및 ON DELETE NO ACTION 을 지정한 것과 동일하다고 한다. (아무일도 일어나지 않는다는 뜻)
Unique 제약조건
이는 PK 와 유사하다. 중복되지 않는 유일한 값을 입력해야 하는 조건이다. Unique 는 NULL 값을 허용한다는 점이 차이점이다. NULL 은 여러 개가 입력되어도 상관없다.
Check 조건
이는 입력되는 데이터를 점검하는 기능을 수행한다. 마이너스 값이 들어올 수 없다든지 등 다양한 제약조건을 임의대로 설정할 수 있다.
Default 정의
이는 값을 입력하지 않았을 때, 자동으로 입력되는 기본 값을 정의하는 방법이다.
NULL 값 허용
NULL 값을 허용하려면 NULL, 허용하지 않으려면 NOT NULL 을 사용하여 테이블을 정의한다.
그 다음으로 View 라는 것에 대해 알아본다. 뷰는 일반 사용자 입장에서는 테이블과 동일하게 사용되는 개체이다. 뷰는 한 번 생성해두면 테이블이라고 생각해도 될 정도로 사용자들의 입장에서는 테이블과 거의 동일한 개체로 여겨진다고 한다. CREATE VIEW 구문으로 생성된다.
CREATE VIEW v_usertbl
AS
SELECT userid, name, addr FROM usertbl;
View 를 생성한 후에는 생성한 뷰를 그냥 테이블이라고 생각하고 접근하면, 원래의 테이블에 접근한 것과 동일한 결과를 얻을 수 있다. 이러한 뷰는 주로 읽기 전용으로 사용된다. 뷰를 사용하는 것은 보안적으로 도움이 될 수 있으며, 복잡한 쿼리를 단순화 시켜 줄 수도 있다.
마지막으로 테이블 스페이스에 대해서 알아본다. 소용량의 데이터를 다룰 때에는 이에 대해 별로 신경쓰지 않아도 되지만, 대용량의 데이터를 다룰 때는 성능 향상을 위해서 테이블스페이스에 대한 설정을 하는 것이 좋다. 데이터베이스가 테이블이 저장되는 논리적 공간이라면 테이블스페이스는 테이블이 실제로 저장되는 물리적인 공간을 말한다. 별도로 테이블스페이스를 지정하지 않으면 시스템 테이블스페이스에 테이블이 저장된다. 시스템 테이블스페이스에 대한 정보는 시스템변수 innodb_data_file_path 에 관련 내용이 저장되어있다.
위 값은 파일명:파일크기:최대파일크기 를 말한다. 기본적으로 파일은 idbdata1 이고, 파일 크기는 12MB, 최대 파일 크기는 허용하는 최대값까지 자동 증가한다.
기본 설정은 모든 테이블이 시스템 테이블스페이스에 저장되지만, 대용량 테이블을 동시에 여러 개 사용하는 상황이라면 테이블마다 별도의 테이블스페이스에 저장하는 것이 성능에 효과적이다.
Reference:
이것이 MySQL 이다
'DB > MySQL' 카테고리의 다른 글
MySQL 6: 전체텍스트 검색 & 파티션 (0) | 2023.06.23 |
---|---|
MySQL 5: Index (0) | 2023.06.21 |
MySQL 4: Trigger, Event Scheduler (0) | 2023.06.19 |
MySQL 3: Stored Procedure, Function (1) | 2023.06.18 |
MySQL 1: SQL (1) | 2023.06.14 |