CREATE

MySQL을 실행시켰다고 해서 바로 데이터를 입력하는 것은 아니다. 입력할 데이터를 어느 데이터베이스에 저장할 것인지 지정하거나, 혹은 데이터베이스를 새로 생성해야 한다. 데이터베이스 목록에 무엇이 있는지는 SHOW DATABASES; 를 통해 알 수 있다.

SHOW DATABASES;

+--------------------+
| Database           |
+--------------------+
| mysql              |
| performance_schema |
| sys                |
| ...                |
+--------------------+

데이터베이스를 새로 생성하려면 CREATE를 하고, 사용할 데이터를 USE로 정한다. 아래는 ‘sample’이라는 이름을 가지는 데이터베이스를 생성하고 사용하도록 지정한 코드이다.

CREATE DATABASE sample;
USE sample;

-- Database changed


CREATE TABLE

테이블 목록도 데이터베이스와 비슷하게 SHOW TABLES; 명령으로 확인할 수 있다. 하지만 테이블에는 하나 이상의 칼럼이 필요하기 때문에 CREATE TABLE table_name; 명령만으로는 테이블을 생성할 수 없다. 칼럼을 포함한 기본 구조와 함께 생성해주어야 한다.

CREATE TABLE table_name (
    column1 data_type,
    column2 data_type,
    column3 data_type,
    ...    
);


다음은 아래와 같은 ‘students’ 테이블을 생성하는 SQL 문 예제이다.


테이블명 students, 칼럼의 이름(name, age, major), 데이터 타입(VARCHER, INT)을 포함해 테이블을 생성한다.

CREATE TABLE students (
    name VARCHAR(50),
    age INT(10),
    major VARCHAR(50)
);

MySQL에서 DESC table_name; 명령어를 통해 테이블의 구조를 확인할 수 있다.

DESC students;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| name  | varchar(50) | YES  |     | NULL    |       |
| age   | int(10)     | YES  |     | NULL    |       |
| major | varchar(50) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+


제약 조건 (Constraint)과 PRIMARY KEY

특정한 규칙을 가지는 데이터 테이블을 생성할 때에는 제약 조건이 필요하다. 제약 조건을 사용하면 데이터의 정확성과 신뢰성이 보장된다. 조건에 부합하지 않는 명령은 실행되지 않는다.

제약 조건은 칼럼 레벨이나 테이블 레벨이서 지정될 수 있다. 칼럼 레벨에서 지정할 경우 해당 칼럼에만 적용되고, 테이블 레벨에서 지정하면 전체 테이블에 지정된다.

CREATE TABLE table_name (
    column1 data_type [constraint],
    column2 data_type [constraint],
    ...    
);


제약 조건 설명
NOT NULL 칼럼이 NULL값을 가지지 않는다.
UNIQUE 칼럼의 모든 값이 다르다.
PRIMARY KEY NOT NULL과 UNIQUE의 속성을 모두 지닌다. 그렇기 때문에 테이블에서 각각의 레코드를 구분하는 기준이 된다.
FOREIGN KEY 다른 테이블의 고유 레코드를 식별한다.
CHECK 모든 값이 특정 조건을 만족하는지 확인한다.
DEFAULT 값이 지정되지 않았을 경우의 기본값을 설정한다.
INDEX 데이터베이스에서 데이터를 신속하게 생성하고 검색할 때 사용된다.


조건을 가지는 students 테이블을 생성한다. name을 PRIMARY KEY로 지정하고, age는 NOT NULL 조건을 통해 NULL 값을 가질 수 없도록 설정했다.

CREATE TABLE students (
    name VARCHAR(50) PRIMARY KEY,
    age INT(10) NOT NULL,
    major VARCHAR(50)
);

다시 DESC students; 를 입력해보면 name과 age의 Null과 Key 항목의 값이 바뀐 것을 볼 수 있다. name은 PRIMARY KEY이기 때문에 Null이 될 수 없으므로 자동으로 Null 항목 값이 NO로 지정되었다.

DESC students;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| name  | varchar(50) | NO   | PRI | NULL    |       |
| age   | int(10)     | NO   |     | NULL    |       |
| major | varchar(50) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+



References

  • https://www.techonthenet.com/mysql/datatypes.php
  • https://www.w3schools.com/Sql/default.asp