SQL - DDL

김규린·2024년 8월 23일
0

Data Base

목록 보기
13/20

1. DDL

  • 스키마(데이터 틀)를 정의하거나 수정하는데 사용되는 SQL의 한 부분이다.
    • 스키마(schema): 테이블의 구조(컬럼, 자료형, 자료형 크기, 테이블 명 등) 및 제약조건(primary, unique, not null, check, foreign key) 전반을 아울러 지칭하는 말

1. CREATE

  • 테이블 생성
CREATE TABLE IF NOT EXISTS tb1 (
    pk INT PRIMARY KEY auto_increment, -- 제약조건 / 컬럼 레벨에서 제약조건 추가
    fk INT,
    col1 VARCHAR(255),
    CHECK(col1 IN ('Y', 'N')) -- col1에 대한 제약조건 / 테이블 레벨에서 제약조건 추가 
) ENGINE=INNODB;

-- if not exists ⇒ 옵션

-- varchar ⇒ 가변한다 / varchar(255) 최대 255byte까지 추가할 수 있다.

-- char ⇒ 고정형
-- 한 글자(한글): 3byte
-- 특수문자 및 영어: 2byte

-- 제약조건 사용하는 이유: 데이터 무결성을 위해
-- primary key를 넣지 않을 경우 자동으로 not null로 바
  • 테이블 구조 확인
desc tbl1;
-- or
describe tbl1;
  • insert 테스트
INSERT
	INTO tbl1
VALUES
(
 1, 2, 'Y'
);

create 시 설정했던 제약조건을 어겼을 시에 나오는 오류

2. AUTO_INCREMENT

  • INSERT 시 PRIMARY키에 해당하는 컬럼에 자동으로 번호를 발생(중복되지 않게)시켜 저장할 수 있다.
-- auto_increment
CREATE TABLE if NOT EXISTS tbl2 (
	pk INT PRIMARY KEY AUTO_INCREMENT,
	fk INT,
	col1 VARCHAR (255),
	CHECK(col1 IN ('Y', 'N'))
) ENGINE = INNODB;

DESC tbl2;

INSERT
	INTO tbl2
VALUES
(
 null, 2, 'Y'
);

SELECT * FROM tbl2;

pk 번호 자동으로 해줌

3. ALTER

  • 테이블에 추가/변경/수정/삭제하는 모든 것은 ALTER 명령어를 사용해 적용

3-1. 열 추가

  • ALTER TABLE 테이블명 ADD 컬럼명 컬럼정의
  • col2 컬럼 추가(INT형, NOT NULL 제약조건 존재)
-- alter
-- 컬럼 추가
ALTER TABLE tbl2 ADD col2 INT NOT NULL;

DESC tbl2;

3-2. 열 삭제

-- 컬럼 삭제
ALTER TABLE tbl2 DROP COLUMN col2;

DESC tbl2;

3-3. 열 이름 및 데이터 형식 변경

-- fk 컬럼을 change_fk 컬럼으로 변경(NOT NULL 제약조건 존재)

-- 컬럼 이름 및 컬럼 정의 변경
ALTER TABLE tbl2
CHANGE COLUMN fk change_fk INT NOT NULL;

DESC tbl2;

change_fk가 not null로 된 것을 볼 수 있음

3-4. 열 제약 조건 추가 및 삭제

--- 제약조건 제거(auto_increment로 인해 제거 불가)
ALTER TABLE tbl2 DROP PRIMARY KEY;

-- auto_increment 제거
-- AUTO_INCREMENT가 걸려 있는 컬럼은 PRIMARY KEY 제거가 안되므로 AUTO_INCREMENT를 MODIFY 명령어로 제거한다.
-- (MODIFY는 컬럼의 정의를 바꾸는 것이다.)
ALTER TABLE tbl2 MODIFY pk INT;

-- 다시 primary key 제거
ALTER TABLE tbl2 DROP PRIMARY KEY;

3-5. 컬럼 여러 개 추가하기

  • 한 번에 여러 컬럼 추가 가능
ALTER TABLE tb2
ADD col3 DATE NOT NULL,			
ADD col4 TINYINT NOT NULL; 

DESC tb2;

4. DROP

  • 테이블 삭제해주는 구문
  • DROP TABLE IF EXISTS 테이블명

5. TRUNCATE(절삭)

  • 테이블 안에서 데이터를 뜯어버림
  • 논리적으로 where절이 없는 delete 구문과 다를 바 없음
  • 하지만 어차피 데이터를 다 삭제할 경우 행마다 한 개씩 지워지는 DELETE보다 DROP이후 바로 테이블을 재생성 해주는 TRUNCATE가 훨씬 효율적으로 한번에 테이블을 초기화 시켜줌
  • auto_increment 컬럼이 있는 경우 시작 값도 0으로 바꿔줌
-- TRUNCATE
-- tnl6 테이블 생성
CREATE TABLE if NOT EXISTS tnl6(
	pk INT AUTO_INCREMENT PRIMARY KEY,
	fk INT,
	col1 VARCHAR(255),
	CHECK(col1 IN ('Y', 'N'))
) engine = INNODB;

DESC tnl6;

-- 4개 행 데이터 insert
INSERT INTO tnl6 VALUES (NULL, 10, 'Y');
INSERT INTO tnl6 VALUES (NULL, 20, 'Y');
INSERT INTO tnl6 VALUES (NULL, 30, 'Y');
INSERT INTO tnl6 VALUES (NULL, 40, 'Y');

-- 제대로 insert 되었는지 확인
SELECT * FROM tnl6;

-- 테이블 초기화 하기
-- TRUNCATE TABLE tb6;
TRUNCATE tnl6;    -- TABLE 키워드 생략 가능
profile
나는 할 수 있다...!

0개의 댓글