데이터 타입(자료형)
1. 문자형
5.0.3 이전 버전은 byte로, 이후 버전은 글자수로 크기 지정한다.
종류는 다음과 같다.
- CHAR(n) : 고정 길이 (n의 수치로 크기를 결정, 255자)
- VARCHAR(n) : 가변 길이 (n의 수치로 크기를 결정, 65,535byte) ★많이 씀
- TEXT(n) : VARCHAR과 같으나 조회 속도가 느림 (65,535byte) 보통 크기를 설정하지 않은 채 사용
- TINYTEXT(n) : 255자
- MEDIUMTEXT(n) : 16,777,215자
- LONGTEXT(n) : 4,294,967,295자
- JSON : json 형태로 저장 (ex { '이름' : '홍길동', '나이':20 } )
2. 숫자형
- TINYINT(n) : 정수(-128 ~ 127)
- SMALLINT(n) : (-32,768 ~ 32,767)
- MEDIUMINT(n) : (-8,388,608 ~ 8,388,607)
- INT(n) : (-2,147,483,548 ~ 2,147,483,547)
- BIGINT(n) : 무제한
- FLOAT(n, d) : 실수 (n = 전체 길이 / d = 소수점 이후) (ex (7,2) => 99,999.99 => 부동 소수점) ★많이 씀
- DEFCIMAL(n, d) : 고정 소수점
- DOUBLE(n, d) : 부동 소수점(문자열로 저장)
3. 날짜형
- DATE : 날짜(년, 월, 일) 형태
- TIME : 시간(시, 분, 초) 형태
- DATETIME : 날짜와 시간이 합쳐진 형태 (8byte) 1000-01-01 부터 ★많이 씀
- TIMESTAMP : 날짜와 시간이 합쳐진 형태 (4byte) 1970-01-01 부터
- YEAR : 년도만 저장하는 형태
4. 이진 데이터형(binary)
- BINARY(n) & BYTE(n) : CHAR 형태의 이진 데이터
- VARBINARY(n) : VARCHAR 형태의 이진 데이터
- TINYBLOB(n) : 이진 데이터(파일류) 255byte
- BLOB(n) : 65,535byte
- MIDIUMBLOB(n) : 16,777,215byte
- LONGBLOB(n) : 4,294,967,295byte
* 위지윅(WYSIWYC, What You See Is What You Get) : 보이는대로 처리한다 => (웹 에디터) BLOB 타입 사용
제약조건
제약조건이란 데이터의 무결성을 지키기 위해 데이터를 입력할 때 실행되는 검사 규칙을 말한다.
주로 CREATE문이나 ALTER문에서 사용한다.
제약조건 사용 방식)
- 컬럼 작성 시 같이 사용
- CONSTRAINT 키워드로 나중에 추가
1. 기본값
- NOT NULL : 해당 컬럼에 NULL이 들어갈 수 없음 (반드시 입력)
- UNIQUE : 해당 컬럼에 중복값을 허용하지 않음
- PRIMARY KEY : 해당 컬럼을 기본키로 설정 (NOT NULL + UNIQUE)
- FOREIGN KEY : 해당 컬럼을 외래키로 설정
- DEFAULT : 해당 컬럼에 기본값을 설정
-- 회원테이블 생성(제약조건 추가)
CREATE TABLE member (
m_id VARCHAR(20) PRIMARY KEY,
m_pwd VARCHAR(20) NOT NULL,
m_name VARCHAR(10) NOT NULL,
m_age INT,
m_job VARCHAR(20),
m_grade VARCHAR(10) DEFAULT 'silver',
-- DEFAULT : 비어있다면 'silver'를 넣자
-- 따라서 NOT NULL은 DEFAULT와 굳이 같이 쓰진 않음
m_point INT DEFAULT 0
);
2. CONSTRAINT 키워드
'CONSTRAINT'는 앞서 말한 제약조건 사용 방식 중 두 번째에 해당하는 방식으로, 특정 컬럼에 제약조건을 설정하기 위한 명렁어이다.
- UNIQUE => CONSTRAINT 제약조건명 UNIQUE (컬럼명)
- PRIMARY KEY => CONSTRAINT 제약조건명 PRIMARY KEY (컬럼명)
- FOREIGN KEY => CONSTRAINT 제약조건명 FOREIGN KEY (컬럼명) REFERENCES 테이블명 (컬럼명)
* 제약조건명 : 제약조건의 관리가 따로 가능하면 해당 제약조건을 나중에 변경하거나 제거할 때 구분할 수 있도록 하기 위해 사용한다. 보통 테이블명과 컬럼명, 제약조건의 단어를 조합하여 작명한다. ex) member 테이블의 기본키 : m_id_pk
-- 제조회사 테이블
CREATE TABLE company (
c_name VARCHAR(20),
c_phone VARCHAR(15) NOT NULL,
c_loc VARCHAR(50) NOT NULL,
c_manager VARCHAR(10) NOT NULL,
CONSTRAINT c_n_pk PRIMARY KEY (c_name)
);
-- 상품 테이블
CREATE TABLE product (
p_no INT PRIMARY KEY,
p_cname VARCHAR(20) NOT NULL,
p_name VARCHAR(20) NOT NULL,
p_amount INT DEFAULT 0,
p_price INT NOT NULL,
cp_date DATE,
cp_amount INT,
CONSTRAINT p_c_fk FOREIGN KEY (p_cname) REFERENCES company (c_name)
);
삭제와 수정
1. 테이블의 삭제와 수정
삭제 = DROP TABLE { 테이블명 };
수정 : ALTER TABLE { 테이블명 } + 수정 설정 동작
수정 설정 동작)
- 컬럼 추가 : ADD COLUMN { 컬럼명 } { 타입 };
- 컬럼 변경 : MODIFY COLUMN { 컬럼명 } { 변경타입 }; => 해당 컬럼에 데이터가 있을 경우 변경 불가
- 컬럼명 변경 : CHANGE COLUMN { 기존컬럼명 } { 새컬럼명 }; => 타입도 함께 변경 가능
- 컬럼 삭제 : DROP COLUMN { 컬럼명 };
- 테이블명 변경 : RENAME { 새테이블명 };
ALTER TABLE testtbl
ADD COLUMN phone VARCHAR(15);
ALTER TABLE testtbl
MODIFY COLUMN phone VARCHAR(20);
ALTER TABLE testtbl
CHANGE COLUMN phone t_phone VARCHAR(20);
ALTER TABLE testtbl
DROP COLUMN t_phone;
ALTER TABLE testtbl
RENAME test_tbl;
2. 참조되는 테이블의 삭제와 수정
ON DELETE = 참조되는 테이블의 값이 삭제될 경우
ON UPDATE = 참조되는 테이블의 값이 수정되는 경우
설정 동작)
- CASCADE : 참조하는 테이블의 값도 같이 처리
- SET NULL : 참조하는 테이블의 값을 NULL로 변경
- NO ACTION : 참조하는 테이블의 값에 아무 변경 안 함
- SET DEFAULT : 참조하는 테이블의 값을 기본값으로 변경
- RESTRICT : 참조되는 테이블의 값이 변경 불가
-- 주문 테이블
CREATE TABLE ordertbl (
o_no INT PRIMARY KEY,
o_mid VARCHAR(20) NOT NULL,
o_pno INT NOT NULL,
o_amount INT NOT NULL,
o_loc VARCHAR(50) NOT NULL,
o_date DATE,
CONSTRAINT o_m_fk FOREIGN KEY (o_mid)
REFERENCES member (m_id),
CONSTRAINT o_p_fk FOREIGN KEY (o_pno)
REFERENCES product (p_no)
ON UPDATE CASCADE ON DELETE CASCADE
-- 참조되는 테이블 : member / 참조하는 테이블 : ordertbl(외래키가 있는 테이블)
-- 상품 테이블의 상품번호를 수정/삭제하면, 그 번호를 사용하는 주문의 정보도 같이 수정/삭제한다.
);
* 자동으로 증가하는 정수값을 사용하는 컬럼 설정 방법
AUTO_INCREMENT : 1씩 증가하는 정수값이 자동으로 삽입되며, 정수형 기본키 컬럼에만 사용
ex)
CREATE TABLE datatbl (
d_no INT AUTO_INCREMENT PRIMARY KEY,
d_data1 VARCHAR(10) NOT NULL,
...
);
제약조건의 추가와 삭제
- 기본키 추가 : ADD PRIMARY KEY (컬럼명);
- 기본키 삭제 : DROP PRIMATY KEY;
- 외래키 추가 : ADD CONSTRAINT 제약조건명 FOREIGN KEY (컬럼명) REFERENCES 테이블명 (컬럼명);
- 외래키 삭제 : DROP FOREIGN KEY 제약조건명;
- 제약조건 추가/삭제 : ADD CONSTRAINT {제약조건명_키워드}; / DROP CONSTRAINT 제약조건명;
ALTER TABLE test_tbl
ADD PRIMARY KEY (t_id);
ALTER TABLE test_tbl
ADD CONSTRAINT t_c_fk FOREIGN KEY (t_name)
REFERENCES company (c_name);