Programming/Error

You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near

Jan92 2021. 9. 16. 00:13
반응형

MySQL, MariaDB KeyWords and Reserved Words

 

Caused by: java.sql.SQLSyntaxErrorException: 
(conn=18727) You have an error in your SQL syntax; 
check the manual that corresponds to your MariaDB server version for the right syntax to use near

(Error 중 일부)

 

JPA, MariaDB를 사용하고 있는 프로젝트에서 아직 초기 단계라 따로 테이블을 생성하지 않고 JPA의 @Entity 어노테이션을 통해 자체적으로 테이블이 create 되도록 해놓고 작업을 하던 중 발생한 에러입니다.

 

 

@Builder
@Getter
@NoArgsConstructor
@Entity
public class Payment extends BaseTime {

  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  private Long idx;

  // 결제 타입 (0: 수기 결제, 1: SMS 결제, 2: 단말기 결제)
  @Column
  private String paymentType;

  // 결제 금액
  @Column
  private Long amount;
  
  // 카드 번호
  @Column
  private String cardNumber;

  // 유효 기간 MmYy
  @Column
  private String expireMmYy;

  // 거래 상태 값 (0: 요청, 1: 성공, 2: 실패)
  @Column
  private String state = "0";

  // sms 발송을 위한 고유한 값
  @Column
  private String key;
}

(Entity 중 일부)

 

이러한 일반적인 Entity 였고, JPA에서 자동적으로 테이블을 생성하는 중 에러가 발생하였기 때문에 'syntax error' 라고 했지만 구문상의 문제는 아닐 거라고 생각했고, 결국 오류의 원인은 Entity 맨 아래에 있는 'key Column' 이였습니다.

 

 

- Reserved Word, 예약어

예약어(Reserved Word)는 컴퓨터 프로그래밍 언어에서 이미 문법적인 용도로 사용되고 있기 때문에 식별자로 사용할 수 없는 단어들이다. 예를 들어 C에서 return은 변수명이나 함수명으로 사용할 수 없다. 그런 단어들은 키워드이다.

(출처 wiki)

 

 

DataBase 역시 'Keyward'와 'Reserved Word' 가 존재합니다. MySQL DOCUMENTATION을 보면 버전 별로 키워드 및 예약어를 볼 수 있는데요.

 

많은 키워드 및 예약어 중 일부만 나열해보면 ALL, AS, CHECK, DEFAULT, FROM, KEY, KEYS, LIKE, OR 등이 있습니다.

 

 

MySQL :: MySQL 5.7 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

(더 자세한 키워드, 예약어 정보는 Documentation을 통해 확인할 수 있습니다.)

반응형