1. 程式人生 > >MySQL中檢視和觸發器學習

MySQL中檢視和觸發器學習

建立檢視的語法:


其中,algorithm是可選引數,表示檢視選擇的演算法,它有三個選項:undefined,merge,temptable。Undefined表示讓MySQL自動選擇所要使用的演算法;merge表示將使用檢視的語句與檢視定義合併起來,使得檢視定義的某一部分取代語句的對應部分;temptable表示將檢視的結果存入臨時表,然後用臨時表執行語句。

Cascaded是可選引數,表示更新檢視時要滿足所有檢視和表的相關條件,該引數是預設選項;local表示更新檢視時,滿足該檢視本身定義的條件即可。

在單表上建立檢視,例如,為use1表建立一個檢視:

create view use1_view as select * fromuse1;

執行結束後檢視該檢視:describe use1_view;


我們可以看到,該檢視已經成功建立。

在多表上建立檢視,例如,為test3和gradeinfo表建立一個檢視:

Create algorithm=merge view

test3_view(id,name,score)

as select test3.id,name,score

from test3,gradeinfo wheretest3.id=gradeinfo.id

with local check option;

執行後該檢視結果如下:


已經成功選取兩張表中部分資料組成檢視。

一,修改檢視的語法:


二,刪除檢視的語法:


例如,刪除檢視test3_view:drop view if exists test3_view;

執行之後該檢視就會顯示不存在:


建立觸發器

一,建立只有一個執行語句的觸發器的語法:


例如,建立一個t_time表,每次向test3中執行insert語句時,觸發向t_time表中插入當前時間的觸發器:

create trigger test3_time before insert

   -> on test3 for each row

-> insertinto t_time value(now());

驗證是否成功建立觸發器:

insert into test3 values(1,'linda','123');

執行之後,檢視t_time表中是否插入了當前系統時間:


插入成功,說明觸發器已經開始起作用了。

二,建立有多個執行語句的觸發器的語法:


例如,對test3表執行delete語句時,對t_time表插入兩條時間資訊:

delimiter &&
create trigger test_trigger after delete
on test3 for each row
begin
insert into t_time values('2017-01-10');
insert into t_time values('2017-01-20');
end
&&
Delimiter ;

注意:MySQL預設;為結束符號,但是觸發器中用到了;且不為結束符號,所以在建立觸發器時可以用delimiter &&,將MySQL的結束符號變為&&,當觸發器建立成功之後,用delimiter;來還原;為結束符。

驗證是否成功建立觸發器:

delete from test3 where id=1;

執行之後檢視t_time表中是否插入了2017-01-10和2017-01-20:

插入成功,說明多個執行語句的觸發器開始起作用了。

三,檢視觸發器

在MySQL中,所有的觸發器都被information_schema資料庫下的triggers表中,檢視triggers表,可以看到資料庫下所有觸發器的資訊。

查詢所有觸發器語句:select * from information_schema.triggers;

查詢單個觸發器,例如查詢剛剛建立的test_trigger觸發器:

select * from information_schema.triggerswhere trigger_name='test_trigger';

四,刪除觸發器:

例如刪除剛剛建立的test_trigger:drop trigger test_trigger;

語句執行之後,再檢視該觸發器,顯示empty;


檢視,觸發器就先掌握這些嘍,下一次我們學一點基本的SQL查詢語句。