创建视图的语法:
其中,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查询语句。