觸發器--mysql

來源:互聯網
上載者:User

標籤:

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.