SQL38 针对actor表创建视图actor_name_view SQL41 构造一个触发器audit_log


一、题目

针对actor表创建视图actor_name_view,只包含first_name以及last_name两列,并对这两列重新命名,first_name为first_name_v,last_name修改为last_name_v:

二、视图相关操作

1.创建视图

CREATE VIEW view_name
AS

查看创建视图的语句

SHOW CREATE VIEW viewname
create view actor_name_view (first_name_v,last_name_v) 
as
select first_name ,last_name
from actor

CREATE VIEW actor_name_view
AS
SELECT first_name first_name_v,last_name last_name_v
FROM actor

2.更新视图

(1)更新一个视图,将更新其表,如果对视图增加或删除行,实际上是对其基表增加或删除行
(2)如果视图定义中有如下操作,则不允许被更新
① 分组(Group by)
② 连结
③ 子查询
④ 并
⑤ 聚集函数(Min,Max,Count)
⑥ DISTINCT
⑦ 导出(计算)列
(3)视图主要用于检索
代码如下(示例):

更新时:
(1) 可以先drop,再create
(2) CREATE ORREPLACE VIEW
如果要更新的视图存在,替换原视图
不存在,创建一个视图

3.删除视图

DROP VIEW viewname;

三、SQL41 构造一个触发器audit_log

1.触发器

MySQL响应DELETE、INSERT、UPDATE语句时自动执行的一组语句

2.创建

创建时:
① 唯一的触发器名(表中唯一,数据库中不一致)
② 触发器关联的表
③ 触发器应响应的活动 DELETE、INSERT、UPDATE
④ 触发器何时执行(处理之前或之后)

CREATE TRIGGER <触发器名> 
< BEFORE | AFTER >
<INSERT | UPDATE | DELETE >  #激活语句
ON <表名> FOR 
BEGIN
EACH Row<触发器主体>;      #触发器激活时将要执行的 MySQL 语句
END;
# 触发器主体如果是多条语句,可以使用BEGIN  END 标记
# 一般是指行级触发,对于受触发事件影响的每一行都要激活触发器的动作。

只有表才支持触发器,视图(临时表)不支持

3.删除

DROP TRIGGER 触发器名

4. INSERT 触发器

(1)在INSERT 触发器中,可引入一个名为NEW的虚拟表,访问被插入的行
(2)在BEFORE INSERT触发器中,NEW的值可以被更新
(3)对于AUTO_INCREMENT列,NEW在INSERT执行前包含0,在INSERT执行后包含新的自动生成值

CREATE TRIGGER neworder 
AFTER INSERT ON orders
FOR EACH ROW
SELECT NEW.order_num;
#通过NEW获得触发事件,触发器从NEW.order_num取得相应的值并返回

执行插入语句时,自动返回新的订单号

4.DELETE 触发器

(1)在DELETE 触发器中,可引入一个名为OLD的虚拟表,访问被删除的行
(2)OLD的值全是可读的,不能被更新
如果因为某种原因,订单不能存档,DELETE 本身将被放弃

5.UPDATE 触发器

(1)在UPDATE 触发器中,可引入一个名为OLD的虚拟表,访问以前(UPDATE语句)前的值,引用一个名为NEW的虚拟表访问新更新的值
(2)NEW值可能被更新(允许更改将要用于UPDATE语句中的值)
(3)OLD的值全是可读的,不能被更新

CREATE TRIGGER updatevendor 
BEFORE UPDATE ON vendors
FOR EACH ROW
SET NEW.vend_state=UPPer(NEW.vend_sate)
#每次更新一行 NEW.vend_state中的值都用 UPPer(NEW.vend_sate)代替

具体代码如下:

CREATE TRIGGER audit_log
AFTER INSERT ON employees_test
FOR EACH ROW
BEGIN
   INSERT INTO audit VALUES(NEW.ID,NEW.NAME);
END;
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值