9.视图的引入

视图是原始数据库数据的一种变换,是查看表中数据的另外一种方式。可以将视图看成是一个移动的窗口,通过它可以看到感兴趣的数据。 视图是从一个或多个实际表中获得的,这些表的数据存放在数据库中。那些用于产生视图的表叫做该视图的基表。一个视图也可以从另一个视图中产生。
当通过视图修改数据时,实际上是在改变基表中的数据;相反地,基表数据的改变也会自动反映在由基表产生的视图中。

引入视图的作用:
==安全:有的数据是需要保密的,如果直接把表给出来进行操作会造成泄密,那么可以通过创建视图把相应视图的权限给出来即可保证数据的安全。
高效:复杂的连接查询,每次执行时效率比较低,可以考虑新建视图,每次从视图中获取,将会提高效率 ==

9.1 创建视图(实例)
在单表上创建视图
CREATE VIEW v1 AS SELECT * FROM t_book;//创建视图
CREATE VIEW v2 AS SELECT bookName,price FROM t_book;
CREATE VIEW v3(b,p) AS SELECT bookName,price FROM t_book;//在单表上创建视图,(b,p)为字段创建别名
在多表上创建视图
CREATE VIEW v4 AS SELECT bookName,bookTypeName FROM t_book,t_bookType WHERE t_book.`bookTypeId`=t_bookType.`id`;
CREATE VIEW v5 AS SELECT tb.bookName,tby.bookTypeName FROM t_book tb,t_bookType tby WHERE tb.`bookTypeId`=tby.`id`;
查看视图
DESCRIBE(简写DESC) v5;//查看视图基本信息
SHOW TABLE STATUS LIKE 'v5';//查看视图基本信息
SHOW CREATE VIEW v5;//查看视图详细信息
修改视图
CREATE OR REPLACE VIEW v1(bookName,price) AS SELECT bookName,price FROM t_book;//用CREATE OR REPLACE VIEW修改视图
ALTER VIEW v1 AS SELECT * FROM t_book;//用ALTER语句修改视图
插入视图
INSERT INTO v1 VALUES(NULL,'java good',120,'feng',1);//在视图中插入视图,视图是一张虚表
更新视图(更新视图是指通过视图来插入(INSERT)、更新(UPDATE)和删除(DELETE)表中的数据。因为视图是一个虚拟的表,其中没有数据。通过视图更新时,都是转换基本表来更新。更新视图时,只能更新权限范围内的数据。超出了范围,就不能更新。)
UPDATE v1 SET bookName='java very good',price=200 WHERE id=5;//更新视图中的表
删除视图中的数据
DELETE FROM v1 WHERE id=7;//删除视图中的数据
删除视图
DROP VIEW IF EXISTS v4;///删除视图
10.触发器的引入

触发器是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,比如当对一个表进行操作( insert,delete, update)时就会激活它执行。触发器可以查询其他表,而且可以包含复杂的SQL语句。它们主要用于强制服从复杂的业务规则或要求。

10.1创建与使用触发器(实例)
创建只有一个语句的触发器
CREATE TRIGGER trig_book AFTER INSERT
      ON t_book FOR EACH ROW 
      UPDATE t_bookType SET bookNum=bookNum+1 WHERE new.bookTypeId=t_bookType.`id`;
      //创建只有一个语句的触发器
创建有多个执行语句的触发器
DELIMITER |(默认情况下,不可能等到用户把这些语句全部输入完之后,再执行整段语句。因为mysql一遇到分号,它就要自动执行。)
CREATE TRIGGER trig_book2 AFTER DELETE
      ON t_book FOR EACH ROW
      BEGIN
	      UPDATE t_bookType SET bookNum=bookNum-1 WHERE old.bookTypeId=t_bookType.`id`;
	      INSERT INTO t_log VALUES(NULL,NOW(),'在book表中删除了一条数据');
	      DELETE FROM t_test WHERE old.bookTypeId=t_test.`id`;
      END |
DELIMITER ;//创建有多个执行语句的触发器
查看触发器1
SHOW TRIGGERS;//查看所有的触发器)
查看触发器2(第二种方法是在系统表里查看触发器)

MYSQL 往视图添加数据 mysql导入视图_触发器

删除触发器
DROP TRIGGER trig_book ;//删除触发器