一、视图

视图(VIEW)也被称作虚表,即虚拟的表,是一组数据的逻辑表示,其本质是对应于一条SELECT语句,结果集被赋予一个名字,即视图名字。
视图本身并不包含任何数据,它只包含映射到基表的一个查询语句,当基表数据发生变化,视图数据也随之变化。

MySQL中的视图操作

创建视图

CREATE VIEW v_author(编号,姓名)
AS
SELECT * FROM author WITH CHECK OPTION

查询视图

SELECT * FROM v_author

创建多表视图

CREATE VIEW v_a_b(作者名字,博客标题,博客内容)
AS
SELECT a.author_name,b.title,b.content FROM author a LEFT JOIN blog b ON a.id=b.author_id
SELECT * FROM v_a_b

创建视图:没有创建,有取代

CREATE OR REPLACE VIEW v_blog(编号,标题,内容,作者编号)
AS SELECT * FROM blog
WITH CHECK OPTION

修改视图的数据--->修改基表数据

UPDATE v_blog SET 内容 = '修改后的内容' WHERE  编号=1
SELECT * FROM blog

部分数据创建视图

CREATE VIEW v_blog_1(编号,标题,内容,作者编号)
AS SELECT * FROM blog WHERE author_id=1
WITH CHECK OPTION
SELECT * FROM v_blog_1
#WITH CHECK OPTION:where条件约束
 
INSERT INTO v_blog_1(编号,标题,内容,作者编号)VALUES(10,'123','123',1)

二、事务
 

  • Transaction
  • 事务:一个最小的不可再分的工作单元;通常一个事务对应一个完整的业务(例如银行账户转账业务,该业务就是一个最小的工作单元)
  • 一个完整的业务需要批量的DML(insert、update、delete)语句共同联合完成
  • 事务只和DML语句有关,或者说DML语句才有事务。这个和业务逻辑有关,业务逻辑不同,DML语句的个数不同

MySQL中的事务操作

#开启事务

BEGIN

#提交事务

COMMIT

#回滚

#创建表
CREATE TABLE IF NOT EXISTS runoob(id INT(5))ENGINE=INNODB;
SELECT * FROM runoob;
#开启事务
BEGIN
#输入
INSERT INTO runoob VALUES(3);
#回滚
ROLLBACK;
SELECT * FROM runoob

 

三、触发器

1、触发器概念

        触发器(trigger):监视某种情况,并触发某种操作,它是提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,例如当对一个表进行操作( insert,delete, update)时就会激活它执行。

2、触发器创建语法四要素 

1.监视地点(table)  
2.监视事件(insert/update/delete)  
3.触发时间(after/before)  
4.触发事件(insert/update/delete)

触发器SQL语法:
DELIMITER $
create trigger 触发器名字  
触发时间 触发事件 on 表名   for each row  
begin      
sql语句;  
end $
DELIMITER ;  

触发器 插入

DELIMITER $

CREATE TRIGGER abc

AFTER INSERT ON student FOR EACH ROW

BEGIN

 INSERT INTO cj(stu_id,stu_name)VALUES(new.stuid,new.username);

END $

DELIMITER ;

执行触发

INSERT INTO student(username,PASSWORD,birtday)

VALUES('王三','111111','2016-08-23');

SELECT * FROM cj

触发器 删除

DELIMITER $

CREATE TRIGGER bcd

AFTER DELETE ON student FOR EACH ROW

BEGIN

DELETE FROM cj WHERE cj.stu_id=old.stuid;

END $

DELIMITER ;

触发器 修改

DELIMITER $
CREATE TRIGGER def
BEFORE UPDATE ON student FOR EACH ROW
BEGIN
UPDATE cj SET cj.stu_name=old.username WHERE cj.stu_id=old.stuid;
END $
DELIMITER

四、存储过程

MySQL 5.0 版本开始支持存储过程。

存储过程(Stored Procedure)是一种在数据库中存储复杂程序,以便外部程序调用的一种数据库对象。 存储过程是为了完成特定功能的SQL语句集,经编译创建并保存在数据库中,用户可通过指定存储过程的名字并给定参数(需要时)来调用执行。 存储过程思想上很简单,就是数据库 SQL 语言层面的代码封装与重用。

优点

存储过程可封装,并隐藏复杂的商业逻辑。
存储过程可以回传值,并可以接受参数。
存储过程无法使用 SELECT 指令来运行,因为它是子程序,与查看 表,数据表或用户定义函数不同。
存储过程可以用在数据检验,强制实行商业逻辑等。

触发器语法 

create procedure 触发器名()

begin    

sql语句;  

end;

创建存储过程

DELIMITER $

CREATE PROCEDURE tesa2()

BEGIN

    声明变量类型

DECLARE un VARCHAR(32) DEFAULT '';

    赋值

SET un='abc';

    将查询结果赋值给un
 

SELECT username INTO un FROM student WHERE stuid=1;

    #查询un变量,返回

SELECT un;

END $

DELIMITER ;

#调用

CALL tesa2()

创建存储过程 变量作用域

DELIMITER $
CREATE PROCEDURE tesa3()
BEGIN 
    BEGIN 
        #声明变量类型
        DECLARE un VARCHAR(32) DEFAULT '';
        #赋值
        SET un='abc';
        #将查询结果赋值给un
        SELECT username INTO un FROM student WHERE stuid=1;
        #查询un变量,返回
        SELECT un;
    END;
    BEGIN 
        #声明变量类型
        DECLARE un VARCHAR(32) DEFAULT '';
        #赋值
        SET un='abc';
        #将查询结果赋值给un
        SELECT username INTO un FROM student WHERE stuid=2;
        #查询un变量,返回
        SELECT un;
    END;
END $
DELIMITER ;
#调用
CALL tesa3()