MySQL 구문 오류: 예약어를 테이블 또는 열 이름으로 사용하여 발생한 문제
P粉937769356
P粉937769356 2023-08-21 20:17:23
0
1
441
<p>다음과 같은 간단한 MySQL 쿼리를 실행하려고 합니다. </p> <pre class="brush:sql;toolbar:false;">user_details(사용자 이름, 위치, 키)에 삽입 VALUES('팀', '플로리다', 42) </pre> <p>하지만 다음과 같은 오류가 발생합니다. </p> <인용문> <p>ERROR 1064(42000): SQL 구문에 오류가 있습니다. <code>'key) 근처에서 사용할 올바른 구문은 MySQL 서버 버전에 해당하는 설명서를 확인하세요. VALUES ('Tim', ' 플로리다', 42)'</code> </인용문> <p>이 문제를 어떻게 해결하나요? </p>
P粉937769356
P粉937769356

모든 응답(1)
P粉541796322

질문

MySQL에서는 SELECTINSERTDELETE와 같은 일부 단어가 예약어입니다. 이는 특별한 의미를 갖기 때문에 백틱으로 식별자를 묶지 않는 한 테이블 이름, 열 이름 또는 기타 유형의 식별자로 사용할 때 MySQL은 이를 구문 오류로 처리합니다.

공식 문서에 명시된 대로 10.2 스키마 개체 이름 섹션(강조 추가):

키워드 및 예약어의 전체 목록은 섹션 10.3 키워드 및 예약어 에서 확인할 수 있습니다. 이 페이지에서 "(R)"이 붙은 단어는 예약어입니다. 이 문제를 일으킬 수 있는 많은 예약어를 포함하여 일부 예약어가 아래에 나열되어 있습니다.

  • 추가
  • 그리고
  • 이전
  • BY
  • 전화
  • 사례
  • 조건
  • 삭제
  • DESC
  • 설명
  • FROM
  • 그룹
  • IN
  • INDEX
  • 삽입
  • INTERVAL
  • IS
  • KEY
  • 좋아요
  • 한도
  • 길다
  • MATCH
  • 아니요
  • 옵션
  • 또는
  • 주문
  • 파티션
  • RANK
  • 참조
  • 선택
  • 테이블
  • TO
  • 업데이트
  • 어디

솔루션

두 가지 옵션이 있습니다.

1. 예약어를 식별자로 사용하지 마세요

가장 간단한 해결책은 예약어를 식별자로 사용하지 않는 것입니다. 예약어가 아닌 또 다른 합리적인 열 이름을 찾을 수 있을 것입니다.

이렇게 하면 몇 가지 장점이 있습니다.

  • 귀하 또는 다른 개발자가 특정 식별자가 예약어라는 사실을 잊어버렸거나 몰랐기 때문에 데이터베이스 작업을 하는 다른 개발자가 실수로 구문 오류를 작성할 가능성을 제거합니다. MySQL에는 많은 예약어가 있으며, 대부분의 개발자가 그 예약어를 모두 아는 경우는 거의 없습니다. 처음부터 이러한 단어를 사용하지 않음으로써 자신이나 미래 개발자에게 함정을 놓는 것을 방지할 수 있습니다.

  • 식별자가 인용되는 방식은 SQL 언어마다 다릅니다. MySQL은 기본적으로 백틱을 사용하여 식별자를 인용하지만, ANSI 호환 SQL(및 여기에 설명된 대로 ANSI SQL 모드의 MySQL)은 큰따옴표를 사용하여 식별자를 인용합니다. 따라서 식별자를 인용하기 위해 백틱을 사용하는 쿼리는 다른 SQL 방언으로의 이식성이 떨어집니다.

향후 오류 위험을 줄이려면 식별자를 백틱으로 인용하는 것보다 더 현명한 경우가 많습니다.

2. 백틱을 사용하세요

테이블이나 열의 이름을 바꿀 수 없는 경우 이전에 참조한 10.2 스키마 개체 이름 에 설명된 대로 백틱(`)으로 묶습니다.

다음은 사용법을 보여주는 예입니다(10.3 키워드 및 예약어에서 가져옴):

다시 말하지만, 질문의 쿼리는 다음과 같이 키워드 key를 백틱으로 묶어서 수정할 수 있습니다.

으아악
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