가장 대중적인 DB 90년대부터 개발됨

유료/무료버전 모두 존재

비영리 무료 커뮤니티버전(Full설치권장) https://dev.mysql.com/downloads/

<aside> 💡

사용법 with WorkBench

설정을 꺼주는게 작업할때 편함
바로위 MySQL Session 설정에서 쿼리타임 설정가능

설정을 꺼주는게 작업할때 편함 바로위 MySQL Session 설정에서 쿼리타임 설정가능

</aside>

카테고리 명령어 설명 사용DB Oracle SQL Server MySQL PostgreSQL
조건제어 IF(func, Tcase, Fcase) 조건 func이 참이면 Tcase, 거짓이면 Fcase 반환 MySQL 고유 O
IFNULL(func1, func2) func1이 NULL이면 func2 반환 MySQL 고유 O
NULLIF(func1, func2) func1과 func2가 같으면 NULL, 다르면 func1 반환 표준 SQL O O O O
문자처리 ASCII('문자') 문자열의 첫 문자의 ASCII 값을 반환 MySQL 고유 O
CHAR(num) ASCII 값을 문자로 변환 MySQL 고유 O
BIT_LENGTH(str) 문자열의 비트 길이를 반환 표준 SQL O O O O
CHAR_LENGTH(str) 문자열의 문자 수를 반환 (문자 개수) 표준 SQL O O O O
LENGTH(str) 문자열의 바이트 길이를 반환 MySQL 고유 O
CONCAT_WS(구분자, str1, ...) 문자열들을 구분자로 연결 MySQL 고유 O
ELT(pos, str1, str2, ...) 리스트에서 pos 위치의 문자열 반환 MySQL 고유 O
EFT(str, length) 문자열의 왼쪽에서 지정한 길이(length)만큼 반환 MySQL 고유 O
FIELD(target, str1, ...) 리스트에서 target의 위치 반환 (없으면 0 반환) MySQL 고유 O
FIND_IN_SET(target, list) 콤마로 구분된 문자열에서 target 위치 반환 (없으면 0 반환) MySQL 고유 O
INSTR(str, target) 문자열 str에서 target의 시작 위치 반환 MySQL 고유 O
LOCATE(target, str) target의 시작 위치 반환 (위와 동일하지만 순서가 반대) MySQL 고유 O
FORMAT(num, p) 숫자를 지정된 소수점 자리(p)와 함께 포맷팅 MySQL 고유 O
RIGHT(str, length) 문자열의 오른쪽에서 지정한 길이(length)만큼 반환 MySQL 고유 O
LEFT(str, length) 문자열의 왼쪽에서 지정한 길이(length)만큼 반환 MySQL 고유 O
REPEAT(str, times) 문자열을 지정한 횟수(times)만큼 반복 MySQL 고유 O
REPLACE(str, strTarget, strNew) 문자열에서 특정 부분(strTarget)을 새 문자열(strNew)로 교체 표준 SQL O O O O
REVERSE(str) 문자열을 반전 MySQL 고유 O
SPACE(length) 지정한 길이의 공백 문자열 생성 MySQL 고유 O
SUBSTRING(str, pos, length) 지정한 위치(pos)에서 시작하여 특정 길이(length)만큼 문자열 반환 표준 SQL O O O O
SUBSTRING_INDEX(str, 구분자, times) 구분자를 기준으로 문자열을 나누어 특정 위치(times)의 부분 문자열 반환 MySQL 고유 O
JSON_OBJECT()
JSON_ARRAY()
SET @json={}
SELECT JSON_VALID(@json) AS JSON_VALID;
SELECT JSON_SEARCH(@json) AS JSON_SEARCH;
SELECT JSON_EXTRACT(@json) AS JSON_EXTRACT;
SELECT JSON_INSERT(@json) AS JSON_INSERT;
SELECT JSON_REPLACE(@json) AS JSON_REPLACE;
SELECT JSON_REMOVE(@json) AS JSON_REMOVE;
DECLARE 액션 HANDLE FOR 오류조건 처리할_문장;

// error코드대응1
1146 // noTable-errorCode (serverside: 1000~1906 & 3000~3186, clientside: 2000~2062)
42S02 // noTable-statusCode

DROP PROCEDURE IF EXISTS errorProc1;

DELIMITER $$
CREATE PROCEDURE errorProc1()
BEGIN
	-- 예외처리추가: 
	DECLARE CONTINUE HANDLER FOR 1146 -- notable
	SELECT '처리중 관련 테이블 비존재' AS '메세지';
	-- 메인 실행부:
	SELECT * FROM noTBL; -- noTBL이 존재하지않는 경우 상정
END
$$ DELIMITER ;

CALL errorProc1(); -- 사용

// error코드대응2
DROP PROCEDURE IF EXISTS errorProc2;

DELIMITER $$ -- mysql문법임, //와 문법호환
CREATE PROCEDURE errorProc2()
BEGIN
	-- 예외처리추가: 
	DECLARE CONTINUE HANDLER FOR SQLEXCEPTION -- 오류가 발생해도 FOR SQLEXCEPTION코드 실행명령
	BEGIN
		SHOW ERRORS;
		SELECT '오류발생, 작업취소됨' AS '메세지';
		ROLLBACK;
	END;
	-- 메인 실행부:
	INSERT INTO userTBL VALUES('sglee', '이상구', 1988, '서울', NULL, NULL, 170, CURRENT_DATE()); 
END
$$ DELIMITER ;

CALL errorProc2(); -- 사용

// prepare
USE sqldb;
DROP TABLE IF EXISTS myTBL;
CREATE TABLE myTBL (
	mId INT AUTO_INCREMENT PRIMARY KEY, 
	mDate DATETIME
);

SET @varCurDate = CURRENT_TIMESTAMP();

PREPARE funcQuery FROM 'INSERT INTO myTBL VALUES(NULL, ?)';

EXCUTE funcQuery USING @varCurDate;

DEALLOCATE PREPARE funcQuery;

SELECT * FROM myTBL;
	

/*테이블 또는 뷰의 스키마 정보를 출력*/
DESCRIBE v_usertbl;

/*특정 뷰를 생성하는 SQL 문장을 보여줍니다*/
SHOW CREATE VIEW v_usertbl;

/*물리파일컨트롤*/
CREATE TABLESPACE ts_a ADD DATAFILE 'ts_a.ibd';
CREATE TABLESPACE ts_b ADD DATAFILE 'ts_b.ibd';
CREATE TABLESPACE ts_c ADD DATAFILE 'ts_c.ibd';

USE sqldb;
CREATE TABLE table_a (id INT) TABLESPACE ts_a;

CREATE TABLE table_b (id INT);
ALTER TABLE table_b TABLESPACE ts_b;

CREATE TABLE table_c (SELECT * FROM employees.salaries);
ALTER TABLE table_c TABLESPACE ts_c;

DROP TABLE  table_c ;
CREATE TABLE table_c (SELECT * FROM employees.salaries);
ALTER TABLE table_c TABLESPACE ts_c;