MySQL 데이터 관리; CRUD
이번 포스팅에서는 MySQL에 데이터베이스와 테이블을 생성하고 데이터를 추가, 조회, 갱신, 삭제하는 방법 (SQL 문법)을 다룬다.
데이터베이스 서버 안에는 데이터베이스들이 있고, 데이터베이스 안에는 테이블들이 존재하므로 순서는 다음과 같이
- 데이터베이스(스키마) 생성
- 테이블 생성
- 데이터 추가 (CRUD)
스키마 생성 및 사용
데이터베이스 생성, 삭제, 확인 및 사용하기
데이터베이스 생성
CREATE DATABASE database_name;
데이터베이스 삭제
DROP DATABASE database_name;
데이터베이스 확인
SHOW DATABASES;
또는
SHOW SCHEMAS;
데이터베이스 서버에 존재하는 데이터베이스들의 목록이 출력
데이터베이스 사용
USE database_name;
사용할 데이터베이스를 선택한다. 선택 안 하고도 사용할 수 있지만, 그럴 경우 항상 어떤 스키마인지 지정해줘야 함
테이블 생성
CREATE TABLE table_name(
column1 datatype(출력할 자릿수) NOT NULL ...,
...
PRIMARY KEY (column_name)
);
- 생성할 테이블의 이름과 구조를 선언한다.
- 테이블에 포함할 모든 column(열)들에 대해 이름, 자료형, 출력 자릿수 등을 지정한다.
- primary key 를 지정해 준다.
예시
CREATE TABLE topic(
id INT(11) NOT NULL AUTO_INCREMENT,
title VARCHAR(100) NOT NULL,
description TEXT NULL, created DATETIME NOT NULL,
author VARCHAR(15) NULL, profile VARCHAR(200) NULL PRIMARY KEY (id)
);
NOT NULL
: 비어 있으면 안 되는 값. 무조건 가지고 있어야 하는 값NULL
: 비어 있어도 OK
AUTO_INCREMENT
: 자동으로 숫자 증가.PRIMARY KEY
: 데이터들의 식별자. 중복 불가, 반드시 지정해야 한다.
CREATE 데이터 생성
테이블까지 만들었으니, 이제 데이터 추가하고 다뤄보자 (CRUD)
테이블 구조(타입) 보기
DESC table_name;
테이블 구조에 맞춰 데이터를 추가해야 한다. 이 명령어를 통해 자료형 확인
row 데이터 생성
INSERT INTO table_name (col1, col2, ...)
VALUES( value1, value2, ...);
추가할 row 데이터가 가지는 col 나열하고 해당하는 값들을 순서대로 나열한다.
INSERT INTO topic (title,description,created,author,profile) VALUES('MySQL','MySQL is ...',NOW(),'egoing','developer');
INSERT INTO topic (title,description,created,author,profile) VALUES('Oracle','Oracle is ...',NOW(),'egoing','developer');
...
이렇게 한 줄 한 줄 데이터를 추가한다 ~
READ 데이터 조회 - SELECT
SELECT col_name1, col_name2
[FROM table_name]
[GROUP BY col_name]
[ORDER BY col_name [ASC|DESC]]
[LIMIT offset, 조회할 행의 수];
SQL에서 데이터 조회는 select
명령어를 사용한다.
어떤 테이블에서 어떤 데이터들(column)을 조회할지 지정한다.
추가로 정렬이나 어디서부터 얼마나 조회할지도 지정할 수 있다.
모든 데이터 조회하기 - *
SELECT * FROM table_name;
Projection - column 선택해서 데이터 조회하기
SELECT id, title, author FROM topic;
id, title, author 행만 가져온다.
조건에 맞는 row들만 조회하기 - WHERE
SELECT id, title, author FROM topic WHERE author='abc';
author == 'abc'인 row만 출력한다. 이때 WHERE
는 FROM
뒤에 와야 한다
AND
, OR
를 이용해서 조건을 설정할 수도 있다.
데이터 grouping - GROUP BY
SELECT col_name FROM table_name GROUP BY 그룹핑할 기분 칼럼명;
SELECT sex FROM student GROUP BY sex;
sex라는 column 값이 중복되는 데이터들을 그룹화해서 출력 -> 남자 N명 여자 M명이더라도 '남자', '여자'라는 데이터만 각각 하나 출력
SELECT sex, sum(distance), avg(distance) FROM student GROUP BY sex;
성별별로 그룹화하여 각 그룹별 distance의 합, distance의 평균을 출력
데이터 정렬해서 조회하기 - ORDER BY
SELECT id, title FROM topic ORDER BY id DESC
id를 기준으로 데이터를 정렬한다.DESC
: 내림차순ASC
: 오름차순
SELECT * FROM student ORDER BY distance DESC, address ASC;
여러 정렬 조건 사용 가능. 앞에서부터 우선적으로.
distance 내림차순으로 정렬하고, 그중 distance가 같은 애들은 address 오름차순으로 정렬한다.
offset 지정 및 출력 데이터 개수 제한 - LIMIT
SELECT * FROM topic LIMIT offset, 출력할 행의 수
offset부터 출력할 행의 수만큼 데이터를 출력한다.
offset은 0부터 시작한다
SELECT * FROM topic LIMIT 2;
위에서부터 2개까지만 출력
SELECT * FROM topic 2, 4;
위에서부터 3번째 데이터(0, 1, 2)부터 4개 데이터 출력
UPDATE 데이터 업데이트
UPDATE table_name SET 변경할 열 이름='변경할 값' WHERE 조건
UPDATE topic SET description='Oracle is...', title='Oracle' WHERE id=2;
특정 row에서 변경할 값들을 지정해 준다. 이때 어떤 데이터를 수정할 건지 WHERE
지정 꼭 하기!! 빠뜨리면 재앙..!!
DELETE 데이터 삭제
테이블에서 특정 데이터 삭제하기 - DELETE
DELETE FROM table_name WHERE id=5;
삭제할 데이터 조건 - WHERE
지정 안 해주면 전체 데이터 삭제 된다.
테이블의 모든 데이터 삭제하기 - TRUNCATE
TRUNCATE table_name;
테이블의 전체 데이터를 삭제한다. 테이블을 삭제하는 건 아님.
전체 데이터를 삭제할 때 테이블 외부키가 없다면 DELETE(행단위 삭제)하는 것보다 훨씬 빠르다
테이블 삭제하기 - DROP
DROP TABLE table_name;
DROP TABLE IF EXISTS 'table_name';
데이터베이스를 삭제하는 건 DROP DATABASE
'Database' 카테고리의 다른 글
[MySQL] (0) | 2023.08.16 |
---|---|
데이터베이스와 CRUD (0) | 2023.08.15 |