Loading...
MySQL 9.5 Reference Manual 9.5의 1.7.1 MySQL Extensions to Standard SQL의 한국어 번역본입니다.
아래의 경우에 피드백에서 신고해주신다면 반영하겠습니다.
감사합니다 :)
MySQL Server는 다른 SQL DBMS에서는 찾아보기 힘든 몇 가지 확장을 지원합니다. 이러한 확장을 사용하면, 해당 코드는 다른 SQL 서버로 이식 가능하지 않을 가능성이 큽니다. 어떤 경우에는, 다음과 같은 형식의 주석을 사용하여 MySQL 확장을 포함하면서도 여전히 이식 가능한 코드를 작성할 수 있습니다:
1/*! MySQL-specific code */
이 경우, MySQL Server는 주석 안의 코드를 다른 SQL 문과 마찬가지로 파싱하고 실행하지만, 다른 SQL 서버는 이러한 확장을 무시해야 합니다. 예를 들어, MySQL Server는 다음 문에서 STRAIGHT_JOIN 키워드를 인식하지만, 다른 서버는 인식하지 않아야 합니다:
1SELECT /*! STRAIGHT_JOIN */ col1 FROM table1,table2 WHERE ...
! 문자 뒤에 버전 번호를 추가하면, 주석 안의 구문은 MySQL 버전이 지정된 버전 번호 이상인 경우에만 실행됩니다. 다음 주석에서 KEY_BLOCK_SIZE 절은 MySQL 5.1.10 이상 서버에서만 실행됩니다:
1CREATE TABLE t1(a INT, KEY (a)) /*!50110 KEY_BLOCK_SIZE=1024 */;
다음 설명은 카테고리별로 정리된 MySQL 확장을 나열합니다.
디스크 상에서의 데이터 조직
MySQL Server는 각 데이터베이스를 MySQL 데이터 디렉터리 아래의 하나의 디렉터리에 매핑하고, 데이터베이스 내의 테이블을 해당 데이터베이스 디렉터리 내의 파일 이름에 매핑합니다. 그 결과, 파일 이름이 대소문자를 구분하는 운영 체제(대부분의 Unix 시스템 등)에서 MySQL Server의 데이터베이스 및 테이블 이름은 대소문자를 구분합니다. Section 11.2.3, “Identifier Case Sensitivity”를 참조하십시오.
일반 언어 구문
기본적으로, 문자열은 '뿐만 아니라 "로도 둘러쌀 수 있습니다. ANSI_QUOTES SQL 모드가 활성화되어 있으면, 문자열은 '로만 둘러쌀 수 있고, 서버는 "로 둘러싸인 문자열을 식별자로 해석합니다.
\는 문자열에서 이스케이프 문자입니다.
SQL 문에서, db_name.tbl_name 구문을 사용하여 서로 다른 데이터베이스의 테이블에 액세스할 수 있습니다. 일부 SQL 서버도 동일한 기능을 제공하지만 이를 User space라고 부릅니다. MySQL Server는 다음과 같은 문에 사용되는 테이블스페이스를 지원하지 않습니다:
CREATE TABLE ralph.my_table ... IN my_tablespace.
SQL 문 구문
CREATE DATABASE,
DROP DATABASE,
ALTER DATABASE 문. Section 15.1.14, “CREATE DATABASE Statement”,
Section 15.1.28, “DROP DATABASE Statement”,
Section 15.1.2, “ALTER DATABASE Statement”를 참조하십시오.
DO 문.
쿼리 옵티마이저가 테이블을 어떻게 처리하는지에 대한 설명을 얻기 위한
EXPLAIN SELECT.
SET
문. Section 15.7.6.1, “SET Syntax for Variable Assignment”를 참조하십시오.
SHOW 문. Section 15.7.7, “SHOW Statements”를 참조하십시오. 많은 MySQL 전용
SHOW 문이 생성하는 정보는
SELECT를 사용하여
INFORMATION_SCHEMA를 쿼리함으로써 보다 표준적인 방식으로 얻을 수 있습니다. Chapter 28, INFORMATION_SCHEMA Tables를 참조하십시오.
LOAD DATA 사용. 많은 경우에 이 구문은 Oracle
LOAD DATA와 호환됩니다. Section 15.2.9, “LOAD DATA Statement”를 참조하십시오.
RENAME TABLE 사용. Section 15.1.41, “RENAME TABLE Statement”를 참조하십시오.
DELETE와
INSERT의 조합 대신
REPLACE 사용. Section 15.2.12, “REPLACE Statement”를 참조하십시오.
ALTER TABLE 문에서
CHANGE col_name,
DROP col_name 또는
DROP INDEX,
IGNORE 또는 RENAME 사용. 하나의
ALTER TABLE 문에서 여러 ADD,
ALTER, DROP, CHANGE 절 사용. Section 15.1.11, “ALTER TABLE Statement”를 참조하십시오.
인덱스 이름 사용, 컬럼 접두어에 대한 인덱스, 그리고
CREATE TABLE 문에서
INDEX 또는
KEY 사용. Section 15.1.24, “CREATE TABLE Statement”를 참조하십시오.
CREATE TABLE에서 TEMPORARY 또는 IF NOT EXISTS 사용.
DROP TABLE 및
DROP DATABASE에서 IF EXISTS 사용.
하나의 DROP TABLE 문으로 여러 테이블을 삭제하는 기능.
INSERT INTO tbl_name SET col_name = ...
구문.
SELECT 문에서 INTO OUTFILE 또는 INTO DUMPFILE 사용. Section 15.2.13, “SELECT Statement”를 참조하십시오.
SELECT 문에서 STRAIGHT_JOIN 또는
SQL_SMALL_RESULT 같은 옵션 사용.
GROUP BY 절에서 모든 선택된 컬럼을 명시할 필요가 없습니다. 이는 매우 특수하지만 꽤 일반적인 쿼리의 성능을 더 좋게 합니다. Section 14.19, “Aggregate Functions”를 참조하십시오.
GROUP BY뿐만 아니라 ORDER BY에도 ASC 및
DESC를 지정할 수 있습니다.
:= 할당 연산자를 사용하여 문 안에서 변수를 설정하는 기능. Section 11.4, “User-Defined Variables”를 참조하십시오.
데이터 타입
함수 및 연산자
다른 SQL 환경에서 마이그레이션하는 사용자를 돕기 위해, MySQL Server는 많은 함수에 대해 별칭을 지원합니다. 예를 들어, 모든 문자열 함수는 표준 SQL 구문과 ODBC 구문을 모두 지원합니다.
MySQL Server는 C 프로그래밍 언어에서와 같이
||,
&& 연산자를 논리 OR 및 AND로 인식합니다. MySQL Server에서는
||와
OR가 동의어이고,
&&와
AND도 동의어입니다. 이러한 편리한 구문 때문에, MySQL Server는 문자열 연결을 위한 표준 SQL
|| 연산자를 지원하지 않습니다. 대신
CONCAT()를 사용하십시오.
CONCAT()는 임의 개수의 인수를 받을 수 있으므로,
|| 연산자의 사용을 MySQL Server로 쉽게 변환할 수 있습니다.
_value_list_에 하나 이상의 요소가 있는
COUNT(DISTINCT value_list) 사용.
문자열 비교는 기본적으로 대소문자를 구분하지 않으며, 정렬 순서는 현재 문자 집합의 콜레이션에 의해 결정됩니다. 기본값은 utf8mb4입니다. 대소문자를 구분하는 비교를 수행하려면 컬럼을 BINARY 속성으로 선언하거나 BINARY 캐스트를 사용해야 합니다. 이렇게 하면 비교가 사전식 순서가 아닌, 기본 문자 코드 값을 사용하여 수행됩니다.
% 연산자는
MOD()의 동의어입니다. 즉,
N % M은
MOD(N,M)와 같습니다.
%는 C 프로그래머 및 PostgreSQL과의 호환성을 위해 지원됩니다.
=,
<>,
<=,
<,
>=,
>,
<<,
>>,
<=>,
AND,
OR,
LIKE
연산자는 SELECT 문에서 출력 컬럼 목록( FROM 왼쪽)에 있는 표현식에서 사용할 수 있습니다. 예를 들면:
1mysql> SELECT col1=1 AND col2=2 FROM my_table;
LAST_INSERT_ID() 함수는 가장 최근의
AUTO_INCREMENT 값을 반환합니다. Section 14.15, “Information Functions”를 참조하십시오.
LIKE는 숫자 값에도 사용할 수 있습니다.
확장 정규 표현식 연산자인
REGEXP 및
NOT REGEXP.
하나 또는 두 개보다 많은 인수를 사용하는
CONCAT() 또는
CHAR(). (MySQL Server에서는 이러한 함수가 가변 개수의 인수를 받을 수 있습니다.)
BIT_COUNT(),
CASE,
ELT(),
FROM_DAYS(),
FORMAT(),
IF(),
MD5(),
PERIOD_ADD(),
PERIOD_DIFF(),
TO_DAYS(),
WEEKDAY() 함수.
서브문자열을 제거하기 위한 TRIM() 사용. 표준 SQL은 단일 문자 제거만 지원합니다.
GROUP BY 함수인
STD(),
BIT_OR(),
BIT_AND(),
BIT_XOR(),
GROUP_CONCAT(). Section 14.19, “Aggregate Functions”를 참조하십시오.
1.7 MySQL Standards Compliance
1.7.2 MySQL Differences from Standard SQL