다음과 같은 간단한 MySQL 쿼리를 실행하려고 합니다.
으아악하지만 다음과 같은 오류가 발생합니다:
오류 1064(42000): SQL 구문에 오류가 있습니다.
근처에서 사용할 올바른 구문은 MySQL 서버 버전 설명서를 확인하세요.'key) VALUES ('Tim', 'Florida', 42)'
라인 1
이 문제를 해결하는 방법은 무엇입니까?
P粉8113290342023-10-15 19:29:27
MySQL에서는 SELECT
、INSERT
、DELETE
와 같은 일부 단어가 예약어입니다. 이는 특별한 의미를 갖기 때문에 백틱으로 식별자를 묶지 않는 한 테이블 이름, 열 이름 또는 기타 유형의 식별자로 사용할 때마다 MySQL은 이를 구문 오류로 처리합니다.
공식 문서에 명시된 대로 10.2 스키마 개체 이름 em>(강조 추가):
키워드 및 예약어의 전체 목록은 10.3 키워드 및 예약어 섹션 에서 확인할 수 있습니다. 이 페이지에서 "(R)" 뒤에 오는 단어는 예약어입니다. 이 문제를 일으키는 경향이 있는 많은 예약어를 포함하여 일부 예약어가 아래에 나열되어 있습니다.
두 가지 옵션이 있습니다.
가장 간단한 해결책은 예약어를 식별자로 사용하지 않는 것입니다. 예약어가 아닌 열에 대한 다른 합리적인 이름을 찾을 수 있습니다.
이렇게 하면 몇 가지 장점이 있습니다.
이는 특정 식별자가 예약어라는 것을 잊어버렸거나 몰랐기 때문에 데이터베이스 작업을 하는 다른 개발자가 실수로 구문 오류를 작성할 가능성을 제거합니다. MySQL에는 많은 예약어가 있으며 대부분의 개발자가 그 예약어를 모두 아는 경우는 거의 없습니다. 처음부터 이러한 단어를 사용하지 않음으로써 자신이나 미래 개발자에게 함정을 만드는 것을 피할 수 있습니다.
식별자가 인용되는 방식은 SQL 언어마다 다릅니다. MySQL은 기본적으로 식별자를 인용하기 위해 백틱을 사용하지만, ANSI 호환 SQL(여기에 설명된 대로 실제로 ANSI SQL 모드의 MySQL)은 큰따옴표를 사용하여 식별자를 인용합니다. 따라서 식별자를 인용하기 위해 백틱을 사용하는 쿼리는 다른 SQL 방언으로의 이식성이 떨어집니다.
순전히 향후 오류의 위험을 줄이기 위해 이는 일반적으로 식별자를 백틱하는 것보다 더 현명한 접근 방식입니다.
테이블이나 열의 이름을 바꿀 수 없는 경우 앞서 인용한 `
10.2 스키마 개체 이름에서와 같이 문제의 식별자를 백틱()으로 묶습니다.
사용 예시(10.3 키워드 및 예약어에서 가져옴):
다시 말하지만, 질문의 쿼리는 다음과 같이 키워드 key
를 백틱으로 묶어서 수정할 수 있습니다.