반응형

데이터베이스

데이터베이스 조회

SHOW DATABASES;

데이터베이스 선택

USE example_db;

지원하는 인코딩 확인

SHOW VARIABLES LIKE 'c%';

데이터베이스 생성

CREATE DATABASE example_db DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;

데이터베이스 수정

ALTER DATABASE example_db DEFAULT CHARACTER SET utf8;

데이터베이스 삭제

DROP DATABASE example_db;

테이블

테이블 조회

SHOW TABLES;

테이블 정보 확인

DESC zip_info;

생성

CREATE TABLE vote
(
    voteSeq          BIGINT UNSIGNED AUTO_INCREMENT,
    voteType         VARCHAR(10)     NOT NULL, # ONCE, DAILY
    voteTitle        VARCHAR(500)    NOT NULL,
    voteCount        BIGINT UNSIGNED NOT NULL,
    voteStartDate    DATETIME        NOT NULL,
    voteEndDate      DATETIME        NOT NULL,
    registrationDate DATETIME        NOT NULL,
    modificationDate DATETIME        NOT NULL,
    PRIMARY KEY (voteSeq)
);

CREATE TABLE voteItem
(
    voteSeq       BIGINT UNSIGNED  NOT NULL,
    voteItemSeq   BIGINT UNSIGNED AUTO_INCREMENT,
    voteItemTitle VARCHAR(500)     NOT NULL,
    voteItemCount BIGINT UNSIGNED  NOT NULL,
    voteItemOrder TINYINT UNSIGNED NOT NULL,
    PRIMARY KEY (voteItemSeq),
    FOREIGN KEY (voteSeq) REFERENCES vote (voteSeq)
);

삭제

DROP TABLE vote;

인덱스

테이블 생성시 인덱스 추가

CREATE TABLE user
(
    userSeq  BIGINT UNSIGNED AUTO_INCREMENT,
    id       VARCHAR(100) NOT NULL,
    password VARCHAR(200) NOT NULL,
    role     VARCHAR(20)  NOT NULL,
    PRIMARY KEY (userSeq),
    UNIQUE INDEX (id)
);

인덱스 검색

SHOW INDEX FROM [테이블명];

인덱스 추가

ALTER TABLE [테이블명] ADD INDEX [인덱스명] ([칼럼리스트]);

유니크 인덱스 추가

ALTER TABLE [테이블명] ADD UNIQUE INDEX [인덱스명] ([칼럼리스트]);

인덱스 삭제

ALTER TABLE [테이블명] DROP INDEX [인덱스명];

컬럼

칼럼 추가

ALTER TABLE [테이블명] ADD [컬럼명] [타입명] AFTER [위치할컬럼명];

칼럼 변경

ALTER TABLE [테이블명] CHANGE [기존컬럼명] [새컬럼명] [새자료형];

칼럼 삭제

ALTER TABLE [테이블명] DROP [칼럼명];

기타

날짜 포맷 변환 후 조회

SELECT DATE_FORMAT(datetime, '%Y-%m-%d') FROM user

조건별 데이터 처리 후 조회

SELECT age, IF(age > 0 AND age < 20, 'young', 'old') AS status FROM user
SELECT name, IF(name REGEXP 'Tom|John', 'O', 'X') AS status FROM user
SELECT IFNULL(age, 0) FROM user

특정 시간에 저장된 데이터 조회

  • 날짜 상관 없이 9시에 등록된 사용자 조회
  • register_datetime은 DATETIME 타입
SELECT * FROM user WHERE HOUR(register_datetime) = 9

두 정수값 범위 사이의 값을 갖는 가상 테이블 조회

  • 0시부터 23시까지의 데이터를 가상으로 만들어 조회
WITH RECURSIVE HOURS AS
(
    SELECT 0 AS HOUR
    UNION ALL
    SELECT HOUR + 1 FROM HOURS WHERE HOUR < 23
)

SELECT * FROM HOURS

문자열 split

SELECT SUBSTRING_INDEX('2018-04-02', '-', 1);   #2018
SELECT SUBSTRING_INDEX('2018-04-02', '-', 2);   #2018-04
SELECT SUBSTRING_INDEX('2018-04-02', '-', -1);  #02

문자열 substring

SELECT SUBSTRING('20180401', 1, 4);     #2018
SELECT SUBSTRING('20180401', 5, 2);     #04
SELECT SUBSTRING('20180401', 7, 2);     #01

문자열 concat

# MySQL
SELECT CONCAT('A', 'B', 'C'); #ABC

DATETIME

-- add date
SELECT DATE_ADD(NOW(), INTERVAL -7 DAY);
SELECT DATE_ADD(NOW(), INTERVAL +7 HOUR);

-- datetime to string
SELECT DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%s');

-- string to datetime
SELECT STR_TO_DATE('2020-01-01', '%Y-%m-%d');

외부 접속 가능한 계정 추가

  • 8버전 미만
    GRANT ALL PRIVILEGES ON *.* TO 'ubuntu'@'%' IDENTIFIED BY '123456';
    
    FLUSH PRIVILEGES;
    
    SELECT * FROM mysql.user;
    
  • 8버전 이상
    CREATE USER 'ubuntu'@'%' IDENTIFIED BY '123456';
    GRANT ALL PRIVILEGES ON *.* TO 'ubuntu'@'%';
    -- GRANT ALL PRIVILEGES ON my_test_db.* TO 'ubuntu'@'%';
    FLUSH PRIVILEGES;
    
    SELECT * FROM mysql.user;

쿼리 실행 이력 확인

# 로그 입력 방식 확인 (default: FILE)
SELECT @@GLOBAL.log_output;
# 로그 활성화 여부 확인 (default: 0)
SELECT @@GLOBAL.general_log;

# 테이블에 쌓아 쿼리로 이력을 조회할 수 있도록 설정 변경
SET GLOBAL log_output = 'table';
SET GLOBAL general_log = 1;

# 이력 확인
SELECT * FROM mysql.general_log;

# 원복
SET GLOBAL log_output = 'file';
SET GLOBAL general_log = 0;
TRUNCATE mysql.general_log;

로그 파일 위치 확인

SHOW VARIABLES LIKE 'general_log%';
반응형

'Development > MySQL' 카테고리의 다른 글

[MySQL] Storage Engine  (0) 2020.12.29
[MySQL] Transaction Isolation Level  (0) 2020.12.29
[MySQL] 설치하기  (0) 2019.09.29
[Database] 옵티마이저  (0) 2018.07.15
[Database] 정규화  (0) 2018.07.15

+ Recent posts