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