12. SQL_CALC_FOUND_ROWS 쿼리 힌트 , FOUND_ROWS() 함수는 더 이상 사용되지 않음
13. SELECT ... INTO 문에서 잠금 절 앞의 INTO는 더 이상 지원되지 않음
UNION 문의 경우 INTO를 포함하는 다음의 경우 사용되지 않음
쿼리 식의 후행 쿼리 블록에서 FROM 앞에 INTO를 사용
쿼리 식의 괄호로 묶인 후행 블록에서 FROM에 대한 위치에 관계없이 INTO를 사용
세부 정보
SELECT * FROM t1 FOR UPDATE INTO @myvar;
# 경고 발생
SELECT * FROM t1 INTO @myvar FOR UPDATE;
# UNION
SELECT 1234 UNION SELECT * FROM t1 INTO @myvar;
# 경고 발생
SELECT 1234 UNION SELECT * INTO @myvar FROM t1;
(SELECT 1234) UNION (SELECT * INTO @myvar FROM t1);
14. INSERT ... ON DUPLICATE KEY UPDATE 에서 새로운 행 값에 액세스하기 위해 VALUES()를 사용하는 것은 DBMS 업그레이드 후부터 사용되지 않음
세부 정보
INSERT INTO t1
SELECT c, c+d FROM t2
ON DUPLICATE KEY UPDATE b = VALUES(b);
INSERT INTO t1
SELECT * FROM (SELECT c, c+d AS e FROM t2) AS dt
ON DUPLICATE KEY UPDATE b = e;
15. JSON_TABLE()을 호출할 때 ON EMPTY 전에 ON ERROR를 지정하는 것은 SQL 표준에 위배되기 때문에 이 구문은 더 이상 사용되지 않으며, DBMS 업그레이드 후부터 경고 출력
세부 정보
SELECT * FROM
JSON_TABLE(
'[{"a":"3"},{"a":2},{"b":1},{"a":0},{"a":[1,2]}]',"$[*]"
COLUMNS(
rowid FOR ORDINALITY,
ac VARCHAR(100) PATH "$.a" DEFAULT '999' ON ERROR DEFAULT '111' ON EMPTY,
aj JSON PATH "$.a" DEFAULT '{"x": 333}' ON EMPTY,
bx INT EXISTS PATH "$.b"
)
) AS tt;
/*
+-------+------+------------+------+
| rowid | ac | aj | bx |
+-------+------+------------+------+
| 1 | 3 | "3" | 0 |
| 2 | 2 | 2 | 0 |
| 3 | 111 | {"x": 333} | 1 |
| 4 | 0 | 0 | 0 |
| 5 | 999 | [1, 2] | 0 |
+-------+------+------------+------+
*/
SELECT * FROM
JSON_TABLE(
'[{"a":"3"},{"a":2},{"b":1},{"a":0},{"a":[1,2]}]',"$[*]"
COLUMNS(
rowid FOR ORDINALITY,
ac VARCHAR(100) PATH "$.a" DEFAULT '111' ON EMPTY DEFAULT '999' ON ERROR,
aj JSON PATH "$.a" DEFAULT '{"x": 333}' ON EMPTY,
bx INT EXISTS PATH "$.b"
)
) AS tt;
16. Key 파티션에서 인덱스의 접두사가 있는 컬럼이 테이블 파티션 키의 일부로 사용 시 DBMS 업그레이드 후부터는 각 컬럼에 대해 경고 생성
세부 정보
CREATE TABLE t1 (
a VARCHAR(10000),
b VARCHAR(25),
c VARCHAR(10),
PRIMARY KEY (a(10), b, c(2))
) PARTITION BY KEY() PARTITIONS 2;
/* show warnings
Column 't1.a' having prefix key part 'a(10)' is ignored by the partitioning function. Use of prefixed columns in the PARTITION BY KEY() clause is deprecated and will be removed in a future release.
Column 't1.c' having prefix key part 'c(2)' is ignored by the partitioning function. Use of prefixed columns in the PARTITION BY KEY() clause is deprecated and will be removed in a future release.
*/
/* 실제 생성 테이블은 접두사가 없는 b 컬럼으로만 파티션키 생성
CREATE TABLE t1 (
a VARCHAR(10000),
b VARCHAR(25),
c VARCHAR(10),
PRIMARY KEY (a(10), b, c(2))
) PARTITION BY KEY(b) PARTITIONS 2;
*/
17. BINARY 연산자는 DBMS 업그레이드 후부터 더 이상 사용되지 않으며, 대신 CAST(... AS BINARY) 사용
18. 임의 개수의 및 구분 문자를 포함하는 DATE, TIME, DATETIME 및 TIMESTAMP 리터럴 값에 다음 값 중 하나가 포함될 때마다 경고 발생
하나 이상의 비표준 구분 기호 문자
초과 구분 문자
공백 문자 이외의 공백(' ', 0x20)
초과 공백 문자
세부 정보
SELECT DATE'2022@12@31';
/* 'YYYY-MM-DD' 또는 'YY-MM-DD' 형식 인식
+------------------+
| DATE'2022@12@31' |
+------------------+
| 2022-12-31 |
+------------------+
*/
/* 대시(-) 이외의 문자 사용 시 경고 발생
Delimiter '@' in position 4 in datetime value '2022@12@31' at row 1 is deprecated. Prefer the standard '-'.
*/
SELECT TIMESTAMP'2022^12^31 11*30*45';
/* 'YYYY-MM-DD hh:mm:ss' 또는 'YY-MM-DD hh:mm:ss' 형식 인식
+--------------------------------+
| TIMESTAMP'2022^12^31 11*30*45' |
+--------------------------------+
| 2022-12-31 11:30:45 |
+--------------------------------+
*/
/* 날짜 부분에 대시(-)와 시간 부분에 콜론(:) 이외의 구분 기호로 사용 시 경고 발생
Delimiter '^' in position 4 in datetime value '2022^12^31 11*30*45' at row 1 is deprecated. Prefer the standard '-'.
*/
SELECT TIMESTAMP'2012-12-31 11-30-45';
/*
+----------------------------------+
| TIMESTAMP'2022-12-31 11-30-45' |
+----------------------------------+
| 2022-12-31 11:30:45 |
+----------------------------------+
*/
/* 과도한 공백 문자가 있으면 경고 발생
Delimiter ' ' in position 11 in datetime value '2022-12-31 11-30-45' at row 1 is superfluous and is deprecated. Please remove.
*/
SELECT TIMESTAMP'2022-06-06 \
11:15:25';
/*
+--------------------------------+
| TIMESTAMP'2022-06-06
11:15:25' |
+--------------------------------+
| 2022-06-06 11:15:25 |
+--------------------------------+
*/
/* 공백 문자 이외의 공백 문자가 사용될 때 경고
Delimiter '\n' in position 10 in datetime value '2022-06-06 11:15:25' at row 1 is deprecated. Prefer the standard ' '.
*/
SELECT TIMESTAMP'2022!-12-31 11:30:45';
/* 구분 기호, 공백 또는 둘 다에 여러 문제가 존재 시 하나의 경고만 발생
+----------------------------------+
| TIMESTAMP'2022!-12-31 11:30:45' |
+----------------------------------+
| 2022-12-31 11:30:45 |
+----------------------------------+
*/
/*
Delimiter '!' in position 4 in datetime value '2022!-12-31 11:30:45' at row 1 is deprecated. Prefer the standard '-'.
*/