一. 视图 1.1创建视图 create view p_view as select name,age from person; 视图的作用是隐藏数据,例如上面语句没有查询工资,是为了隐藏它,这样就避免无关人员看到敏感数据。 注意:视图修改了数据,会导致基本表的数据也随着被修改,或者基本表修改了数据,视图的数据也随着被修改, 例如视图把名字alex修改为alex_sb,那么基本表对应的名字也被修改。 create view 视图名字 as 查询sql语句; 1.2删除: drop view 视图名字; 1.3修改: alter view 视图名字 as 查询sql语句; alter view p_view as select name,age,sex from person;--增加sex字段 1.4注意:当视图来自多个基本表时,无法增删改数据。 create view ps_view as select person.name,dept.dname from peron,dept where person.dept_id = dept.did; 上面视图来自两个基本表,操作一下增删改试试。 二. 触发器:监视某个事件,然后触发某个操作。 触发器创建语法四要素:1.监视地点(table) 2.监视事件(insert/update/delete) 3.触发时间(after/before) 4.触发事件(insert/update/delete) 创建触发器语法 create trigger triggerName after/before insert/update/delete on 表名 for each row #这句话是固定的 begin #需要执行的sql语句--注意语句后面需要加上分号; end 注意1:after/before: 只能选一个 ,after 表示 后置触发, before 表示前置触发 注意2:insert/update/delete:只能选一个 1、监视事件:插入-insert:以商品发货为例: 1.1创建两张表:商品表goods和订单表order_table,当订单表插入发货数量count时,触发商品表减少相应数量num。 create table goods( id int not null auto_increment primary key, name varchar(10) not null, num int not null); insert into goods values(1,'商品1',10),(2,'商品2',10),(3,'商品3',10);--goods插入数据 create table order_table( oid int not null auto_increment primary key, gid int not null, count int not null); 1.2创建触发器: create trigger tg2 after insert on order_table --监视order_table这个表的每一行在插入数据之后 for each ROW BEGIN update goods set num = num - new.count where id = new.gid;--触发goods减少数量 end; 1.3插入数据:insert into order_table values(1,1,3);--goods商品1的数量自动修改为7 2、监视事件:更新-update:以商品退货为例: create trigger tg2 after update on order_table for each row begin update goods set num = num + old.count - new.count where id = new.gid;--old.count - new.count等于减掉的数量,也就是2 end; update order_table set count = count -2 where oid = 6;--订单表order_table退回2个商品给商品表,商品表数量自动加2 3、监视事件:删除-delete:以删除订单为例: create trigger tg3 after delete on order_table for each row begin update goods set num = num + old.count where id = old.gid; end; delete from order_table where oid = 1;--删除订单,商品数量自动添加 4、查看触发器 show triggers; 或者右击 order_table--设计表--触发器 查看