MySQL에서 예약어를 테이블 이름이나 열 이름으로 사용하여 발생하는 구문 오류
P粉726234648
P粉726234648 2023-10-14 22:05:30
0
1
661

다음과 같은 간단한 MySQL 쿼리를 실행하려고 합니다.

으아아아

하지만 다음과 같은 오류가 발생합니다:

오류 1064(42000): SQL 구문에 오류가 있습니다. 1행 근처에서 사용할 올바른 구문은 MySQL 서버 버전 설명서를 확인하세요. 'key) VALUES ('Tim', 'Florida', 42)'

이 문제를 해결하는 방법은 무엇입니까?
P粉726234648
P粉726234648

모든 응답(1)
P粉545910687

질문

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

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

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

  • 추가
  • 그리고
  • 작가
  • 전화
  • 사례
  • 조건
  • 삭제
  • 내림차순
  • 설명
  • from
  • 그룹
  • in
  • 색인
  • 삽입
  • 간격
  • 좋아요
  • 제한사항
  • 길다
  • 매치
  • 아니요
  • 옵션
  • 또는
  • 주문
  • 파티션
  • 랭킹
  • 참고자료
  • 선택
  • 테이블
  • To
  • 업데이트
  • 어디

솔루션

두 가지 옵션이 있습니다.

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

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

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

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

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

순전히 향후 오류의 위험을 줄이기 위해 이는 일반적으로 식별자를 백틱하는 것보다 더 현명한 접근 방식입니다.

2. 백틱 사용

테이블이나 열의 이름을 바꿀 수 없는 경우 앞서 인용한 `10.2 스키마 개체 이름에서와 같이 문제의 식별자를 백틱()으로 묶습니다.

사용 예시(10.3 키워드 및 예약어에서 가져옴):

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

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