[MySQL] DDL, DML 정리

Jaehyeong Kwon·2022년 8월 5일
0

데이터베이스

목록 보기
3/10

Database 관련 명령어

1. Database 생성

데이터가 저장되는 테이블들을 모아놓은 논리적 공간을 Database라 합니다.

CREATE database 데이터베이스명;

  1. Database 사용 선언

어떤 데이터베이스를 사용할 것인지 선언합니다.

USE 데이터베이스명;

  1. Database 목록 조회

SHOW databases;

  1. Database 삭제

DROP database 데이터베이스명;


테이블 관련 명령어

테이블 추가

테이블을 생성하는 명렁어의 기본 구조는 CREATE TABLE 테이블명 (컬럼, 컬럼, 컬럼); 입니다.

컬럼을 명시하는 괄호 () 안에는 필드명/ 자료형/ 제약조건 의 형식을 갖습니다.
필드명은 자신이 직접 작성하며, 일반적으로 snake case를 사용합니다.

자료형의 종류는 다음과 같습니다.

  • INT : 정수
  • DOUBLE : 실수
  • VARCHAR(정수) : 문자열
  • DATE : YYYY-MM-DD format
  • TIME : HH:MM:SS format
  • ENUM : enum으로 명시된 값만 입력될 수 있음

제약 조건의 종류는 다음과 같은 것들이 있습니다.

  • NOT NULL : 반드시 입력해야하는 컬럼
  • AUTO_INCREMENT : 자동으로 숫자가 증가하도록 만듬 (PK)
  • PRIMARY KEY : 기본 키로 지정
  • DEFAULT : 기본 값을 설정
  • UNIQUE : 중복되지 않도록 함

테이블 조회

  1. DESC
    desc는 스키마( 테이블의 컬럼명과 컬럼들의 제약조건 정보) 를 볼 수 있는 명령어입니다.

DESC 테이블명;

  1. SHOW
    database의 모든 테이블 조회

SHOW tables;


테이블 삭제

  1. DROP
    drop은 테이블을 통째로 삭제하는 명령어입니다.

DROP table 테이블명;

  1. TRUNCATE
    truncate는 테이블 정의는 남겨놓고 테이블에 존재하는 모든 데이터를 삭제하는 명령어입니다.

TRUNCATE table 테이블명;


테이블 정의 수정

테이블을 정의한 뒤 Alter 명령어를 통해 스키마를 수정할 수 있습니다.

  1. 컬럼 추가

테이블에 새로운 컬럼을 추가하는 명령어의 기본 구조는 ALTER TABLE 테이블명 ADD 컬럼명 데이터타입; 입니다.
아래는 products 테이블에 문자열 타입의 newColumn 컬럼을 추가하는 예제입니다.
기존의 데이터들은 newColumn 컬럼이 없었는데 갑자기 생긴 것이므로 newColumn의 값으로 Null이 할당됩니다.

ALTER TABLE products ADD newColumn varchar(20);

  1. 컬럼 타입 수정

테이블에 새로운 컬럼을 추가하는 명령어의 기본구조는 ALTER TABLE 테이블명 MODIFY 컬럼명 데이터타입; 입니다. 아래는 varchar(20)이였던 newColumn 컬럼의 자료형을 Integer로 수정하는 예제입니다.

ALTER TABLE products MODIFY newColumn Integer

  1. 컬럼명 수정

테이블에 새로운 컬럼을 추가하는 명령어의 기본 구조는 ALTER TABLE 테이블명 CHANGE 컬럼명 데이터타입; 입니다.
아래는 newColumn 컬럼명을 newnewColumn 컬럼명으로 수정하는 예제입니다.
기존의 정의를 유지하려면 이와 같이 새로운 컬럼의 이름만 작성하면 됩니다.

ALTER TABLE products CHANGE newColumn newnewColumn varchar(50);

  1. 컬럼 삭제

데이블에 기존 컬럼을 삭제하는 명령어의 기본 구조는 ALTER TABLE 테이블명 DROP 컬럼명; 입니다.
아래는 newColumn 컬럼명을 삭제하는 예제입니다.

ALTER TABLE products DROP newnewColumn;


데이터 관련 명령어

데이터 추가

데이터를 추가하는 명령어의 기본 구조는 INSERT INTO 테이블명 (컬럼, 컬럼, ...) VALUES (값, 값, ...);

  1. 컬럼 명시

아래는 products 테이블의 name, model_number, eries 컬럼에 데이터를 2개 추가하는 예제입니다.

INSERT INTO products (name, model_number, series) VALUES ("JAE", "0001", "A"), ("HYEONG", "0002", "b");

  1. 컬럼 생략
    모든 컬럼에 대한 데이터를 삽입하는 경우에는 컬럼명을 생략할 수 있습니다.

