데이터베이스 생성하기

CREATE SCHEMA nodejs; --nodejs라는 이름의 데이터베이스를 생성.

USE nodejs;  --nodejs데이터베이스를 사용하겠다 라고 MySQL에 알림.

데이터베이스 삭제

drop database nodejs;  --nodejs라는 이름의 데이터베이스 삭제

테이블 생성하기

mysql> CREATE TABLE nodejs.users (
    -> id INT NOT NULL AUTO_INCREMENT,
    -> name VARCHAR(20) NOT NULL,
    -> age INT UNSIGNED NOT NULL,
    -> married TINYINT NOT NULL,
    -> comment TEXT NULL,
    -> create_at DATETIME NOT NULL DEFAULT now(),
    -> PRIMARY KEY(id),
    -> UNIQUE INDEX name_UNIQUE (name ASC))
    -> COMMENT = '사용자 정보'
    -> DEFAULT CHARSET=utf8
    -> ENGINE=InnoDB;
Query OK, 0 rows affected (0.03 sec)
mysql> CREATE TABLE nodejs.comments (
    -> id INT NOT NULL AUTO_INCREMENT,
    -> commenter INT NOT NULL,
    -> comment VARCHAR(100) NOT NULL,
    -> created_at DATETIME NOT NULL DEFAULT now(),
    -> PRIMARY KEY(id),
    -> INDEX commenter_idx (commenter ASC),
    -> CONSTRAINT commenter
    -> FOREIGN KEY (commenter)
    -> REFERENCES nodejs.users (id)
    -> ON DELETE CASCADE
    -> ON UPDATE CASCADE)
    -> COMMENT = '댓글'
    -> DEFAULT CHARSET=utf8
    -> ENGINE=InnoDB;
Query OK, 0 rows affected (0.03 sec)

CREATE TABLE 데이터베이스명.테이블명 테이블을 생성하는 명령어
use nodejs를 했으니 데이터베이스 명은 생략 가능
한 줄에 하나씩 콤마(,)로 구분해 컬럼을 만들었음.

테이블 삭제

DROP TABLE 테이블명

기본키 지정

PRIMARY KEY(컬럼명)

외래키 지정

CONSTRAINT 제약조건명 FOREIGN KEY (컬럼명) REFERENCES 참고하는테이블 (컬럼명)

ON UPDATE와 ON DELETE는 모두 CASCADE로 설정 : 사용자 정보가 수정되거나 삭제되면 그것과
연결된 댓글 정보도 같이 수정하거나 삭제한다는 뜻입니다. 그래야 데이터가 불일치하는 현상이 일어나지 않습니다.

만들어진 테이블 확인하는 명령어

mysql> DESC users;
+-----------+------------------+------+-----+-------------------+----------------+
| Field     | Type             | Null | Key | Default           | Extra          |
+-----------+------------------+------+-----+-------------------+----------------+
| id        | int(11)          | NO   | PRI | NULL              | auto_increment |
| name      | varchar(20)      | NO   | UNI | NULL              |                |
| age       | int(10) unsigned | NO   |     | NULL              |                |
| married   | tinyint(4)       | NO   |     | NULL              |                |
| comment   | text             | YES  |     | NULL              |                |
| create_at | datetime         | NO   |     | CURRENT_TIMESTAMP |                |
+-----------+------------------+------+-----+-------------------+----------------+
6 rows in set (0.01 sec)

테이블 제거

mysql> DROP TABLE users;

테이블 확인

mysql> SHOW TABLES;
+------------------+
| Tables_in_nodejs |
+------------------+
| comments         |
| users            |
+------------------+
2 rows in set (0.00 sec)

컬럼명 변경

ALTER TABLE todos CHANGE completed done TINYINT(1);

컬럼 타입 변경

mysql> ALTER TABLE todos MODIFY title varchar(400);
Query OK, 0 rows affected (0.13 sec)
Records: 0  Duplicates: 0  Warnings: 0

컬럼 순서 변경

mysql> ALTER TABLE todos MODIFY completed TINYINT(1) AFTER UserId;
Query OK, 0 rows affected (0.06 sec)
Records: 0  Duplicates: 0  Warnings: 0

이 외에도 컬럼 순서 바꾸기, 디폴트 값 변경, 컬럼 추가하기 등등

레퍼런스