SQL上的有些東西用的少,今天將觸發器瞭解了一下,記錄一個簡單的Demo。
ps:在mysql8.0下實現的。
目前有2張表:
班級表:t_class 包含三個字段 CLASSID(班級id,主鍵) CLASSNAME(班級名稱) STUCOUNT(學生數量)
學生表:t_student 包含三個字段 ID(主鍵id ) STUID(學生id) CLASSID(班級id)
目標:使班級表中的學生數量隨着學生表中的學生的增加而自動更新。
1.建表:
班級表:
DROP TABLE IF EXISTS T_CLASS;
CREATE TABLE T_CLASS(
CLASSID INT NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT '主鍵ID',
CLASSNAME VARCHAR(10),
STUCOUNT INT
)
學生表:
DROP TABLE IF EXISTS T_STUDENT;
CREATE TABLE T_STUDENT(
ID INT NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT '主鍵ID',
STUID VARCHAR(12),
CLASSID INT
)
2.插入數據
插入班級數據:
INSERT INTO T_CLASS (CLASSNAME,STUCOUNT) VALUES ('1年1班',1);
INSERT INTO T_CLASS (CLASSNAME,STUCOUNT) VALUES ('1年2班',1);
INSERT INTO T_CLASS (CLASSNAME,STUCOUNT) VALUES ('1年3班',1);
如圖:
插入學生數據:
INSERT INTO T_STUDENT (STUID,CLASSID) VALUES ('2019010101',1);
INSERT INTO T_STUDENT (STUID,CLASSID) VALUES ('2019010201',2);
INSERT INTO T_STUDENT (STUID,CLASSID) VALUES ('2019010301',3);
如圖
3.編寫觸發器
DROP TRIGGER IF EXISTS TRI_STUINSERT;
CREATE TRIGGER TRI_STUINSERT AFTER INSERT
ON T_STUDENT FOR EACH ROW
BEGIN
DECLARE C INT;
SET C = (SELECT STUCOUNT FROM T_CLASS WHERE CLASSID = NEW.CLASSID);
UPDATE T_CLASS SET STUCOUNT = C+1 WHERE CLASSID = NEW.CLASSID;
END
查詢當前的觸發器:
4.測試觸發器
給1班的學生增加一位:
INSERT INTO T_STUDENT (STUID,CLASSID) VALUES ('2019010302',1);
效果如圖: