컬럼에 Constraints (제약조건) 주기
컬럼 만들 때 제약조건을 걸어둘 수 있습무니다.
- 이 컬럼은 NOT NULL 해야한다.(텅빈 데이터 넣지마삼)
- 이 컬럼에 있는 데이터들은 항상 UNIQUE 해야한다.
- 여기에 음수 말고 양수만 들어오는지 check 해라
- 이 컬럼을 PK로 설정해라
등 여러가지 설정이 가능합니다.
1. NOT NULL 제약 조건
CREATE TABLE 적자생존 (
id INT NOT NULL,
이름 VARCHAR(100) NOT NULL,
나이 INT
)
컬럼 만들때 우측에 NOT NULL 을 체크해주면 NULL 금지령을 때릴 수 있습니다. 원래 데이터를 넣을 때 까먹고 안넣으면 자동으로 NULL 이 됩니다.
그래서 NOT NULL 을 입력해두면 나중에 이름 컬럼이나 id 컬럼에 까먹고 데이터를 안넣으면 저장이 되지않습니다. null 이 금지라서
2. UNIQUE 제약 조건
CREATE TABLE 적자생존 (
id INT UNIQUE,
이름 VARCHAR(100) NOT NULL,
나이 INT
)
컬럼 만들때 우측에 유니크 넣어주면 제약을 걸 수 있습니다.
unique가 붙어있는 컬럼안에선 영단어 뜻과 같이 모든 행이 각각 서로 달라야합니다.
그래서 다른 행에 있는 값을 저장하려고 하면 저장안됩니다. ㄹㅇ임 해보셈
CREATE TABLE new_table (
id INT,
이름 VARCHAR(100),
나이 INT,
UNIQUE(이름, 나이)
)
혹은 최하단에 UNIQUE(컬럼1, 컬럼2, 컬럼…) 이렇게 넣을 수도 있는데 이렇게 2개 이상의 컬럼을 넣게 될 경우 컬럼 1과 컬럼 2값이 전부 같아야 저장을 막아줍니다.
먼소리냐면은
id | 이름 | 나이 |
1 | aaa | 20 |
2 | aaa | 21 |
이건 저장을 해주는데
id | 이름 | 나이 |
1 | aaa | 20 |
2 | aaa | 20 |
이건 저장을 만든 사는 소립니다. ㅇㅋ??
사실 쓸일이 별로 없긴 합니다. 그냥 컬럼 옆에 unique를 달아주는 걸로 쓰시고 이런게 있구낭 하시면 됩니다.
3 .CHECK() 제약조건
CREATE TABLE 적자생존 (
id INT,
이름 VARCHAR(100),
나이 INT CHECK (나이 > 20),
)
컬럼 만들때 우측에 CHECK()를 넣으면 컬럼안에 들어갈 값에 제약을 때릴 수 있습니다.
등호 부등호 AND OR 써서 조건식처럼 입력하면 됩니다. IN 도 ㄱㄴ
여기 적자생존에 스무살 응애가 없으니까 20 이상으로 해줍니다.
뜬금 상식 💡 PRIMARY KEY
(프라이머리 - 입장정리 노래 ㅊㅊ)
row 하나 저장할때마다 id 같은걸 기록해둬야지 나중에 고생을 덜합니다.
학생이름 | 학년 | 반 |
뷔 | 1 | 2 |
제이홉 | 2 | 2 |
RM | 2 | 3 |
예를 들어 DB에 학생 출석부를 저장하려고 하는데 이름, 학년 이런것만 저장하진 않을 것 아닙니까????
2학년 2반에 제이홉이 또 입학하면 어쩔라그럼 어케 구분함 서로??
그래서 학생마다 유니크한 번호를 달아놔야 좋지 않을까염. 고유학번같은거요.
학번 | 학생이름 | 학년 | 반 |
1 | 뷔 | 1 | 2 |
2 | 제이홉 | 2 | 2 |
3 | RM | 2 | 3 |
4 | 제이홉 | 2 | 2 |
각 학생마다 고유 번호를 부여하면 나중에 동일한 이름의 학생이 입학해도 구분 ㅆㄱㄴ합니다.
여기서 학번을 저희는 유식하게 ‘PRIMARY KEY’라고 부릅니다.
프라이머리 키는 각 행을 구분짓기 위해 각각 유니크한 데이터를 담고있는 컬럼입니다.
- 문자는 넣어도 되는데 보통은 숫자를 주로 씁니다.
- 자신있으면 프라이머리 키 안써도 상관없는데 보통 테이블마다 넣어줍니다.
- 여러 컬럼을 묶어서 프라이머리 키로 지정이 가능합니다. 각 행마다 유니크하기만 하믄 댑니다.
4. PRIMARY KEY 제약조건
CREATE TABLE 적자생존 (
id INT PRIMARY KEY,
이름 VARCHAR(100),
나이 INT CHECK (나이 > 0),
)
컬럼 만들때 우측에 PRIMARY KEY 라고 표기하면 그 컬럼은 이제 PRIMARY KEY가 됩니다. 마치 이거 마시면 너 나랑 사귀는 거다 처럼요.
그럼 NOT NULL, UNIQUE 제약 조건도 자동으로 부여되는데 안되면 직접 설정 때려줍니다.
5. AUTO_INCREMENT 제약조건
CREATE TABLE 적자생존 (
id INT AUTO_INCREMENT PRIMARY KEY,
이름 VARCHAR(100),
나이 INT,
)
이거 넣으면 테이블에 행이 추가될때 알잘딱깔쎈으로 알아서 1이 증가되는 값으로 부여됩니다.
ex) 테이블의 마지막 행에 id 가 100으로 기록되어 있다면
새로운 행을 추가하면 알아서 id를 101로 설정해줍니다.
⇒ PRIMARY KEY 조건 넣을때 자주 사용합니다. 편-안해서요.
CREATE TABLE 적자생존 (
id NUMBER GENERATED BY DEFAULT ALWAYS AS IDENTITY
)
사실은 이게 원래 SQL 풀 정석 문법인데 oracle, postgreSQL은 이걸 씁니다. 그럼 이제 id 컬럼에 primary key + auto increment 제약조건 부여가 가능합니다.
Postgres 는 NUMBER가 아니라 INT 이런걸로 씁니다.
6. CONSTRAINTS()문법으로 제약조건 줘버리깃
CREATE TABLE 적자생존 (
id INT,
이름 VARCHAR(100),
나이 INT,
PRIMARY KEY (id),
CHECK(나이 > 10)
)
이렇게 썼자나요 지금까지
실은 제약조건 줄때 밑에처럼 써도됩니다.
CREATE TABLE 적자생존 (
id INT,
이름 VARCHAR(100),
나이 INT,
CONSTRAINT 제약조건작명 PRIMARY KEY (id),
CONSTRAINT 제약조건작명2 CHECK(나이 > 10)
)
근데 제약조건마다 작명을해서 귀염뽀짞하게 이름을 붙여주고 싶다면 CONSTRAINT 문법을 씁니다.
이게 좋은 이유는 나중에 에러가 나면 ‘귀염뽀짞한제약조건명35 때문에 에러가납니다.’ 이런 식으로 표기가 되므로 쿼리에 오류가 나면 머가 잘못됐는지 찾기 편할 수 있습니다.
** ??? : 님아 근데 나 이미 테이블 컬럼 다 만들었는데 제약 추가하려면 어케해야함??
다 ~~~ 생각이 있다 이말이야.
ALTER TABLE 테이블명 MODIFY 컬럼명 int NOT NULL;
컬럼 수정해주는 ALTER TABLE 문법을 쓰면 됩니다.
위 처럼 퀴리짜면 기존 컬럼에 NOT NULL이 추가됩니다.
'DI(Digital Innovation) > DataBase & SQL 뽀개기' 카테고리의 다른 글
2NF 완벽 이해 MASTER (0) | 2024.02.23 |
---|---|
DB 1, 2 정규형 (1) | 2024.02.23 |
진정한 알파메일은 테이블과 컬럼 생성할 때 쿼리를 쓴다 (0) | 2024.02.21 |
SQL (IF/CASE) 장인을 꿈꾼다 (0) | 2024.02.21 |
GROUP BY 뽀개기 (0) | 2024.02.19 |