標籤:
SHOW TRIGGERS;查看所有觸發器
create trigger tg1
after insert on user
for each row
begin
update user set name=‘test‘ where id=1;
end
insert into user(name,pass) values(‘shao‘,‘23‘)$$
CREATE TRIGGER文法
CREATE TRIGGER trigger_name trigger_time trigger_event
ON tbl_name FOR EACH ROW trigger_stmt
觸發程式與命名為tbl_name的表相關。
trigger_time是觸發程式的動作時間。它可以是BEFORE或AFTER,以指明觸發程式是在啟用它的語句之前或之後觸發。
trigger_time是觸發程式的動作時間。它可以是BEFORE或AFTER,以指明觸發程式是在啟用它的語句之前或之後觸發。
trigger_event指明了啟用觸發程式的語句的類型。trigger_event可以是下述值之一:
· INSERT:將新行插入表時啟用觸發程式
· UPDATE:更改某一行時啟用觸發程式
· DELETE:從表中刪除某一行時啟用觸發程式
trigger_stmt是當觸發程式啟用時執行的語句。如果你打算執行多個語句,可使用BEGIN
... END複合陳述式結構。
MySQL資料庫建立觸發器的格式如下:
create trigger <觸發器名稱> { before | after} {insert | update | delete} on <表名> for each row <觸發器SQL語句> |
create trigger <觸發器名稱>:建立一個新觸發器,並指定觸發器的名稱。
{ before | after}:用於指定在insert、update或delete語句執行前觸發還是在語句執行後觸發。
on <表名>:用於指定響應該觸發器的表名。
for each row:觸發器的執行間隔,for each row 通知觸發器每隔一行執行一次動作,而不是對整個表執行一次。
<觸發器SQL語句>:觸發器要執行的SQL語句,如果該觸發器要執行多 條SQL語句,要將多條語句放在begin…end塊中。
執行個體:
(1): 在“命令提示字元”下建立資料表test1
CREATE TABLE `test1` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(20) NOT NULL
)
(2): 再建立資料表test2
CREATE TABLE `test2` (
`num` int(11) DEFAULT NULL,
)
(3):建立觸發器
create trigger `num` BEFORE INSERT on `test1`
for each row update test2 set num = num + 1;
向test1表插入資料,test2表中的num就加一
(4): INSERT INTO test1 (name) VALUES (‘aa‘);
(5):查看test1和test2表中的資料
DROP TRIGGER文法
DROP TRIGGER [schema_name.]trigger_name
捨棄觸發程式。方案名稱(schema_name)是可選的。如果省略了schema(方案),將從當前方案中捨棄觸發程式。
DROP TRIGGER test.num
注意:
使用OLD和NEW關鍵字,能夠訪問受觸發程式影響的行中的列(OLD和NEW不區分大小寫)。在INSERT觸發程式中,僅能使用NEW.col_name,沒有舊行。在DELETE觸發程式中,僅能使用OLD.col_name,沒有新行。在UPDATE觸發程式中,可以使用OLD.col_name來引用更新前的某一行的列,也能使用NEW.col_name來引用更新後的行中的列。
用OLD命名的列是唯讀。你可以引用它,但不能更改它。對於用NEW命名的列,如果具有SELECT許可權,可引用它。在BEFORE觸發程式中,如果你具有UPDATE許可權,可使用“SET NEW.col_name = value”更改它的值。這意味著,你可以使用觸發程式來更改將要插入到新行中的值,或用於更新行的值。
在BEFORE觸發程式中,AUTO_INCREMENT列的NEW值為0,不是實際插入新記錄時將自動產生的序號。
insert into usem(id,name,pass) values(2,‘shao‘,‘23‘)
create trigger tab1
after insert on usem ----->不能對錶進行SQL操作
for each row
begin
insert into user(name,pass)values(‘shao‘,‘chuan‘);--->不能有多餘的空格鍵
end
觸發器--mysql