day41(视图、存储过程、事务、触发器、函数,流程控制)

一、视图

视图是一个虚拟表,其本质是(根据SQL语句获取动态的数据集),用户使用时只需使用名称即可获取结果集,可以将该结果集当做表来使用。

1、创建视图

create view  teacher_view as select tid from teacher where tname='aa'

2、 使用视图

select * from course

3、修改视图

alter view teacher_view as select * from course where cid>3;

4、删除视图

drop view teacher_view

二、触发器

使用触可以定制用户对表进行(增、删、改)操作时前后的行为

# 插入前
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

二使用触发器

触发器无法由用户直接调用,而是由对表的增删改操作面被动引发的

drop trigger tri_after_insert_cmd

三、事务

事务用于将某些操作的多个SQL作为原子性操作,一旦有某一个出现错误,即可回滚到原来的状态,从而保证

数据库数据完整性。

create table user(
id int primary key auto_increment,
name char(32),
balance int
);

insert into user(name,balance)
values
('wsb',1000),
('egon',1000),
('ysb',1000);

#原子操作
start transaction;
update user set balance=900 where name='wsb'; #买支付100元
update user set balance=1010 where name='egon'; #中介拿走10元
update user set balance=1090 where name='ysb'; #卖家拿到90元
commit;

#出现异常,回滚到初始状态
start transaction;
update user set balance=900 where name='wsb'; #买支付100元
update user set balance=1010 where name='egon'; #中介拿走10元
uppdate user set balance=1090 where name='ysb'; #卖家拿到90元,出现异常没有拿到
rollback;
commit;
mysql> select * from user;
+----+------+---------+
| id | name | balance |
+----+------+---------+
| 1 | wsb | 1000 |
| 2 | egon | 1000 |
| 3 | ysb | 1000 |
+----+------+---------+
rows in set (0.00 sec)

四存储过程

存储过程包含了一系列可执行的sql语句,存储过程放于Mysql中,通过调用它名字内部的一堆 sql

使用存储过程的优点:

1、用于替代程序写的sql语名,实现程序与sql解耦和

2、基于网络传输,传别名的数量小,而直接传sql数据量大

缺点:

1、跨部门沟通烦锁

程序与数据库结合使用的三种方式

方式一:

mysql:存储过程

程序:调用存储过程 

方式二:

mysq:

程序纯sql语句

方式三:

mysql:

程序:类和对象,即orm

二创建存储过程有参

in    入参

out   出参

inout  既可当入参与可当出参

delimiter //

create procedure p5(

  OUT p_return_code tinyint

)

begin

  declare exit handler for sqlexception

  begin

    set p_return_code=1;

    rollback;

  end;

  declare exit handler for sqlwarning

  begin

    set p_return_code=2;

    rollback;

  end

  start transaction;

    delete from tb1;

    insert into blog(name,sub_time) value ('aa',now())

  commit;

  set p_return_code=0;

end//

delimiter;

猜你喜欢

转载自www.cnblogs.com/lg04551/p/9036096.html