개발공부/SQL
[SQL] 데이터 타입과 제약조건
jnnjnn
2024. 4. 26. 17:01
데이터 타입(DATA TYPE)
문자열
- VARCHAR(글자수)
문자열 타입을 저장할 수 있고 저장할 수 있는 최대길이를 ()안에 넣습니다
지정된 글자수를 초과하면 저장할 수 없습니다
# 문자열
# varchar(길이)
CREATE TABLE my_table3
(
name VARCHAR(3),
title varchar(5),
notes VARCHAR(1000)
);
INSERT INTO my_table3(name, title, notes)
VALUES ('이강인', '축구선수', '파리셍제르망');
# 에러 발생(글자수 초과)
INSERT INTO my_table3(name, title, notes)
VALUES ('네이마르', '야구선수', '사우디아라비아');
TEXT
VARCHAR보다 많은 문자열을 저장할 수 있습니다
수
- 정수 : INT
- 실수 : DECIMAL, DEC ( 총길이[소수점포함], 소수점이하 길이 )
CREATE TABLE my_table5
(
age INT,
height DEC(5, 2)
);
DESC my_table5;
# 크기 초과하면 반올림해서 들어감
INSERT INTO my_table5 (age, height)
VALUES (10, 170.257);
날짜시간
DATE : 날짜를 저장(YYYY-MM-DD)
DATETIME : 날짜와 시간을 저장 (YYYY-MM-DD HH:MM:SS)
#날짜시간
# DATE : 날짜 (YYYY-MM-DD)
# DATETIME : 날짜시간 (YYYY-MM-DD HH:MM:SS)
CREATE TABLE my_table7
(
col1 DATE,
col2 DATETIME
);
INSERT INTO my_table7 (col1, col2)
VALUES ('2002-08-10', '1999-09-09 22:10:10');
제약조건 (Constraint)
특정 컬럼에 입력되는 자료의 규칙을 지정할 수 있다
지정한 규칙을 따르지 않으면 데이터가 저장되지 않는다
NOT NULL
NULL값을 저장할 수 없다.
CREATE TABLE my_table11
(
col1 VARCHAR(10),
co12 VARCHAR(10) NOT NULL
);
# 오류 발생
INSERT INTO my_table11
(col1)
VALUES ('value');
# 해당 컬럼에 값이 없는 레코드 조회
SELECT *
FROM my_table11
WHERE col1 IS NULL;
# 해당 컬럼에 값이 있는 레코드 조회
SELECT *
FROM my_table11
WHERE col1 IS NOT NULL;
#NULL과의 연산은 모두 FALSE
# col1 != NULL, col1 <> NULL
DEFAULT
값을 입력하지 않았을 경우에 들어가는 기본값을 지정한다.
기본값이 있지만, NULL값도 들어갈 수 있기 때문에 NOT NULL은 아니다
# DEFAULT : 값을 주지 않을 때의 기본값을 정의
CREATE TABLE my_table13
(
col1 VARCHAR(10),
col2 VARCHAR(10) DEFAULT 'abc'
);
# col2 값은 'abc'로 자동 지정
INSERT INTO my_table13
(col1)
VALUES ('bnm');
# NULL 값도 저장 가능
INSERT INTO my_table13
(col1, col2)
VALUES ('jkl', NULL);
CREATE TABLE my_table14
(
col1 VARCHAR(30),
col2 VARCHAR(30) NOT NULL,
col3 VARCHAR(30) DEFAULT 'abc',
col4 VARCHAR(30) NOT NULL DEFAULT 'abcd'
);
UNIQUE
해당 컬럼에 중복되는 값을 저장할 수 없다. 단, NULL값은 데이터 없음이므로 중복이 가능하다
# UNIQUE : 다른 레코드의 컬럼 값이 중복되지 않음
CREATE TABLE my_table15
(
col1 VARCHAR(3),
col2 VARCHAR(3) UNIQUE
);
INSERT INTO my_table15
(col1, col2)
VALUES ('abc', 'def');
# 오류 발생
INSERT INTO my_table15
(col1, col2)
VALUES ('def', 'def');
# null 값은 중복 허용
INSERT INTO my_table15
(col1)
VALUES ('qwe');
INSERT INTO my_table15
(col1)
VALUES ('ert');
CREATE TABLE my_table16
(
col1 VARCHAR(10),
col2 VARCHAR(10) UNIQUE,
col3 VARCHAR(10) NOT NULL UNIQUE # = PRIMARY KEY
);
PRIMARY KEY(기본키)
하나의 테이블에 있는 데이터를 식별하기 위한 기준으로 인식되는 제약조건. 테이블 당 하나만 존재한다
NOT NULL이면서 UNIQUE인 속성을 가지고 있지만
PRIMARY KEY와 다르게 NOT NULL UNIQUE는 여러개 만들 수 있다
# PRIMARY KEY : NOT NULL UNIQUE
CREATE TABLE my_table17
(
col1 INT,
col2 INT PRIMARY KEY -- NOT NULL UNIQUE
);
INSERT INTO my_table17
(col1, col2)
VALUES (2, 2);
# 오류 발생
INSERT INTO my_table17
(col1, col2)
VALUES (3, 2);
# PRIMARY KEY 제약사항은 한 테이블에 하나만 줄 수 있음
# 불가능
CREATE TABLE my_table18
(
col1 INT PRIMARY KEY,
col2 INT PRIMARY KEY
);
#가능
CREATE TABLE my_table19
(
col1 INT NOT NULL UNIQUE,
col2 INT PRIMARY KEY
);
DESC my_table19;
# 여러 컬럼 조합으로 PRIMARY KEY 제약사항을 줄 수 있음
CREATE TABLE my_table21
(
col1 INT,
col2 INT,
col3 INT,
PRIMARY KEY (col1, col2)
);
FOREIGN KEY(외래키)
해당 컬럼에 참조하는 테이블로부터 존재하는 값들만 사용한다는 의미의 제약조건
FOREIGN KEY (테이블명) REFERENCES 참조테이블명 (참조컬럼)
CREATE TABLE Customer
(
id INT PRIMARY KEY AUTO_INCREMENT,
first_name VARCHAR(3),
last_name VARCHAR(3)
);
CREATE TABLE Phone_number
(
id INT PRIMARY KEY AUTO_INCREMENT,
customer_id INT,
phone_number VARCHAR(10),
FOREIGN KEY (customer_id) REFERENCES Customer (id)
);