정리/자바

[SQL 에러] You have an error in your SQL syntax; check the manual that corresponds to your MYSQL server version for the right syntax to use near... 에러

Absolute Devil Vivian 2018. 3. 27. 16:18

You have an error in your SQL syntax; check the manual thatcorresponds to your MYSQL server version for the right syntax to use near '블라블라'

 

이것은 무슨 에러일까? [너으 문법이 틀렸다.] 라는 뜻이다.나같은 경우,select * from imgtable where key=#key#이 문장에서 에러가 났었다.암만 검색해봐도 콜론이나 세미콜론이 문제라거나 그냥 문법오류입니다 ㅎㅎ 하는 블로그 뿐이라 답답해서 직접 해결하고 여기에 

적고있다.

맞는말이다. 문법오류. 맞는 말인데 뭐가 문법오류라는지 모르겠는 나같은 사람을 위해 이곳에 설명하려고 한다.

 

저 SQL문의 뜻은 이렇다. 'imgtable 이라는 테이블에서 key라는 컬럼의 값이 #key# 인 것을 전부 가져오너라 이놈아' 하는 뜻이다.

핵심만 말하자면 key 가 문제다. DB의 컬럼명은 예약어를 피해서 작성해야한다.. 시바 key가 예약어일줄 몰랐짘ㅋㅋㅋㅋ

 

MySQL의 예약어.

ADD ALL ALTER
ANALYZE AND AS
ASC ASENSITIVE BEFORE
BETWEEN BIGINT BINARY
BLOB BOTH BY
CALL CASCADE CASE
CHANGE CHAR CHARACTER
CHECK COLLATE COLUMN
CONDITION CONSTRAINT CONTINUE
CONVERT CREATE CROSS
CURRENT_DATE CURRENT_TIME CURRENT_TIMESTAMP
CURRENT_USER CURSOR DATABASE
DATABASES DAY_HOUR DAY_MICROSECOND
DAY_MINUTE DAY_SECOND DEC
DECIMAL DECLARE DEFAULT
DELAYED DELETE DESC
DESCRIBE DETERMINISTIC DISTINCT
DISTINCTROW DIV DOUBLE
DROP DUAL EACH
ELSE ELSEIF ENCLOSED
ESCAPED EXISTS EXIT
EXPLAIN FALSE FETCH
FLOAT FLOAT4 FLOAT8
FOR FORCE FOREIGN
FROM FULLTEXT GRANT
GROUP HAVING HIGH_PRIORITY
HOUR_MICROSECOND HOUR_MINUTE HOUR_SECOND
IF IGNORE IN
INDEX INFILE INNER
INOUT INSENSITIVE INSERT
INT INT1 INT2
INT3 INT4 INT8
INTEGER INTERVAL INTO
IS ITERATE JOIN
KEY KEYS KILL
LEADING LEAVE LEFT
LIKE LIMIT LINES
LOAD LOCALTIME LOCALTIMESTAMP
LOCK LONG LONGBLOB
LONGTEXT LOOP LOW_PRIORITY
MATCH MEDIUMBLOB MEDIUMINT
MEDIUMTEXT MIDDLEINT MINUTE_MICROSECOND
MINUTE_SECOND MOD MODIFIES
NATURAL NOT NO_WRITE_TO_BINLOG
NULL NUMERIC ON
OPTIMIZE OPTION OPTIONALLY
OR ORDER OUT
OUTER OUTFILE PRECISION
PRIMARY PROCEDURE PURGE
READ READS REAL
REFERENCES REGEXP RELEASE
RENAME REPEAT REPLACE
REQUIRE RESTRICT RETURN
REVOKE RIGHT RLIKE
SCHEMA SCHEMAS SECOND_MICROSECOND
SELECT SENSITIVE SEPARATOR
SET SHOW SMALLINT
SONAME SPATIAL SPECIFIC
SQL SQLEXCEPTION SQLSTATE
SQLWARNING SQL_BIG_RESULT SQL_CALC_FOUND_ROWS
SQL_SMALL_RESULT SSL STARTING
STRAIGHT_JOIN TABLE TERMINATED
THEN TINYBLOB TINYINT
TINYTEXT TO TRAILING
TRIGGER TRUE UNDO
UNION UNIQUE UNLOCK
UNSIGNED UPDATE USAGE
USE USING UTC_DATE
UTC_TIME UTC_TIMESTAMP VALUES
VARBINARY VARCHAR VARCHARACTER
VARYING WHEN WHERE
WHILE WITH WRITE
XOR YEAR_MONTH ZEROFILL

출처 : 제타위키

 

 

오라클의 예약어

ACCESS
ADD *
ALL *
ALTER *
AND *
ANY *
AS *
ASC *
AUDIT
BETWEEN *
BY *
CHAR *
CHECK *
CLUSTER
COLUMN
COMMENT
COMPRESS
CONNECT *
CREATE *
CURRENT *
DATE *
DECIMAL *
DEFAULT *
DELETE *
DESC *
DISTINCT *
DROP *
ELSE *
EXCLUSIVE
EXISTS
FILE
FLOAT *
FOR *
FROM *
GRANT *
GROUP *
HAVING *
IDENTIFIED
IMMEDIATE *
IN *
INCREMENT
INDEX
INITIAL
INSERT *
INTEGER *
INTERSECT *
INTO *
IS *
LEVEL *
LIKE *
LOCK
LONG
MAXEXTENTS
MINUS
MLSLABEL
MODE
MODIFY
NOAUDIT
NOCOMPRESS
NOT *
NOWAIT
NULL *
NUMBER
OF *
OFFLINE
ON *
ONLINE
OPTION *
OR *
ORDER *
PCTFREE
PRIOR *
PRIVILEGES *
PUBLIC *
RAW
RENAME
RESOURCE
REVOKE *
ROW
ROWID
ROWNUM
ROWS *
SELECT *
SESSION *
SET *
SHARE
SIZE *
SMALLINT *
START
SUCCESSFUL
SYNONYM
SYSDATE
TABLE *
THEN *
TO *
TRIGGER
UID
UNION *
UNIQUE *
UPDATE *
USER *
VALIDATE
VALUES *
VARCHAR *
VARCHAR2
VIEW *
WHENEVER *
WHERE
WITH *

오라클 예약어는 https://docs.oracle.com/cd/B19306_01/server.102/b14200/ap_keywd.htm#i690190 에서 복붙했는데,

*이 무슨 의미인지는 다음에 알아본다.

 

 

이거 외우면 편하기야하겠지만 컬럼명을 일정한 규칙으로 짜면 신경 덜 쓸 수 있다. 예를들어서,

key를 쓰고싶다. 여기에는 유저의 key를 담고싶다. 그러면 user_key 이런식으로.

귀찮다고? 컴퓨터는 당신의 귀찮음따위 신경안쓴다 하하

_________________________________________________

2023.03.09

이 글에 대한 검색 유입이 엄청 나다..

예약어가 좀 빡치긴해...