SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 16.02.2017 18:15:32

sql157
Завсегдатай
Зарегистрирован: 17.03.2016
Сообщений: 97

При сохранении триггера "before*update" появляется ошибка 1064

Используется
MySQL - 5.7 - х64

При сохранении триггера "before*update" появляется ошибка 1064.
"You have an error in your SQl syntax; check the manual that corresponds to your MySql server version for the right syntax to user near"

Привожу триггер.


CREATE TRIGGER `trg_02_1_test_before_update` BEFORE UPDATE ON `trg_02_1_test` FOR EACH ROW BEGIN
INSERT INTO trg
     Set
     id_tbl_02_n_log = NEW.id_tbl_02_1;

END;
 


Вопрос.
Как можно решить проблему?


Прикрепленные файлы:
Attachment Icon 2.jpg, Размер: 119,605 байт, Скачано: 334

Неактивен

 

#2 16.02.2017 18:55:32

klow
Старожил
Зарегистрирован: 06.12.2014
Сообщений: 411

Re: При сохранении триггера "before*update" появляется ошибка 1064

А что это такое "id_tbl_02_n_log"? Кто (MySql) о нем что-то знает?

Отредактированно klow (16.02.2017 18:56:14)

Неактивен

 

#3 16.02.2017 19:02:41

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5829

Re: При сохранении триггера "before*update" появляется ошибка 1064

delimiter//
CREATE TRIGGER `trg_02_1_test_before_update` BEFORE UPDATE ON `trg_02_1_test` FOR EACH ROW BEGIN
INSERT INTO trg
     Set
     id_tbl_02_n_log = NEW.id_tbl_02_1;

END//

Неактивен

 

#4 16.02.2017 19:56:18

sql157
Завсегдатай
Зарегистрирован: 17.03.2016
Сообщений: 97

Re: При сохранении триггера "before*update" появляется ошибка 1064

klow написал:

А что это такое "id_tbl_02_n_log"? Кто (MySql) о нем что-то знает?

Привожу информацию по таблице
Основная таблица

CREATE TABLE `trg_02_1_test` (
    `id_tbl_02_1` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
    `cur_datetime_tbl_02_1` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    `pol_1_date_tbl_02_1` DATE NULL DEFAULT NULL,
    `pol_2_enum_tbl_02_1` ENUM('Y','N') NULL DEFAULT NULL,
    `pol_3_longtxt_tbl_02_1` LONGTEXT NULL,
    `pol_4_txt_tbl_02_1` TEXT NULL,
    `pol_5_int_tbl_02_1` INT(11) NULL DEFAULT NULL,
    PRIMARY KEY (`id_tbl_02_1`)
)
COLLATE='utf8_general_ci'
ENGINE=MyISAM
ROW_FORMAT=DYNAMIC
AUTO_INCREMENT=7
;


Журнал

CREATE TABLE `trg` (
    `datetime_log` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    `tbl_02_name_log` TEXT NULL,
    `id_tbl_02_n_log` INT(11) NULL DEFAULT NULL,
    `tbl_02_pol_name_log` TEXT NULL,
    `tbl_02_pol_content_log` TEXT NULL
)

COLLATE='utf8_general_ci'
ENGINE=MyISAM
ROW_FORMAT=DYNAMIC
;

Неактивен

 

#5 16.02.2017 19:58:51

sql157
Завсегдатай
Зарегистрирован: 17.03.2016
Сообщений: 97

Re: При сохранении триггера "before*update" появляется ошибка 1064

vasya написал:

delimiter//
CREATE TRIGGER `trg_02_1_test_before_update` BEFORE UPDATE ON `trg_02_1_test` FOR EACH ROW BEGIN
INSERT INTO trg
     Set
     id_tbl_02_n_log = NEW.id_tbl_02_1;

END//

Я использую HeidiSQL.. А она автоматически проставляется начальный код и не даёт редактировать.. prntscr.com/e9j70d
Может посоветуете как можно это сделать в данной программе?

Или в
Dbeaver как создать триггер?
А то, что-то не могу разобраться.. Может там будет возможность вписать код..

Неактивен

 

#6 16.02.2017 20:02:30

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5829

Re: При сохранении триггера "before*update" появляется ошибка 1064

про HeidiSQL ничего сказать не могу
попробуйте выполнить как обычный sql запрос, а не через вкладку триггер

Неактивен

 

#7 16.02.2017 20:12:18

sql157
Завсегдатай
Зарегистрирован: 17.03.2016
Сообщений: 97

