1 视图

视图是数据库系统中一种非常有用的数据库对象,它往往是和外模式联系在一起的概念。

视图是从一个或多个表或者视图中导出的表,它也包含一系列带有名称的数据列和若干条数据行。

创建视图

CREATE [OR REPLACE]
	VIEW view_name[(column_list)]
	AS SELECT_statement
	[WITH [CASCADED | LOCAL] CHECK OPTION]

举例

CREATE OR REPLACE VIEW db_school.v_student
AS
SELECT * FROM db_school.tb_student WHERE sex='男'
WITH CHECK OPTION;

删除视图

DROP VIEW [IF EXISTS]
	view_name[, view_name]……

修改视图定义

ALTER VIEW view_name [(column_list)]
	AS SELECT_statement
	[WITH [CASCADED | LOCAL] CHECK OPTION]

查看视图定义

SHOW CREATE VIEW view_name

更新视图数据

1. 使用INSERT 语句通过视图向基础表插入数据
INSERT INTO db_school.v_student
	VALUES('2014310108','周明','男','1997-08-16',‘辽宁’,'汉','IS1401');
	
2. 使用UPDATE语句通过视图修改基础表的数据
UPDATE db_school.v_student
	SET native='河南';
	
3.使用DELETE语句通过视图删除基础表的数据
DELETE FROM db_school.v_student
	WHERE studentName='周明';

触发器

触发器是一个被指定关联到一个表的数据库对象,当对一个表的特定事件出现时,它将会被激活。

例如:每增加一个客户到数据库的客户基本信息表时,都检查其电话号码的格式是否正确。

CREATE
	TRIGGER trigger_name trigger_time trigger_event
	ON tbl_name FOR EACH ROW trigger_body
  • trigger_event:触发事件,用于指定激活触发器的语句的种类。

INSERT 将新行插入表时激活触发器。

UPDATE 更改表中某一行时的激活触发器。

DELETE 从表中删除某一行时激活触发器。

查看触发器

SHOW TRIGGERS [{FROM | IN} db_name]

触发器举例

CREATE
	TRIGGER db_school.tb_student_insert_trigger AFTER INSERT
	ON db_school.tb_student FOR EACH ROW SET @ str='one student added!';

删除触发器

DROP TRIGGER [ IF EXISTS] [schema_name.] trigger_name

使用触发器

INSERT 触发器
CREATE TRIGGER db_school.tb_student_insert_trigger AFTER INSERT
	ON db_school.tb_student FOR EACH ROW SET @ str=NEW.studentNo;
NEW的虚拟表来访问被插入的行

DELETE触发器。可在语句执行之前或者之后执行。触发器代码内可以引用一个名为OLD的虚拟表来访问被删除的行。

UPDATE触发器

在UPDATE触发器代码内可以引用一个名为OLD的虚拟表访问以前的值,也可以引用一个名为NEW的虚拟表访问新更新的值。

事件

事件和触发器相似,都是在某些事情发生的时候启动,因此事件也可称为临时触发器。其中,事件是基于特定时间周期出发来执行某些任务,而触发器是基于某个表所产生的事件出发的,它们的区别也在于此。

使用MySQL语句来查询是否开启事件调度器:

SHOW WARIABLES LIKE ‘EVENT_SCHEDULER’;

若未开启:

SET GLOBAL EVENT_SCHEDULER=1;

OR: SET GLOBAL EVENT_SCHEDULER=TRUE;

创建事件

CREATE
	EVENT
	[IF NOT EXISTS]
	event_name
	ON SCHEDULE schedule
	[ENABLE | DISABLE | DISABLE ON SLAVE]
	DO event_body

举例

USE db_school;
DELIMITER $$
CREATE EVENT IF NOT EXISTS event_insert
	ON SCHEDULE EVERY 1 MONTH
		STARTS CURDATE()+INTERVAL 1 MONTH
		ENDS'2016-12-31'
		DO
		BEGIN
			IF YEAR(CURDATE())<2013 THEN
				INSERT INTO tb_student
				VALUES(NULL,'张晓勇','男','1997-12-11','山西','汉','AC1301');
			END IF;
		END $$
		

修改

ALTER
	EVENT event_name
	[ON SHEDULE schedule]
	[RENAME TO new_event_name]
	[ENABLE | DISABLE | DISABLE ON SLAVE]
	[DO event_body]

删除

DROP EVENT [IF EXISTS] event_name
12-16 11:14