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查詢語句。