Ошибка MySQL: # 1142 - команда TRIGGER отклонена - PullRequest
0 голосов
/ 02 сентября 2018

Мне нужно, чтобы моя база данных MySQL составляла сумму некоторых значений в определенном столбце. Для этого я использовал оператор триггера, но MySQL дал мне ошибку:

Ошибка MySQL: # 1142 - команда TRIGGER отклонена пользователю 'XXXXXX' для таблицы wp_wpdatatable_8

Триггер ниже:

CREATE TRIGGER SumPliche AFTER INSERT ON wp_wpdatatable_8 FOR EACH ROW UPDATE wp_wpdatatable_8 SET sommapliche = tricipite + addome + soprailiaca + sottoscapolare + ascellare + pettorale + coscia

Как я могу это сделать? спасибо

Ответы [ 3 ]

0 голосов
/ 02 сентября 2018

Кажется, проблема здесь в том, что у вашего пользователя есть права доступа к базе данных, из которых wp_wpdatatable_8.

Чтобы предоставить разрешения триггера для конкретного пользователя и базы данных, вы можете использовать следующую команду:

mysql> GRANT TRIGGER ON <DATABASE>.* TO <USER>@'<DATABASE HOST>';

Где

  • <DATABASE> относится к базе данных, содержащей таблицу wp_wpdatatable_8.
  • <USER> имя пользователя, которое пытается выполнить команду CREATE TRIGGER.
  • <DATABASE HOST> хост базы данных, откуда ваш пользователь обращается к базе данных. Если вы используете его локально, вы можете использовать localhost.

После сброса привилегий создание триггера должно работать нормально.

Для получения дополнительной информации проверьте синтаксис GRANT в MySQL.documentation

0 голосов
/ 09 сентября 2018

если я использую

GRANT TRIGGER ON wordpress-5478r34b.* TO '_sso_67c5vh1'@'10.3.157.568'

1064 - Синтаксическая ошибка в запросе SQL рядом с '-5478r34b. * TO' _sso_67c5vh1'@'10.3.157.568 '' linea 1

или

GRANT TRIGGER ON 'wordpress-3236c57b'. * TO'_sso_35fd3dc2'@'10.3.156.140'

1064 - Синтаксическая ошибка в запросе SQL рядом с '' wordpress-5478r34b '. * TO' _sso_67c5vh1'@'10.3.157.568 '' linea 1

или

GRANT TRIGGER ON 'wordpress'-'3236c57b'.* TO '_sso_35fd3dc2'@'10.3.156.140'

1064 - Синтаксическая ошибка в запросе SQL рядом с '' wordpress '-' 5478r34b '. * TO' _sso_67c5vh1'@'10.3.157.568 '' linea 1

что бы я ни делал, это дает мне синтаксическую ошибку.

В общем, я хочу сделать автоматическую сумму, когда я добавляю новые данные в свою базу данных. Есть ли более простой способ?

0 голосов
/ 02 сентября 2018

Вам не хватает привилегии TRIGGER для используемой вами базы данных.

Я получил эту ошибку, когда я сделал тест. Создать тестового пользователя:

mysql> create user 'bill'@'localhost';
mysql> grant all privileges on test2.* to 'bill'@'localhost';
mysql> revoke trigger on test2.* from 'bill'@'localhost';
mysql> show grants for 'bill'@'localhost';
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Grants for bill@localhost                                                                                                                                                                                                    |
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'bill'@'localhost' IDENTIFIED BY PASSWORD '*29A1BB43D3B9EB42028B4566E4836353285B9395'                                                                                                                  |
| GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, REFERENCES, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, EVENT ON `test2`.* TO 'bill'@'localhost' |
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

Теперь попробуйте создать триггер от имени этого пользователя:

~ mysql -ubill -p
mysql> use test2
mysql> create table t ( i int);
mysql> create trigger tt before insert on t for each row set new.i = 42;
ERROR 1142 (42000): TRIGGER command denied to user 'bill'@'localhost' for table 't'

Я также думаю, что ваш триггер может не выполнять то, о чем вы думаете, так что хорошо, что вы его не создали.

CREATE TRIGGER SumPliche AFTER INSERT ON wp_wpdatatable_8 
FOR EACH ROW 
  UPDATE wp_wpdatatable_8 
  SET sommapliche = tricipite + addome + soprailiaca + sottoscapolare + ascellare + pettorale + coscia

Если я создаю этот триггер в моей тестовой базе данных (как другой пользователь с привилегией TRIGGER), а затем пытаюсь вставить строку:

mysql> insert into wp_wpdatatable_8 values (1, 1, 1, 1, 1, 1, 1, 1);
ERROR 1442 (HY000): Can't update table 'wp_wpdatatable_8' in 
stored function/trigger because it is already used by statement which invoked 
this stored function/trigger.

Возможно, вы хотите установить значения только в строке, которую вы вставляете. Если это так, вы бы ссылались на текущую вставляемую строку с синтаксисом NEW.*:

CREATE TRIGGER SumPliche BEFORE INSERT ON wp_wpdatatable_8 
FOR EACH ROW 
  SET NEW.sommapliche = NEW.tricipite + NEW.addome + NEW.soprailiaca 
    + NEW.sottoscapolare + NEW.ascellare + NEW.pettorale + NEW.coscia;

Также вы должны использовать BEFORE INSERT, если хотите изменить значение в строке, прежде чем вставить его. Если вы используете AFTER INSERT, это слишком поздно.

Теперь это работает:

mysql> insert into wp_wpdatatable_8 values (1, 1, 1, 1, 1, 1, 1, 1);
Query OK, 1 row affected (0.02 sec)

mysql> select * from wp_wpdatatable_8;
+-------------+-----------+--------+-------------+----------------+-----------+-----------+--------+
| sommapliche | tricipite | addome | soprailiaca | sottoscapolare | ascellare | pettorale | coscia |
+-------------+-----------+--------+-------------+----------------+-----------+-----------+--------+
|           7 |         1 |      1 |           1 |              1 |         1 |         1 |      1 |
+-------------+-----------+--------+-------------+----------------+-----------+-----------+--------+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...