簡單的MySQL觸發器Demo

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

效果如圖:

發佈了19 篇原創文章 · 獲贊 9 · 訪問量 5735
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章