#insert #sql-insert #hsqldb #upsert
#вставить #sql-вставка #hsqldb #upsert
Вопрос:
Я пытаюсь выполнить следующий запрос:
SET DATABASE SQL SYNTAX MYS TRUE;
и затем:
INSERT INTO mytable (id, age) VALUES (1, 1)
ON DUPLICATE KEY UPDATE id=2, age=33;
Я получаю ошибку:
INSERT INTO mytable (id, age) VALUES (1, 1)
ON DUPLICATE KEY
[2020-10-23 11:09:42] [42590][-5590] unexpected end of statement: required: UPDATE : line: 2
В чем я ошибаюсь?
Комментарии:
1. Я почти чувствую, что, возможно, режим синтаксиса MySQL по какой-то причине не включен.
2. @Tim Biegeleisen как я могу это проверить?
3. @Tim Biegeleisen PUBLIC.PUBLIC> УСТАНОВИТЬ СИНТАКСИС SQL БАЗЫ ДАННЫХ MYS TRUE [2020-10-23 11:23:14] завершено за 4 мс PUBLIC.PUBLIC> ВСТАВИТЬ В tblUserMetadata (userMetadataId, portalId) ЗНАЧЕНИЯ (1, 1) ДЛЯ ДУБЛИРУЮЩЕГО КЛЮЧА [2020-10-23 11:23:14] [42590][-5590]неожиданный конец инструкции: требуется: ОБНОВЛЕНИЕ : строка: 2
4. Можете ли вы попробовать запустить это:
SELECT 'true' WHERE 'Hello World' REGEXP '^H.*d$';
? Давайте попробуем проверить каким-либо другим способом, что синтаксис MySQL работает.5. @Tim Biegeleise PUBLIC.PUBLIC> ВЫБЕРИТЕ ‘true’, ГДЕ ‘Hello World’ РЕГУЛЯРНОЕ ВЫРАЖЕНИЕ ‘ ^ H. * d$’ [2020-10-23 11:25:45] [42581][-5581] неожиданный знак: ГДЕ
Ответ №1:
OP сообщает об этом в комментарии:
PUBLIC.PUBLIC> SET DATABASE SQL SYNTAX MYS TRUE [2020-10-23 11:23:14] completed in 4 ms
PUBLIC.PUBLIC> INSERT INTO tblUserMetadata (userMetadataId, portalId) VALUES (1, 1) ON DUPLICATE KEY [2020-10-23 11:23:14] [42590][-5590] unexpected end of statement: required: UPDATE : line: 2
Строки показывают, что клиент SQL используется для запуска скрипта. Клиент SQL предварительно анализирует инструкцию и считает, что инструкция завершена после ключевого KEY
слова, а ключевое UPDATE
слово является началом новой инструкции. Таким образом, он пытается отправить неполный SQL-запрос в компонент database engine.
Синтаксис MySQL работает, потому что команда была принята и выполнена.
Вы можете проверить настройки свойства, выбрав из системной таблицы:
SELECT * FROM information_schema.system_properties
Приведенная ниже инструкция возвращается true
, когда установлен режим совместимости с MySQL:
SELECT property_value FROM information_schema.system_properties
WHERE property_name = 'sql.syntax_mys'