본문 바로가기
AI/데이터베이스\SQL

[SQL / postgreSQL] 데이터 유형 , 제약조건 (Constraints), CREATE , ALTER, DELETE, UPDATE, INSERT, DROP, CHECK 제약조건

by 까다로운오리 2022. 7. 11.

SQL 데이터 유형 

 

Boolean
- True or False

Character 
- char, varchar, and text

Numeric
-integer and floating-point number

Temporal
-date, time, timestamp ...

UUID
-Universally Unique Identifiers (특정 열의 고유 식별자를 만들기 위한 본질적인 알고리즘 고유 코드)

JSON, Array ....etc..

--> 상황에 따라 어떤 데이터 유형을 저장할지 고민해야 한다..!

참고 : postgresql.org/docs/current/datatype.html

 


제약조건 (Constraints)

 

- 표에 있는 데이터 열에 적용되는 규칙을 제약 조건이라고 한다.

- 제약조건으로 유효하지 않은 데이터가 쓰이는 것을 방지할 수 있다.

 

 

Column 제약조건

 NOT NULL: null 입력 x
UNIQE : 열에 있는 모든 값이 달라야 한다. 
PRIMARY KEY
FOREIGN KEY
CHECK : 모든 값이 특정한 조건을 만족하도록 한다. ( ~보다 작은 것)
EXCLUSION: 특정 오퍼레이터를 사용한 특정 열이나 식에서 어떤 두 열이 비교될 때 모든 비교값이 참으로 판명되지 않아야 한다는..



Table 제약조건

CHECK (conditon) : 괄호 안에 조건을 입력
REFERENCES : column 값에 제한 건다..
UNIQE(column_list)  
PRIMARY KEY(column_list)

 

 

 


CREATE TABLE

 

CREATE TABLE table_name (
column_name TYPE column_constraint,
column_name TYPE column_constraint,
table_constraint table_constraint
)  INHERITS existing_table_name;

 

SERIAL
시퀀스 정수의 시퀀스를 발생시킨다. 시퀀스 객체를 만들고 세로단의 디폴트 값을써 시퀀스에 의해 발생한 다음 값을 세팅한다. 자동으로 삽입되는 고유한 정수값을 로그해준다.  SERIAL의 장점은 줄이 제거되어도 SERIAL 데이터 유형의 Column에는 영향이 없다. 모든것을 재포맷하지 않고,시퀀스에 해당 줄이 삭제되어있는것을 알려줌
ex) 1,2,3,4,5,6 -> 1,2,3,5,6, : 아! 4가 삭제 되었구나!


INHERITS
postgresSQL에만 있는 기능으로 상속기능을 제공한다. 부모 테이블의 CHECK, NOT NULL은 자식 테이블에 자동 상속된다.

 

 

실습

 


INSERT

 

- 테이블 또는 뷰에 한 개 이상의 행을 추가한다. (위키백과)

 

INSERT INTO table (colulmn1, column2, ...)
VALUES
(value1, value2, ...),
(value1, value2, ...),...;

 

실습

** user_id == 1, job_id == 1인 값은 존재하지만, user_id, job_id가 2인 값은 존재하지 않음으로 에러가 뜬다.

 

 

 

 


UPDATE

 

-테이블 또는 뷰의 데이터를 갱신하기 위해 사용

 

 

UPDATE table
SET column1 = value1,
column2 = value2,...
WHERE
condition;

 

결과에 영향이 있는 값을 불러올 수 잇음

UPDATE account
SET last_login = create_on
RETURNING account_id, last_login
RETURNING

postgresSQL에만 있는 기능으로 SELECT * FROM table; 과 같다. 실행 결과를 리턴시켜준다.

 

 

다른 표의 값도 사용할 수 있다. JOIN 키는 안쓰지만 Update JOIN 이라고 불림

UPDATE tableA
SET orgin_col = TableB.new_col
FROM tableB
WHERE tableA.id = TableB.id

                                                                                                                                                

실습

 

 

 

 


DELETE

 

-테이블에서 행을 제거하기 위해 쓰임

 

DELETE FROM table
WHERE row_id = 1

 

WHERE문을 만족하면, 그 테이블의 가로줄 삭제.   DELETE JOIN

DELETE FROM tableA
USING tableB
WHERE tableA.id = TableB.id

+) update와 같이 마지막에 returning 명령을 내려서 제거된 줄을 불러올 수 있음

 

 

 

 

 


ALTER

 

-이미 존재하는 표 구조를 바꿈.

- 더하기,드롭,세로단이름바꾸기,column 데이터 유형 바꾸기,디폴트 값 세팅, ADD CHECK 제약조건 등 .....

 

#더하기
ALTER TABLE table_name
ADD COLUMN now_col TYPE

#세로단 제거
ALTER TABLE table_name
DROP COLUMN col_name

#이미 존재하는 세로단 제약 조건 변경
ALTER TABLE table_namae
ALTER COLUMN col_name
SET DEFAULT value



#NOT NULL 제한조건도 제거하거나 더할 수 있다.
ALTER TABLE table_namae
ALTER COLUMN col_name
SET NOT NULL


#제약 조건 더할 수있음
ALTER TABLE table_namae
ALTER COLUMN col_name
ADD CONSTRAINT constraint_name

 

 

 

실습

** 테이블 명을 new_info로 바꿨기 때문에 에러가 뜸

 

** peole의 제약 조건으로 NOT NULL을 설정해주었기 때문에 NOT NULL을 DROP하지 않으면 INSERT를 할 때 꼭 people값을 넣어주어야 한다.

 

 

 


DROP

 

-표와 COLUMN을 완전히 삭제할 수 있다. (인덱스와 제약조건도 당연히 같이 삭제 된다.)

 

Table 삭제

DROP TABLE 테이블명

 

COLUMN 삭제

ALTER TABLE table_nmae
DROP COLUMN col1,
DROP COLUMN col2

 

에러를 방지하기 위해서 if를 써줌

ALTER TABLE table_name
DROP COLUMN IF EXISTS col_name

 


CHECK 제약조건

 

-if 처럼 생각하면 된다. check 제약조건에 해당되는 값만 입력되게 한다.

CREATE TABLE example(
ex_id SERIAL PRIMARY KEY,
age SMALLINT CHECK (age>21),
parent_age SMALLINT CHECK (
parent_age > age)
);

 

 

 

실습

 

 

 

https://www.udemy.com/course/best-sql-2022/learn/lecture/2909707