错误:不允许从触发器返回结果集

时间:2017-11-12 08:23:15

标签: mysql triggers

DROP TRIGGER IF EXISTS `examcnpm`.`users_BEFORE_DELETE`;

DELIMITER $$
USE `examcnpm`$$
CREATE DEFINER = CURRENT_USER TRIGGER `examcnpm`.`users_BEFORE_DELETE` BEFORE DELETE ON `users` FOR EACH ROW
BEGIN
    declare id int;

    select id= (select userid from deleted);
    delete from Result where Result.userid=id;

    delete u from Users as u inner join deleted as r on u.userid=r.userid 
    where u.userid=id;
END$$

DELIMITER ;

1 个答案:

答案 0 :(得分:0)

我不清楚为什么你想要从触发器中的用户中删除或为什么在之前而不是在查询之后删除。但是这里有如何使用OLD。从结果中删除。

DROP TRIGGER IF EXISTS `users_BEFORE_DELETE`;
DELIMITER $$
CREATE DEFINER = CURRENT_USER TRIGGER `users_BEFORE_DELETE` after DELETE ON `u` FOR EACH ROW
BEGIN
        delete from Result where Result.id=old.id;
END$$
DELIMITER ;

例如

ariaDB [sandbox]> select id,username from u order by id limit 5;
+----+----------+
| id | username |
+----+----------+
|  2 | Jane     |
|  3 | Ali      |
|  6 | Bruce    |
|  7 | Martha   |
|  8 | Sidney   |
+----+----------+
5 rows in set (0.00 sec)

MariaDB [sandbox]> select * from result order by id limit 10;
+----+
| id |
+----+
|  2 |
|  2 |
|  3 |
|  3 |
|  6 |
|  6 |
|  7 |
|  7 |
|  8 |
|  8 |
+----+
10 rows in set (0.00 sec)

MariaDB [sandbox]>
MariaDB [sandbox]> delete from u where id = 2;
Query OK, 1 row affected (0.04 sec)

MariaDB [sandbox]>
MariaDB [sandbox]> select id,username from u order by id limit 5;
+----+----------+
| id | username |
+----+----------+
|  3 | Ali      |
|  6 | Bruce    |
|  7 | Martha   |
|  8 | Sidney   |
| 10 | charlie  |
+----+----------+
5 rows in set (0.00 sec)

MariaDB [sandbox]> select * from result order by id limit 10;
+----+
| id |
+----+
|  3 |
|  3 |
|  6 |
|  6 |
|  7 |
|  7 |
|  8 |
|  8 |
| 10 |
| 10 |
+----+
10 rows in set (0.00 sec)