触发器命令被拒绝

3duebb1j  于 2021-06-20  发布在  Mysql
关注(0)|答案(3)|浏览(393)

我需要我的mysql数据库在一个特定的列中生成一些值的总和。为此,我使用了触发器语句,但mysql给了我一个错误:
mysql错误:#1142-对于表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

我该怎么做?谢谢

aij0ehis

aij0ehis1#

如果我使用

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

1064-sql查询中靠近'-5478r34b.*到'\u sso\u 67c5vh1'@'10.3.157.568''linea 1的语法错误


将“wordpress-3236c57b”上的触发器*授予“\u sso\u 35fd3dc2”@“10.3.156.140”

1064-“wordpress-5478r34b”附近的sql查询中存在语法错误,*到“\u sso\u 67c5vh1”@“10.3.157.568”linea 1

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

1064-“wordpress”-“5478r34b”附近的sql查询中存在语法错误,*到“\u sso\u 67c5vh1”@“10.3.157.568”linea 1

不管我做什么,它都会给我一个语法错误。
一般来说,我要做的是在数据库中添加新数据时自动求和。有没有更简单的方法?

nhn9ugyo

nhn9ugyo2#

这里的问题似乎是您的用户对数据库的权限 wp_wpdatatable_8 .
要为特定用户和数据库授予触发器权限,可以使用以下命令:

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

哪里 <DATABASE> 指包含 wp_wpdatatable_8 table。 <USER> 试图发出 CREATE TRIGGER 命令。 <DATABASE HOST> 用户从中访问数据库的数据库主机。如果在本地运行,可以使用 localhost .
刷新特权之后,创建触发器应该可以正常工作。
有关更多信息,请查看 GRANT mysql.documentation上的语法

lfapxunr

lfapxunr3#

您对正在使用的数据库缺少触发器权限。
我做测试时犯了这个错误。创建测试用户:

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

如果我在测试数据库中创建此触发器(作为具有触发器权限的其他用户),然后尝试插入一行:

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 |
+-------------+-----------+--------+-------------+----------------+-----------+-----------+--------+

相关问题