l
對某個表進行增/刪/改操作的前后如果希望觸發某個特定的行為時,可以使用觸發器,觸發器用于定制用戶對表的行進行增/刪/改前后的行為。
插入前
CREATE TRIGGER tri_before_insert_tb1 BEFORE INSERT ON tb1 FOR EACH ROW BEGIN ... END
插入后
CREATE TRIGGER tri_after_insert_tb1 AFTER INSERT ON tb1 FOR EACH ROW BEGIN ... END
刪除前
CREATE TRIGGER tri_before_delete_tb1 BEFORE DELETE ON tb1 FOR EACH ROW BEGIN ... END
刪除后
CREATE TRIGGER tri_after_delete_tb1 AFTER DELETE ON tb1 FOR EACH ROW BEGIN ... END
更新前
CREATE TRIGGER tri_before_update_tb1 BEFORE UPDATE ON tb1 FOR EACH ROW BEGIN ... END
更新后
CREATE TRIGGER tri_after_update_tb1 AFTER UPDATE ON tb1 FOR EACH ROW BEGIN ... END
創建一個user_info表和user_info_back表,里面有UID,Name,Password,E-mil列;
CREATE TABLE `user_info` ( `UID` int(5) NOT NULL AUTO_INCREMENT, `Name` char(15) NOT NULL, `Password` varchar(32) DEFAULT NULL, `Email` varchar(255) DEFAULT NULL, PRIMARY KEY (`UID`,`Name`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `user_info_back` ( `UID` int(5) NOT NULL AUTO_INCREMENT, `Name` char(15) NOT NULL, `Password` varchar(32) DEFAULT NULL, `Email` varchar(255) DEFAULT NULL, PRIMARY KEY (`UID`,`Name`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
觸發器的作用就是在往user_info表中插入數據之前進入tri_before_insert_tb1觸發器,執行里面的操作
delimiter % CREATE TRIGGER tri_before_insert_tb1 BEFORE INSERT ON user_info FOR EACH ROW BEGIN -- 如果插入時的Name="as" IF NEW.Name = "ansheng" THEN -- 那么就把這條數據先插入user_info_back表中,數據相同 INSERT INTO user_info_back(Name,Password,Email) VALUES(NEW.Name,NEW.Password,NEW.Email); END IF; END% delimiter ;
觸發器無法由用戶直接調用,而知由于對表的增/刪/改操作被動引發的。
往user_info表中插入兩條數據
INSERT INTO user_info(Name,Password,Email) VALUES("ansheng","ansheng","ansheng@ansheng.me"),("root","r","root@ansheng.me");查看表中的數據
mysql> select * from user_info; +-----+---------+----------+--------------------+ | UID | Name | Password | Email | +-----+---------+----------+--------------------+ | 1 | ansheng | ansheng | ansheng@ansheng.me | | 2 | root | r | root@ansheng.me | +-----+---------+----------+--------------------+ 2 rows in set (0.00 sec) mysql> select * from user_info_back; +-----+---------+----------+--------------------+ | UID | Name | Password | Email | +-----+---------+----------+--------------------+ | 1 | ansheng | ansheng | ansheng@ansheng.me | +-----+---------+----------+--------------------+ 1 row in set (0.00 sec)
DROP TRIGGER tri_after_insert_tb1;
NEW表示即將插入的數據行,OLD表示即將刪除的數據行,對于INSERT語句,只有NEW是合法的,對于DELETE語句,只有OLD才合法,而UPDATE語句可以在和NEW以及OLD同時使用
#Python全棧之路
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。