데이터베이스를 정의하는 언어로, 데이터 생성 / 수정 / 삭제 등 데이터의 전체 골격을 결정하는 역할의 언어이다.
CREATE TABLE if NOT EXISTS tb1 (
pk INT PRIMARY KEY,
fk INT,
col1 VARCHAR(255),
CHECK(col1 IN ('Y', 'N'))
) ENGINE = INNODB;
DESC tb1;

SELECT * FROM tb1;

자동으로 데이터에 숫자가 증가되도록 메겨주는 기능이다.
Primary Key는 삭제해도 그 숫자를 메꿔서 사용하는 방식이면 안 된다.
그래서 AUTO_INCREMENT 를 사용해서 pk에 넣어주면 편리하다.
CREATE TABLE tb2 (
pk INT PRIMARY KEY AUTO_INCREMENT,
fk INT,
col1 VARCHAR(255),
CHECK(col1 IN ('Y', 'N'))
) ENGINE = INNODB;
DESC tb2;

INSERT
INTO tb2
VALUES
(
NULL
, 2
, 'N'
);
위의 쿼리를 4번 실행하면 auto_increment 덕분에 자동으로 pk가 1씩 늘어나는 것을 확인할 수 있다.

테이블을 수정하는 역할로, 컬럼들을 추가 / 수정 / 삭제 또한 수정에 포함되기 때문에 범용성이 넓다.
add를 사용해서 컬럼을 추가해보자.
ALTER TABLE tb2 ADD col2 INT NOT NULL;

다시 컬럼을 지워보자.
ALTER TABLE tb2 DROP COLUMN col2;

처음 만들 때는 많은 것을 고려하고 만들어서 가능하면 ALTER를 사용하지 않는 것이 좋다.
ALTER는 고도화된 프로젝트에서나 사용하는 것이다.
ALTER TABLE tb2 CHANGE COLUMN fk change_fk INT NOT NULL;

Primary Key 를 제거하려면

이러한 에러 메세지가 뜬다.
ALTER TABLE tb2 DROP PRIMARY KEY;
어떻게 하면 될까?
우선 auto_increment부터 modify 로 변경해줘야 한다.
ALTER TABLE tb2 MODIFY pk INT;

Extra에 없어진 것이 보인다. 이제 primary key도 지워보자.
ALTER TABLE tb2 DROP PRIMARY KEY;

- TRUNCATE는 테이블의 데이터(데이터 및 관련 제약조건 관련 등 깔끔하게 제거) 초기화
-> create 명령어 때처럼 행 전체가 비워진다.
-> 자동 commit이 돼서 rollback이 안 된다.
- DELETE 는 TRUNCATE 처럼 데이터를 전체 삭제도 가능하지만, 조건을 걸어 일부 삭제도 가능하다.
->autocommit = on이면 자동 커밋돼서 TRUNCATE 와 (전체 - 일부) 차이뿐이다.
-> 자동 commit은 안 되기 때문에autocommit = off면 rollback도 가능하다.
- DROP 은 테이블 자체를 삭제
일단 임의의 테이블을 만들어봤다.
CREATE TABLE if NOT EXISTS tb3 (
pk INT AUTO_INCREMENT,
fk INT,
col1 VARCHAR(255), CHECK(col1 IN ('Y', 'N')),
PRIMARY KEY(pk)
) ENGINE = INNODB;
INSERT
INTO tb3
VALUES
(
NULL
, 2
, 'N'
);

이 상태에서 TRUNCATE 를 사용해보자.
TRUNCATE table tb3;

계정에게 DROP 권한이 있어야지 사용 가능하다.

참고 링크 : https://dev.mysql.com/doc/refman/8.4/en/truncate-table.html
DROP 후 CREATE 테이블하는 것처럼 진행된다고 생각을 하면 될 것 같다.