hyperskill - Consistency constraints 원문
테이블의 각 컬럼은 상세한 데이터 타입을 가지고 있으므로,
INT 타입에 TEXT를 넣는 것은 불가능하며,
DECIMAL (소수점 가진 수) 가 BOOLEAN 에 들어가는 것도 불가능합니다.
데이터 타입 제약은 우리에게 많은 실수를 피해가게 도와줍니다.
하지만, 이러한 제한들은 아주 자세 해 질 수 있습니다.
예를 들어, 모든 개인 ID 넘버는 고유하거나, 고객들은 어른들이어야 한다. 와 같습니다.
컬럼의 값에 있어 이러한 상세한 제한들은 constraints (제약) 이라고 부릅니다.
Example - 예시
가장 평범한 constraints (제약) 은 밑의 리스트와 같습니다. :
NOT NULL
UNIQUE
CHECK
DEFAULT
PRIMARY KEY
FOREIGN KEY
이번 주제에서는, 우리는 첫 번째로 리스트의 위쪽에서 4 번째 까지의 제약을 말할 겁니다.
예시로부터 간단한 실제 사례를 봅시다.
우리가 employees
테이블을 만들었다고 가정하겠습니다.
personal_id INT
first_name VARCHAR(30)
last_name VARCHAR(30)
age INT
위의 컬럼을 가지는 테이블은 밑의 간단한 쿼리를 사용해서 만들었습니다 :
CREATE TABLE employees (
personal_id INT,
first_name VARCHAR(30),
last_name VARCHAR(30),
age INT
);
한 번 이 간단한 테이블을 조정하고, 몇몇 제약을 더 해 봅시다.
이번 주제에서는, 우리는 MySQL 구문을 따릅니다.
다른 데이터베이스 관리 시스템에서 사용하는 SQL 용어 및 문법과는 약간 다를 수도 있다는 점을 참고 해 주세요.
NOT NULL constraint - NOT NULL 제약
NOT NULL 제약은 컬럼에 null 값을 추가할 수 있게 허용 해 줍니다.
우리의 테이블 employees
에서, age 컬럼을 not null로 만들겠습니다.
NOT NULL
constraint (제약)을 추가하기 위해서, ALTER TABLE MODIFY
문법을 사용합니다 :
ALTER TABLE employees
MODIFY age INT NOT NULL;
위의 쿼리에서, 새로운 직원을 추가 할 때, 그들의 age 를 언급하지 않는 것은 불가능합니다.
만약 위의 쿼리 실행 전에 NULL
값이 age 컬럼에 있다면, 에러가 납니다.
이 제약을 없애기 위해서, 그저 NOT NULL
속성을 빼고 ALTER TABLE MODIFY
를 다시 사용하면 됩니다.
ALTER TABLE employees
MODIFY age INT;
CREATE TABLE
문법에서도 이 제약을 사용할 수도 있습니다.
그저 마지막 컬럼 타입 선언에 이를 추가하세요. :
CREATE TABLE employees (
personal_id INT,
first_name VARCHAR(30),
last_name VARCHAR(30),
age INT NOT NULL
);
UNIQUE constraint - UNIQUE 제약
UNIQUE 제약은 컬럼에 중첩되는 값을 추가하는 것을 금지합니다.
우리는 직원 식별자가 고유 해야 하는 것을 알고 있으므로,
이 제약을 personal_id
컬럼에 추가합니다.
테이블을 만들 때 컬럼에 UNIQUE
제약을 추가하고 싶다고 한다면,
컬럼 타입 선언 이후 지정 할 수 있습니다. :
CREATE TABLE employees (
personal_id INT UNIQUE,
first_name VARCHAR(30),
last_name VARCHAR(30),
age INT
);
우리는 간단한 쿼리 ALTER TABLE ADD UNIQUE
문법을 사용해서
기존의 테이블에 UNIQUE
를 추가할 수 있습니다. :
ALTER TABLE employees
ADD UNIQUE (personal_id);
이 쿼리 실행 이후, 컬럼 personal_id
는 고유해집니다.
만약 우리가 해당 컬럼에 중첩된 값을 가지고 있었다면 에러가 나므로,
UNIQUE 제약을 추가하기 전에 테이블을 확인 할 필요가 있습니다.
가끔 우리는 여러 개의 컬럼을 고유 (UNIQUE) 하게 만듭니다.
이러한 경우, CREATE TABLE
문법의 마지막에 이름지어진 제약을 정의할 수 있습니다 :
CREATE TABLE employees (
personal_id INT,
first_name VARCHAR(30),
last_name VARCHAR(30),
age INT,
CONSTRAINT uq_id_last_name UNIQUE (personal_id, last_name)
);
이렇게 명명된 제약 조건을 없애기 위해서, ALTER TABLE DROP INDEX
문법을 사용할 수 있습니다. :
ALTER TABLE employees
DROP INDEX uq_id_last_name;
CHECK constaint - CHECK 제약
CHECK 제약은 우리에게 논리 표현식을 추가할 수 있게 허용 해 줍니다.
예를 들어, 우리는 모든 직원이 16살보다 더 나이가 있어야 된다고 말 할 수 있습니다.
우리는 CREATE TABLE
내부에 CHECK
제약을 추가 할 수 있습니다 :
CREATE TABLE employees (
personal_id INT,
first_name VARCHAR(30),
last_name VARCHAR(30),
age INT CHECK (age > 16)
);
이미 존재하는 테이블에 CHECK 제약을 추가하고 싶다면,
ALTER TABLE ADD CHECK
문법을 사용하면 됩니다.
구문은 UNIQUE
제약과 똑같습니다.
명명되지 않은 CHECK
제약을 삭제하기 위해, ALTER TABLE DROP CHECK
를 사용합니다 :
ALTER TABLE employees
DROP CHECK age;
CHECK
제약은 다중 컬럼들로 할당되어 명명될 수 있습니다.
위의 UNIQUE
예제와 비슷하게, 테이블을 만들 때 명명된 CHECK
제약을 지정 할 수 있습니다.
당신은 ALTER TABLE ADD CONSTRAINT
문법을 사용할 수 있으며,
이를 사용해서 이미 존재하는 테이블에 하나 혹은 그 이상의 제약을 위해 명명된 CHECK
제약을 추가 할 수 있습니다.
ALTER TABLE employees
ADD CONSTRAINT chk_employee CHECK ( age > 16 AND personal_id > 0 );
CHECK
제약과 명명된 UNIQUE
제약 둘 다 ALTER TABLE ADD CONSTRAINT
를 사용해서 추가합니다.
명명된 CHECK
제약을 없애기 위해서, 당신은 ALTER TABLE DROP CHECK
문법을 사용 할 수 있습니다.
원문에 없어 추가하는 예제
명명된 CHECK
제약 없애기
ALTER TABLE employees
DROP CHECK chk_employee;
위의 쿼리를 사용해서 명명된 CHECK
제약을 없앨 수 있습니다.
DEFAULT constaint - DEFAULT 제약 조건
DEFAULT 제약은 컬럼의 초기 값을 정의합니다 :
이는 당신이 어떠한 값도 넣지 않았을 때 나타나는 값 입니다.
이제 테이블에 몇몇 기본 값을 정의 해 봅시다. :
CREATE TABLE employees (
personal_id INT,
first_name VARCHAR(30) DEFAULT 'John',
last_name VARCHAR(30) DEFAULT 'Doe',
age INT DEFAULT 17
);
이제 당신이 personal_id
만 있는 새로운 줄을 추가하더라도,
first_name
, last_name
, age
는 John
, Doe
, 17로 각기 정의됩니다.
기존 테이블에 DEFAULT
제약을 추가하기 위해서,
ALTER TABLE ALTER SET DEFAULT
문법을 사용합니다 :
ALTER TABLE employees
ALTER first_name SET DEFAULT 'John';
이미 존재하는 DEFAULT
제약을 제거하기 위해서,
ALTER TABLE ALTER DROP DEFAULT
문법을 사용합니다.
ALTER TABLE employees
ALTER first_name DROP DEFAULT;
Combining constraints - 제약 조건들 결합하기
솔직히, 컬럼은 여러 개의 제약 조건을 가질 수 있습니다.
예를 들어, 새로운 정보를 추가 할 때 에러를 피하는 데에 NOT NULL
, DEFAULT
제약을 결합하는 것은 유용합니다.
DEFAULT 값으로 NULL 이 될 수 없으므로, NOT NULL 이 자동으로 충족된다.
억지로 NULL 값을 넣으려고 시도한다면, 에러가 난다.
우리가 필요한 제약을 선택했다면, CREATE
문법을 사용해서 테이블을 만들 때 이 제약들을 적용 할 수 있습니다.
예를 들어, 한 번 이러한 모든 유용한 제약들을 동시에 사용해서 우리의 테이블 employees를 다시 만들어 봅시다.
CREATE TABLE employees (
personal_id INT NOT NULL UNIQUE,
first_name VARCHAR(30) NOT NULL DEFAULT 'John',
last_name VARCHAR(30) NOT NULL DEFAULT 'Doe',
age INT DEFAULT 17,
CHECK ( age > 17 )
);
Conclusion - 결론
이제 당신은 간단한 테이블을 만드는 법,
그리고 또한 제약들을 이용해서 더 복잡하고 기능적으로 만드는 법을 알고 있습니다.
이제 테이블을 만들 때 제약들을 만들고, 기존 테이블에 제약을 추가하며, 명명된 제약을 만드는 것을 연습합시다!
'Hyperskill - 컴퓨터 CS 및 영어 독해 > Introducing to SQL' 카테고리의 다른 글
Date & Time data types - 날짜와 시간 데이터 타입 (1) | 2024.05.01 |
---|---|
Set operations - 집합 연산자들 (1) | 2024.05.01 |
Subqueries - 서브쿼리 (0) | 2024.04.29 |
GROUP BY statement - GROUP BY 문법 (0) | 2024.04.28 |
Aggregate functions - 집계 함수들 (0) | 2024.04.27 |