MySQL에서 예약된 단어를 테이블 또는 열 이름으로 사용하여 구문 오류가 발생했습니다.
다음과 같이 간단한 MySQL 쿼리를 실행하려고 합니다.
INSERT INTO user_details (username, location, key)
VALUES ('Tim', 'Florida', 42)
그러나 다음과 같은 오류가 발생합니다.
ERROR 1064(42000):SQL 구문에 오류가 있습니다. MySQL 서버 버전에 해당하는 설명서에서 nears에서 사용할 올바른 구문을 확인하십시오.
'key) VALUES ('Tim', 'Florida', 42)'
1행에서
이 문제를 해결하려면 어떻게 해야 하나요?
문제
MySQL에서 다음과 같은 특정 단어가 있습니다.SELECT
,INSERT
,DELETE
등은 말을 아끼는 단어입니다.이들은 특별한 의미를 가지므로 MySQL은 식별자를 백틱으로 둘러싸지 않는 한 테이블 이름, 열 이름 또는 기타 종류의 식별자로 사용할 때마다 구문 오류로 간주합니다.
공식 문서에서 설명한 바와 같이 섹션 10.2 스키마 객체 이름(강조 추가):
데이터베이스, 테이블, 인덱스, 열, 별칭, 보기, 저장 프로시저, 파티션, 테이블스페이스 및 기타 개체 이름을 포함한 MySQL 내의 특정 개체를 식별자라고 합니다.
...
식별자에 특수 문자가 포함되어 있거나 예약된 단어인 경우 참조할 때마다 따옴표로 묶어야 합니다.
...
식별자 따옴표는 backtick(")입니다.
`
"):
키워드 및 예약어의 전체 목록은 섹션 10.3 키워드 및 예약어를 참조하십시오.그 페이지에서 (R) 뒤에 이어지는 단어는 예약어입니다.이 문제를 일으키는 경향이 있는 단어를 포함하여 일부 예약된 단어를 아래에 나열합니다.
- 더하다
- 그리고.
- 전에
- 타고
- 불러
- 사례.
- 조건.
- 삭제
- 설명
- 묘사하라
- 부터
- 그룹.
- 입력
- 색인
- 삽입
- 간격
- IS
- 열쇠
- 맘에 들다
- 제한.
- 긴
- 경기
- 것은 아니다.
- 선택
- 또는
- 주문
- 파티션
- 순위
- 레퍼런스
- 선택한다.
- 테이블
- 로.
- 갱신하다
- 어디에
솔루션
두 가지 옵션이 있습니다.
1. 예약어를 식별자로 사용하지 않는다.
가장 간단한 해결책은 단순히 식별자로 예약된 단어를 사용하지 않는 것입니다.예약어가 아닌 다른 적절한 컬럼 이름을 찾을 수 있습니다.
이 방법에는 몇 가지 이점이 있습니다.
그러면 특정 식별자가 예약된 단어임을 잊어버렸거나 알지 못하여 사용자 또는 데이터베이스를 사용하는 다른 개발자가 실수로 구문 오류를 작성할 가능성이 없어집니다.MySQL에는 많은 예약어가 있으며, 대부분의 개발자들은 그것들을 모두 알지는 못할 것이다.애초에 이러한 단어를 사용하지 않음으로써 자신이나 미래의 개발자에게 트랩을 남기는 것을 피할 수 있습니다.
식별자를 따옴표로 묶는 방법은 SQL 방언마다 다릅니다.MySQL은 기본적으로 식별자의 따옴표로 백틱을 사용하는 반면, ANSI 호환 SQL(그리고 ANSI SQL 모드의 MySQL)은 식별자의 따옴표로 큰따옴표를 사용합니다.따라서 백틱으로 식별자를 따옴표로 묶는 쿼리는 다른 SQL 방언으로 쉽게 이동할 수 없습니다.
순수하게 미래의 실수 위험을 줄이기 위해, 이것은 보통 식별자를 역인용하는 것보다 더 현명한 조치이다.
2. 백틱을 사용한다.
을 변경할 수 ( 「」 「」 「」 「」 「 」 。`
)는 10.2 Schema Object Name의 이전 인용문에서 설명한 바와 같습니다.
사용법을 보여주는 예(10.3 키워드 및 예약 단어에서 발췌):
mysql> CREATE TABLE interval (begin INT, end INT); ERROR 1064 (42000): You have an error in your SQL syntax. near 'interval (begin INT, end INT)'
mysql> CREATE TABLE `interval` (begin INT, end INT); Query OK, 0 rows affected (0.01 sec)
할 수 .key
하다
INSERT INTO user_details (username, location, `key`)
VALUES ('Tim', 'Florida', 42)"; ^ ^
언급URL : https://stackoverflow.com/questions/23446377/syntax-error-due-to-using-a-reserved-word-as-a-table-or-column-name-in-mysql
'programing' 카테고리의 다른 글
JSON을 Ordered Dict에 로드할 수 있습니까? (0) | 2022.11.03 |
---|---|
클래스 메서드를 콜백으로 사용하는 방법 (0) | 2022.11.03 |
열을 Base64에서 문자열로 업데이트(SQL 네이티브) (0) | 2022.11.03 |
b-nav-item의 부트스트랩-vue 문제, 색상을 변경할 수 없음 (0) | 2022.11.03 |
UUID는 언제 사용해야 합니까?uuid1() 대 uuid.python으로 uuid4()를 지정합니다. (0) | 2022.10.25 |