본문 바로가기
Database

MySQL - SQL 기초 문법(1)

by DGK 2021. 11. 5.

 

데이터베이스 입문 수업을 듣고 중요한 내용을 정리했습니다.
개인 공부 후 자료를 남기기 위한 목적이므로 내용 상에 오류가 있을 수 있습니다.

 

SQL 기초 문법(MySQL)

MySQL을 사용하여, 데이터베이스을 만들고 테이블의 생성과 변경 방법을 연습하고자 한다.

 

SQL로 데이터베이스 다루기(생성, 목록보기, 사용, 삭제)

기본적으로 데이터베이스는 여러 개의 이름이 존재하며, 각 데이터베이스 이름 안에는 여러 개의 테이블이 존재한다.

 

 

  • 데이터베이스 생성
CREATE DATABASE mydata;

 

```

결과 :

13:27:21 CREATE DATABASE mydata 1 row(s) affected 0.0019 sec

 

```

 

참고로, CREATE SCHEMA mydata; 코드도 데이터베이스를 생성한다. (위의 예시 코드와 동일한 기능)

 

  • 데이터베이스 목록 보기
SHOW DATABASES;

 

```

결과 :

```

 

  • 데이터베이스 삭제
DROP DATABASE mydata;
SHOW DATABASES;

 

```

결과 :

```

 

만약, 존재하지 않는 데이터베이스를 삭제할 경우 에러가 발생한다. (SQL 프로그램 작동 중단)

 

[에러 발생]

13:40:29 DROP DATABASE mydata Error Code: 1008.

Can't drop database 'mydata'; database doesn't exist 0.00075 sec

 

DROP DATABASE IF EXISTS mydata;
SHOW DATABASES

 

```

결과 :

13:41:43 DROP DATABASE IF EXISTS mydata 0 row(s) affected, 1 warning(s): 1008 Can't drop database 'mydata'; database doesn't exist 0.0013 sec

 

```

 

IF EXISTS 코드를 추가하는 경우에는 존재하지 않는 데이터베이스를 삭제해도 에러가 발생하지 않는다.

(에러 대신 경고 알림, 프로그램 중단x)

 

  • 데이터베이스 사용
USE mydata;

 

```

결과 :

13:45:06 USE mydata 0 row(s) affected 0.00049 sec

 

```

 

특정 데이터베이스를 사용하기 위해서는 반드시 사용 전에 USE mydata; 코드를 입력해야 한다.(명령)

 

 

 

SQL로 테이블 다루기(생성, 조회)

테이블을 생성할 데이터베이스를 먼저 사용하겠다고 명령한 후에 해당 데이터베이스에서 테이블을 생성할 수 있다.

 

 

  • 테이블 생성
CREATE TABLE myproduct (
    MYKEY INT,
    PRODUCT_ID TEXT,
    TITLE TEXT,
    ORI_PRICE INT,
    DISCOUNT_PRICE INT,
    DISCOUNT_PERCNET INT,
    DELEVERTY TEXT,
    PRIMARY KEY(MYKEY)
);

 

```

결과 :

14:20:14 CREATE TABLE myproduct
(  MYKEY INT,     PRODUCT_ID TEXT,     TITLE TEXT,     ORI_PRICE INT,     DISCOUNT_PRICE INT,     DISCOUNT_PERCNET INT,     DELEVERTY TEXT,     PRIMARY KEY(MYKEY) ) 0 row(s) affected 0.011 sec

 

```

 

테이블을 생성하는 기본 문법은 다음과 같다.

 

   CREATE TABLE 테이블명 (

             컬럼명 데이터형,

             컬럼명 데이터형,

                      ˙˙˙

             PRIMARY KEY(기본키가 될 필드명)

   );

 

단, 데이터 타입의 문법이 존재한다. (아래의 참고 글에서 자세히 설명)

또한, PRIMARY KEY로 지정되면 해당 필드는 반드시 값이 존재해야 한다. (Null이 되면 안됨)

 

  • 테이블 조회
SHOW TABLES;

 

```

결과 :

14:20:16 SHOW TABLES 1 row(s) returned 0.0021 sec / 0.000018 sec

 

```

 

SHOW TABLES; 코드로 mydata 데이터베이스 안에 생성된 myproduct 테이블을 볼 수 있다.

 

DESC myproduct;

 

```

결과 :

14:20:37 DESC myproduct 7 row(s) returned 0.0053 sec / 0.000016 sec

 

```

 

