Hyperskill - 컴퓨터 CS 및 영어 독해/Introducing to SQL

Consistency constraints - 일관성 제약 조건

코딩크리처 2024. 4. 30. 20:37

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, ageJohn, 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 - 결론


이제 당신은 간단한 테이블을 만드는 법,

그리고 또한 제약들을 이용해서 더 복잡하고 기능적으로 만드는 법을 알고 있습니다.

이제 테이블을 만들 때 제약들을 만들고, 기존 테이블에 제약을 추가하며, 명명된 제약을 만드는 것을 연습합시다!