반응형
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 등이 있습니다.
(더 자세한 키워드, 예약어 정보는 Documentation을 통해 확인할 수 있습니다.)
반응형