DESC myproduct; 코드로 생성된 테이블의 구조를 자세하게 볼 수 있다.

 

  • 테이블 삭제
DROP TABLE myproduct;

 

```

결과 :

14:19:49 DROP TABLE myproduct 0 row(s) affected 0.0074 sec

 

```

 

앞서 설명했던 것과 동일하게, DROP TABLE IF EXISTS myproduct; 코드를 사용하면 삭제할 테이블이 존재하지

않더라도, 에러가 발생하지 않고 경고 알림만 뜬 채 프로그램이 그대로 실행된다.

 

 

전체 코드(데이터베이스 생성, 테이블 생성 및 조회)

CREATE DATABASE mydata;
USE mydata;

CREATE TABLE customer_db (
    no INT UNSIGNED NOT NULL AUTO_INCREMENT,
    name CHAR(20),
    age TINYINT,
    phone VARCHAR(20),
    email VARCHAR(20) NOT NULL,
    address VARCHAR(50),
    PRIMARY KEY(no)
);

SHOW TABLES;
DESC customer_db;

 

```

결과 :

CREATE DATABASE mydata 1 row(s) affected 0.0046 sec

 

USE mydata 0 row(s) affected 0.00049 sec

 

CREATE TABLE customer_db

(  no INT UNSIGNED NOT NULL AUTO_INCREMENT,     name CHAR(20),     age TINYINT,     phone VARCHAR(20),     email VARCHAR(20) NOT NULL,     address VARCHAR(50),     PRIMARY KEY(no) ) 0 row(s) affected 0.0097 sec

 

SHOW TABLES 2 row(s) returned 0.0019 sec / 0.000018 sec

 

DESC customer_db 6 row(s) returned 0.0024 sec / 0.000030 sec

 

```

 

 

참고 내용(데이터 타입 문법)

  • 숫자형 타입의 컬럼 정의(문법)

