2017-12-19 5 views
1

INTO REPLACE :HSQLDB :에서

HyperSQL 데이터베이스 엔진 2.4.0

Chapter 12. Compatibility With Other DBMS HyperSQL 사용 설명서 :

HyperSQL 지원 및 INSERT 교체, 무시하고 중복 ON 변환 INSERT의 KEY UPDATE 변형을 예측 가능 및 오류가없는 작업 으로 업데이트합니다.

INSERT IGNORE를 사용하면 삽입 된 행 중 하나가 PRIMARY KEY 또는 UNIQUE 제약 조건을 위반하면 해당 행이 삽입되지 않습니다. 그런 다음 나머지 행은 다른 문자열 (예 : )이 긴 문자열이나 유형이 일치하지 않는 경우에만 삽입되며, 그렇지 않으면 해당 오류는 이 반환됩니다.

REPLACE 또는 ON DUPLICATE KEY UPDATE를 사용하면 대체 또는 업데이트가 필요한 행이 지정된 값으로 업데이트됩니다. 이것은 정확히해당 행에 대한 UPDATE 문처럼 작동합니다. 참조 제약 조건 및 기타 무결성 검사가 적용되고 업데이트 트리거가 활성화됩니다. 반환되는 행 수는 간단히 합계로 삽입되고 업데이트 된 행 수인 입니다.

그러나 나는

unexpected token: REPLACE required: INSERT 

왜이 얻을

REPLACE INTO my_table (my_id, my_int) VALUES (1, 2); 

을하려고 할 때?

답변

2

REPLACE과 같은 MySQL 관련 명령을 사용하려면 MySQL 호환 모드를 활성화해야합니다. HSQL documentation의 제 7 장에서 :

MySQL의 구문 호환성 모드에서

는 HyperSQL는 INSERT가, 무시 교체하고 INSERT 문을 ON DUPLICATE KEY UPDATE 변화 지원합니다.

핵심 요점은 MySQL 구문 호환 모드가 켜져 있어야한다는 것입니다. 다음은 귀하의 질문에 게시 된 link to Chapter 12 우리가 찾을 :

사용 SET DATABASE의 SQL 구문은 TRUE 미스 또는 사실에 해당 URL 속성 sql.syntax_mys =이 AUTO_INCREMENT 및 TEXT 데이터 유형 및 여러 다른 유형에 대한 지원을 활성화 할 수 있습니다. 이러한 유형 정의는 HyperSQL에 상응하는 것으로 변환됩니다.

그래서 설명서는 MySQL 호환 모드를 활성화하는 두 가지 방법을 제공합니다.우리는 HSQL 콘솔에서 직접 실행할 수있는 한 :

sql.syntax_mys=true 

당신은 MySQL의이 있으면 :

SET DATABASE SQL SYNTAX MYS TRUE 

개발 목적으로 사용하는 다른, 아마도 하나는 연결 문자열에 다음을 추가하는 것입니다 호환 모드가 활성화 된 경우 REPLACE이 오류없이 작동해야합니다.

+0

당신 말이 맞습니다. 나는이 단락을 간과했다. 고맙습니다. – rapt