[英]Control Char Equivalent Trigger MySQL
我有兩個(多對一)表。 學生和班級表。 班級表中包含在職學生的數量。 如果學生狀態發生變化,觸發將減少活動學生列的數量。 因此,我編寫了一個觸發器,如下所示:
CREATE TRIGGER decreaseNumOfActiveStudent AFTER UPDATE ON student
FOR EACH ROW
BEGIN
DECLARE OLD_STATUS CHAR(1);
SELECT STATUS INTO OLD_STATUS FROM STUDENT WHERE CLASS_ID = NEW.CLASS_ID;
IF OLD_STATUS = '1' OR OLD_STATUS = 'O' THEN
IF NEW.STATUS = '2' THEN
UPDATE CLASS SET NUM_OF_ACTIVE_STUDENT = NUM_OF_ACTIVE_STUDENT - 1
WHERE CLASS_ID = NEW.CLASS_ID;
ENDIF;
ENDIF;
END;
但是,觸發器不會更新類表。 我認為,字符控制可能是錯誤的。 我怎么解決這個問題?
謝謝。
在mysql中,您可以直接使用new和old關鍵字來引用列數據。
您可以將觸發器設為
delimiter //
create trigger decreaseNumOfActiveStudent after update on student
for each row
begin
if new.status = '0' then
update `class` set num_of_active_students = num_of_active_students-1
where class_id = new.class_id ;
end if;
end;//
delimiter ;
測試用例
mysql> delimiter //
mysql> create trigger decreaseNumOfActiveStudent after update on student
-> for each row
-> begin
-> if new.status = '0' then
-> update `class` set num_of_active_students = num_of_active_students-1
-> where class_id = new.class_id ;
-> end if;
-> end;//
Query OK, 0 rows affected (0.12 sec)
mysql> delimiter ;
mysql> select * from student ;
+----+------+--------+----------+
| id | name | status | class_id |
+----+------+--------+----------+
| 1 | AAA | 1 | 1 |
| 2 | BBB | 0 | 1 |
| 3 | CCC | 1 | 1 |
| 4 | DDD | 1 | 1 |
| 5 | EEE | 1 | 1 |
| 6 | FFF | 1 | 2 |
+----+------+--------+----------+
6 rows in set (0.00 sec)
mysql> select * from class ;
+----------+------------------------+
| class_id | num_of_active_students |
+----------+------------------------+
| 1 | 4 |
| 2 | 1 |
+----------+------------------------+
2 rows in set (0.00 sec)
mysql> update student set status = '0' where id = 1 ;
Query OK, 1 row affected (0.03 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select * from class ;
+----------+------------------------+
| class_id | num_of_active_students |
+----------+------------------------+
| 1 | 3 |
| 2 | 1 |
+----------+------------------------+
2 rows in set (0.00 sec)
請注意,當狀態更改回“ 1”時,您可能需要添加其他邏輯,然后增加class
表中的值,並且如果從學生中刪除了記錄或對student
表進行了新輸入,則可能需要添加其他邏輯。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.