- CREATE TABLE 테이블명 (

        id INT [UNSIGNED] [NOT NULL] [AUTO_INCREMENT],

 

1. id는 컬럼명이며, 일반적으로 영어 소문자로 명명한다.

2. INT는 컬럼에 대한 숫자 데이터 타입을 선언한 것이다.

3. UNSIGNED는 숫자 타입의 옵션으로 예를들어 컬럼의 데이터 타입이 TINYINT 이면 0~255 수로 표현하겠다는

    의미이다.

    (ex. TINYINT로 데이터 타입을 지정 시 -128~ +127 수로 표현, TINYINT [UNSIGNED]로  지정 시 0~255 수로 표현)

4. NOT NULL은 데이터 입력 시, 해당 컬럼에 데이터가 반드시 입력되어야 한다는 것을 의미한다.

5. AUTO_INCREMENT는 테이블에 데이터 등록 시, 해당 컬럼은 자동으로 숫자가 1씩 증가하여 저장된다.

    또한, 해당 컬럼은 양의 정수만 등록할 수 있고 테이블 안에서 AUTO_INCREMENT 컬럼은 하나만 지정 가능하다.

 

* 참고로, PRIMARY KEY로 지정되는 칼럼에 주로 [UNSIGNED] [NOT NULL] [AUTO_INCREMENT]이 숫자 데이터

   타입과 함께 선언된다. (여기서 [UNSIGNED] [NOT NULL] [AUTO_INCREMENT]는 숫자 타입의 옵션 사항임)

 

 

  • 문자 타입의 컬럼 정의(문법)

- CREATE TABLE 테이블명 (

        name VARCHAR(50),

 

1. name은 컬럼명으로, 일반적으로 영어 소문자로 명명한다.

2. VARCHAR(n)은 컬럼에 대한 문자형 데이터 타입을 선언한 것이며, n은 해당 문자형 데이터가 저장되는 공간의

    크기를 의미한다. (ex. CHAR(5)이면 'name'은 정확히 5 byte 사용, CHAR(50)이면 50 byte 사용)

 

 

  • 시간 타입의 컬럼 정의(문법)

- CREATE TABLE 테이블명 (

        ts DATE,

 

1. ts는 컬럼명으로, 일반적으로 영어 소문자로 명명한다.

2. DATE는 컬럼에 대한 시간 데이터 타입을 선언한 것이다.

 

* 참고로, 시간형 데이터 타입을 사용하는 경우에는 데이터를 가져온 후 다시 문자형으로 변환해야 하는 과정을

   거쳐야 한다. 이러한 이유로, 시간과 날짜 데이터도 문자형 데이터 타입으로 선언한 후, 시간과 날짜 형식에 맞게

   데이터를 입력하는 경우가 많다.

 

 

 

SQL로 테이블 다루기(테이블 구조 수정)

테이블의 구조를 수정하는 문법은 다음과 같다.

 

  • 테이블에 새로운 컬럼 추가
ALTER TABLE customer_db ADD COLUMN model_type VARCHAR(10) NOT NULL;
DESC customer_db;

 

```

결과 :

ALTER TABLE customer_db ADD COLUMN model_type VARCHAR(10) NOT NULL 0 row(s) affected Records: 0  Duplicates: 0  Warnings: 0 0.049 sec

 

```

 

테이블에 새로운 컬럼을 추가하는 기본 문법

 

  - ALTER TABLE [테이블명] ADD COLUMN [추가할 컬럼명] [추가할 컬럼 데이터형]

 

 

  • 테이블의 컬럼 타입 변경
ALTER TABLE customer_db MODIFY COLUMN name VARCHAR(20) NOT NULL;
DESC customer_db;

 

```

결과 :

ALTER TABLE customer_db MODIFY COLUMN name VARCHAR(20) NOT NULL 0 row(s) affected Records: 0  Duplicates: 0  Warnings: 0 0.027 sec

 

```

 

테이블의 컬럼 타입을 변경하는 기본 문법

 

  - ALTER TABLE [테이블명] MODIFY COLUMN [변경할 컬럼명] [변경할 컬럼 타입]

 

 

  • 테이블의 컬럼 이름 변경
ALTER TABLE customer_db CHANGE COLUMN name modelname VARCHAR(30);
DESC customer_db;

 

```

결과 :

ALTER TABLE customer_db CHANGE COLUMN name modelname VARCHAR(30) 0 row(s) affected Records: 0  Duplicates: 0  Warnings: 0 0.015 sec

 

```

 

테이블의 컬럼 이름을 변경하는 기본 문법

 

  - ALTER TABLE [테이블명] CHANGE COLUMN [기존 컬럼 명] [변경할 컬럼 명] [변경할 컬럼 타입]

 

참고로, 컬럼의 이름을 변경하는 동시에 타입도 함께 변경할 수 있다.

 

 

  • 테이블의 컬럼 삭제
ALTER TABLE customer_db DROP COLUMN age;
DESC customer_db;

 

```

결과 :

ALTER TABLE customer_db DROP COLUMN age 0 row(s) affected Records: 0  Duplicates: 0  Warnings: 0 0.021 sec

 

```

 

테이블의 컬럼을 삭제하는 기본 문법

 

  - ALTER TABLE [테이블명] DROP COLUMN [삭제할 컬럼 명]

 

 

실습 예제

데이터베이스의 테이블을 생성·수정·삭제하는 예제이다.

 

USE mydata;
CREATE TABLE mytable(
    id INT UNSIGNED NOT NULL AUTO_INCREMENT,
    name VARCHAR(50) NOT NULL,
    modelnumber VARCHAR(15) NOT NULL,
    series VARCHAR(30) NOT NULL,
    PRIMARY KEY(id)
);
DESC mytable;
  
  
ALTER TABLE mytable MODIFY COLUMN name VARCHAR(20) NOT NULL;
ALTER TABLE mytable CHANGE COLUMN modelnumber model_num VARCHAR(10) NOT NULL;
ALTER TABLE mytable CHANGE COLUMN series model_type VARCHAR(10) NOT NULL;
DESC mytable;


DROP TABLE mytable;
SHOW TABLES;


CREATE TABLE mytable (
    id INT UNSIGNED NOT NULL AUTO_INCREMENT,
    name VARCHAR(20) NOT NULL,
    model_num VARCHAR(10) NOT NULL,
    model_type VARCHAR(10) NOT NULL,
    PRIMARY KEY(id)
);
DESC mytable;

 

```

결과 :

 

테이블 생성
테이블 칼럼 수정
테이블 삭제 후, 재생성

```

 

 

'Database' 카테고리의 다른 글

MySQL - pandas & pymysql 라이브러리  (0) 2021.11.10
MySQL - 파일로 실행하는 SQL  (0) 2021.11.10
MySQL - 파이썬으로 다루는 MySQL  (0) 2021.11.10
MySQL - SQL 기초 문법(2)  (0) 2021.11.06
MySQL - 데이터베이스와 RDBMS  (0) 2021.11.05

댓글