mysql视图能触发器吗_7、Mysql视图和触发器

视图

视图是一个虚拟表(非真实存在),其本质是【根据SQL语句获取动态的数据集,并为其命名】,用户使用时只需使用【名称】即可获取结果集,并可以将其当作表来使用。

临时表搜索

SELECT

*

FROM

(

SELECT

nid,

NAME

FROM

tb1

WHERE

nid > 2

) AS A

WHERE

A. NAME = 'alex';

1、创建视图

格式:CREATE VIEW 视图名称 AS SQL语句

CREATE VIEW v1 AS

SELET nid,

name

FROM

A

WHERE

nid > 4

2、删除视图

格式:DROP VIEW 视图名称

DROP VIEW v1

3、修改视图

格式:ALTER VIEW 视图名称 AS SQL语句

ALTER VIEW v1 AS

SELET A.nid,

B. NAME

FROM

A

LEFT JOIN B ON A.id = B.nid

LEFT JOIN C ON A.id = C.nid

WHERE

A.id > 2

AND C.nid < 5

4、使用视图

使用视图时,将其当作表进行操作即可,由于视图是虚拟表,所以无法使用其对真实表进行创建、更新和删除操作,仅能做查询用。

select * from v1

触发器

对某个表进行【增/删/改】操作的前后如果希望触发某个特定的行为时,可以使用触发器,触发器用于定制用户对表的行进行【增/删/改】前后的行为。

1、创建基本语法

插入前

CREATE TRIGGER tri_before_insert_tb1 BEFORE INSERT ON tb1 FOR EACH ROW

BEGIN

...

END

插入后

CREATE TRIGGER tri_after_insert_tb1 AFTER INSERT ON tb1 FOR EACH ROW

BEGIN

...

END

删除前

CREATE TRIGGER tri_before_delete_tb1 BEFORE DELETE ON tb1 FOR EACH ROW

BEGIN

...

END

删除后

CREATE TRIGGER tri_after_delete_tb1 AFTER DELETE ON tb1 FOR EACH ROW

BEGIN

...

END

更新前

CREATE TRIGGER tri_before_update_tb1 BEFORE UPDATE ON tb1 FOR EACH ROW

BEGIN

...

END

更新后

CREATE TRIGGER tri_after_update_tb1 AFTER UPDATE ON tb1 FOR EACH ROW

BEGIN

...

END

插入前触发器

delimiter //

CREATE TRIGGER tri_before_insert_tb1 BEFORE INSERT ON tb1 FOR EACH ROW

BEGIN

IF NEW. NAME == 'alex' THEN

INSERT INTO tb2 (NAME)

VALUES

('aa')

END

END//

delimiter ;

插入后触发器

delimiter //

CREATE TRIGGER tri_after_insert_tb1 AFTER INSERT ON tb1 FOR EACH ROW

BEGIN

IF NEW. num = 666 THEN

INSERT INTO tb2 (NAME)

VALUES

('666'),

('666') ;

ELSEIF NEW. num = 555 THEN

INSERT INTO tb2 (NAME)

VALUES

('555'),

('555') ;

END IF;

END//

delimiter ;

特别的:NEW表示即将插入的数据行,OLD表示即将删除的数据行。

2、删除触发器

DROP TRIGGER tri_after_insert_tb1;

3、使用触发器

触发器无法由用户直接调用,而知由于对表的【增/删/改】操作被动引发的。

insert into tb1(num) values(666)

你可能感兴趣的:(mysql视图能触发器吗)