INSERT INTO products VALUES ("JAE", "0001", "A")

  1. 기본 값으로 추가
    특정 컬럼에 DEFAULT 제약 조건이 명시되어 있다면, 기본 값으로 데이터를 추가할 수 있습니다.

INSERT INTO proucts VALUES ("HYEONG", DEFAULT, "b");


데이터 조회

데이터를 조회하는 명령어의 기본 구조는 SELECT 컬럼, 컬럼, ... FROM 테이블명; 입니다.

  1. 모든 컬럼 조회
    아래는 products 테이블의 모든 컬럼들에 대한 데이터를 조회하는 예제입니다.

SELECT * FROM products;

  • 아스트리카는 와일드 카드로써 모든 컬럼을 의미합니다.
  1. 조건을 추가하여 조회
    어떤 조건으로 데이터를 조회하는 명령어의 기본 구조는 SELECT 컬럼, 컬럼, ... FROM 테이블명 WHERE 조건; 입니다.

SELECT * FROM products WHERE series="A";

  1. 조건을 추가하여 조회 - LIKE
    특정 문자열이 포함된 데이터만 조회할 수 있는데, 이를 유사 검색(LIKE 검색)이라 합니다.

`SELECT * FROM products WHERE series LIKE '%ti%';

  • '%ti%' 는 ti 옆으로 문자가 없거나, 어떤 문자든 상관없이 ti 문자열만 포함되어 있는 데이터를 검색하라는 의미입니다.
  • % 대신 _ 를 사용할 수 있습니다.
  • _는 1글자를 의미합니다.
  1. 데이터 정렬

특정 컬럼으로 데이터를 정렬하는 명령어의 기본 구조는 SELECT 컬럼, 컬럼, ... FROM 테이블명 ORDER BY 컬럼 ASC/DESC; 입니다.

ASC는 오름차순이며, DESC는 내림차순입니다.
아무것도 명시하지 않을 경우, ORDER BY는 기본 값으로 ASC가 적용됩니다.

SELECT * FROM products ORDER BY name ASC;

여러 컬럼에 대해 순차적으로 정렬 기준을 삼을 수 있습니다.

SELECT * FROM products ORDER BY name DESC, series;

  • Null 값이 포함되어 있는 경우 MySQL 에서는 NULL 을 가장 작은 값으로 취급합니다.
  • 정렬할 때 문자열은 사전식으로 이루어지며, 정수, 날짜 타입은 대소 관계로 이루어집니다.
  1. 조회 데이터 개수 건너뛰기/ 사이즈 조절
    검색되는 데이터의 개수를 제한하고 싶을 경우 LIMIT를 사용합니다.
    기본 구조는 SELECT 컬럼, 컬럼, ... FROM 테이블명 LIMIT 정수;

상위 2개의 데이터만 조회하는 예제입니다.

SELECT * FROM products LIMIT 2;

몇 개의 데이터를 건너 뛴후, 개수를 제한해서 검색할 수도 있다.
5개의 데이터를 건너뛴 뒤, 상위 2개의 데이터를 조회하는 예제입니다.

SELECT * FROM products LIMIT 5,2;

검색되는 데이터의 개수를 점프 (Skip) 하고 싶을 경우 OFFSET을 사용합니다. 기본 구조는 SELECT 컬럼, 컬럼, ... FROM 테이블명 OFFSET 정수;

SELECT * FROM products OFFSET 2;

  • offset과 limit을 이용하여, 게시판의 게시글 개수를 페이징할 수 있습니다.

데이터 수정

데이터를 수정하는 명령어의 기본 구조는 UPDATE 테이블명 SET 필드=값; 입니다.

예시

UPDATE products SET name='hihi', model_number=3 WHERE id=4;

  • MySQL 에서는 SET 내부가 한 번에 업데이트되는 것이 아니라, 순차적으로 업데이트됩니다.
  • 조건을 사용하지 않으면 테이블의 모든 데이터가 변경됩니다. (꼭 조심해야합니다.)

데이터 삭제

데이터를 삭제하는 명령어의 기본 구조는 DELETE FROM 테이블명 조건; 입니다.

아래는 products 테이블의 id가 1인 데이터를 삭제

DELETE FROM products WHERE id = 1;

  • 조건 (WHERE)을 사용하지 않으면 테이블의 모든 데이터가 삭제됩니다.

SELECT 명령어 유의 사항

해당 글에서 모든 문법을 다룬 것은 아니지만, 전체 쿼리를 보았을 때 작성 순서는 아래와 같습니다.

  1. SELECT
  2. FROM
  3. WHERE
  4. GROUP BY
  5. HAVING
  6. ORDER BY
  7. LIMIT

수행 순서는 다음과 같습니다.

  1. FROM
  2. WHERE
  3. GROUP BY
  4. HAVING
  5. ORDER BY
  6. SELECT
  7. LIMIT
profile
나무와 같이 성장하는 사람

0개의 댓글