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 ;
答案 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)