본문 바로가기
Database

MySQL, Spring 프로젝트 연동시 예약어 문제

by hseong 2023. 4. 12.
언젠가는 상위 버전으로 업그레이드할 수 있으므로 향후 예약어도 살펴보는 것이 좋습니다. 이러한 단어는 상위 버전의 MySQL을 다루는 설명서에서 찾을 수 있습니다. 
(MySQL 공식 문서 9.3 Keywords and Reserved Words 중)(DeppL 번역)

 

일반적으로 group 이라는 이름은 대표적인 예약어 중 하나이다. 때문에 JPA를 배울때도 예제 프로젝트에서 @Table(name = "groups") 라는 애노테이션은 항상 따라다녔다.

 

이번 프로젝트에도 Group 이라는 엔티티가 포함되어 있어 @Table(name = "groups") 애노테이션을 통해서 테이블 이름에 예약어를 사용하지 않도록 하였고, H2 내장 DB에서도 잘 작동되는 것을 확인하였다.

Caused by: java.sql.SQLSyntaxErrorException: 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 'groups (
       group_id bigint not null auto_increment,
        category varc' at line 1

 

그러나 MySQL 연동시에 지속적으로 오류가 발생하면서 groups 테이블을 만드는데 지속적으로 오류가 발생함을 확인하였다. 구글링을 통해 'mysql 예약어' 라는 검색어로 확인해도 최상단에 나열된 사이트들에서는 groups라는 예약어는 찾아볼 수 없었다.

 

그래서 MySQL 공식 문서에서 직접 예약어 목록을 확인해보니...

 

MySQL :: MySQL 8.0 Reference Manual :: 9.3 Keywords and Reserved Words

9.3 Keywords and Reserved Words Keywords are words that have significance in SQL. Certain keywords, such as SELECT, DELETE, or BIGINT, are reserved and require special treatment for use as identifiers such as table and column names. This may also be true

dev.mysql.com

  • GROUP (R)
  • GROUPING (R); added in 8.0.1 (reserved)
  • GROUPS (R); added in 8.0.2 (reserved)
  • GROUP_REPLICATION

 

상기한대로 8.0.2 버전부터 groups 라는 예약어가 새롭게 추가된 것을 확인할 수 있었다.

이에 따라 Group 엔티티의 @Table(name = "groups") 대신 @Table(name = "study_group")으로 매핑할 테이블 이름을 변경해주니 오류도 발생하지 않고 잘 작동하는 것을 확인하였다.

'Database' 카테고리의 다른 글

[MySQL] InnoDB 스토리지 엔진 아키텍처  (0) 2024.06.09
[MySQL] MySQL 엔진 아키텍처  (0) 2024.06.09
[MySQL] 옵티마이저의 데이터 처리 방식  (2) 2024.05.15
정규화란 무엇인가  (0) 2023.03.22
함수 종속  (0) 2023.03.19