h2 database mode mysql (h2 mysql 모드)

h2 database mode mysql (h2 mysql 모드)

h2 database mode mysql (h2 mysql 모드)

h2 database Mysql 모드임에도 에러가 발생하는 경우에 대해서 알아보겠습니다.

Error

INSERT INTO test_table(
      column1,
      column2,
      column3,
      column4,
      column5,
      column6
  ) VALUES (
      #{column1},
      #{column2},
      #{column3},
      #{column4},
      #{column5},
      #{column6}
  )
  ON DUPLICATE KEY UPDATE
      column1 = #{column1},
      column2 = #{column2};
Cause: org.h2.jdbc.JdbcSQLSyntaxErrorException: Syntax error in SQL statement
...
ON[*] DUPLICATE KEY UPDATE

Reason

h2 databse의 경우, INSERT … DUPLICATE KEY UPDATE를 지원하지 않는다고 합니다. 하지만 방법은 있습니다. h2 의 Compatibility mode를 설정할 수 있습니다.

Solution

  1. configuration application.yml
datasource:
  driver-class-name: org.h2.Driver
  url: jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;MODE=MYSQL;
  username:
  password:
  schema: classpath:import.sql

위 방법이 안된다면…

  1. import.sql 커맨드 추가
SET MODE MYSQL;