Re: При сохранении триггера "before*update" появляется ошибка 1064

vasya написал:

про HeidiSQL ничего сказать не могу
попробуйте выполнить как обычный sql запрос, а не через вкладку триггер

Переименовал таблицу в trglog
Всё равно ошибка см. скрин  http://prntscr.com/e9kccf


Вопрос
Почему в рабочем и нерабочем примере триггера наименование таблицы отображается разным цветом?
см. пирложение


Прикрепленные файлы:
Attachment Icon 3.jpg, Размер: 185,067 байт, Скачано: 341

Неактивен

 

#8 16.02.2017 20:19:41

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5829

Re: При сохранении триггера "before*update" появляется ошибка 1064

не знаю, может он(HeidiSQL) как-то по особенному воспринимает перенос строки
воспользуйтесь workbench, который рекомендует oracle

Неактивен

 

#9 16.02.2017 21:18:18

sql157
Завсегдатай
Зарегистрирован: 17.03.2016
Сообщений: 97

Re: При сохранении триггера "before*update" появляется ошибка 1064

Решение вопроса №1
Проблема решена.. Разместил в командной строке(или как это место называется), нажал F9(запуск). Триггер создался..prntscr.com/e9l94k

Отредактированно sql157 (17.02.2017 18:51:46)

Неактивен

 

#10 17.02.2017 18:52:28

sql157
Завсегдатай
Зарегистрирован: 17.03.2016
Сообщений: 97

Re: При сохранении триггера "before*update" появляется ошибка 1064

Решение вопроса №2


CREATE DEFINER=`root`@`%` TRIGGER `trg_02_1_test_before_update` BEFORE UPDATE ON `trg_02_1_test` FOR EACH ROW BEGIN
/*РАБОТАЕТ ДАТА*/
  IF (NOT OLD.pol_1_date_tbl_02_1 <=> NEW.pol_1_date_tbl_02_1)
    THEN  
    INSERT INTO trg_02_00_log(tbl_02_tbl_name_log, id_tbl_02_n_log, tbl_02_pol_name_log, tbl_02_pol_content_log)  
    VALUES('trg_02_1_test', NEW.id_tbl_02_1, 'pol_1_date_tbl_02_1' ,NEW.pol_1_date_tbl_02_1);
  END IF;
 
      /*РАБОТАЕТ enum*/
  IF (NOT OLD.pol_2_enum_tbl_02_1 <=> NEW.pol_2_enum_tbl_02_1)
    THEN  
    INSERT INTO trg_02_00_log(tbl_02_tbl_name_log, id_tbl_02_n_log, tbl_02_pol_name_log, tbl_02_pol_content_log)  
    VALUES('trg_02_1_test', NEW.id_tbl_02_1, 'tbl_02_pol_name_log' ,NEW.pol_2_enum_tbl_02_1);
  END IF;
 
      /*РАБОТАЕТ longtxt*/
  IF (NOT OLD.pol_3_longtxt_tbl_02_1 <=> NEW.pol_3_longtxt_tbl_02_1)
    THEN  
    INSERT INTO trg_02_00_log(tbl_02_tbl_name_log, id_tbl_02_n_log, tbl_02_pol_name_log, tbl_02_pol_content_log)  
    VALUES('trg_02_1_test', NEW.id_tbl_02_1, 'pol_3_longtxt_tbl_02_1' ,NEW.pol_3_longtxt_tbl_02_1);
  END IF;

    /*РАБОТАЕТ ТЕКСТ*/
    IF (NOT OLD.pol_4_txt_tbl_02_1 <=> NEW.pol_4_txt_tbl_02_1)
    THEN  
    INSERT INTO trg_02_00_log(tbl_02_tbl_name_log, id_tbl_02_n_log, tbl_02_pol_name_log, tbl_02_pol_content_log)  
    VALUES('trg_02_1_test', NEW.id_tbl_02_1, 'pol_4_txt_tbl_02_1' ,NEW.pol_4_txt_tbl_02_1);
  END IF;

      /*РАБОТАЕТ int*/
  IF (NOT OLD.pol_5_int_tbl_02_1 <=> NEW.pol_5_int_tbl_02_1)
    THEN  
    INSERT INTO trg_02_00_log(tbl_02_tbl_name_log, id_tbl_02_n_log, tbl_02_pol_name_log, tbl_02_pol_content_log)  
    VALUES('trg_02_1_test', NEW.id_tbl_02_1, 'pol_5_int_tbl_02_1' ,NEW.pol_5_int_tbl_02_1);
  END IF;

END
 

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson