视图,触发器,事务与存储过程

视图

什么是视图

视图就是通过查询得到一张虚拟表,然后保存下来,下次用的直接使用即可1、什么是视图

视图就是通过查询得到一张虚拟表,然后保存下来,下次用的直接使用即可

为什么要用视图

如果要频繁使用一张虚拟表,可以不用重复查询

如何创建视图

create view teacher2course as
select * from teacher inner join course
    on teacher.tid = course.teacher_id;

强调

1、在硬盘中,视图只有表结构文件,没有表数据文件

2、视图通常是用于插叙,尽量不要修改视图中的数据

删除视图

drop view teacher2course;

触发器

什么是触发器

在满足对某张表数据的增,删,改的情况下,自动触发的功能称之为触发器

为什么要用触发器

触发器专门针对我们对某一张表数据增insert、删delete、改update的行为,这类行为一旦执行就会触发触发器的执行,即自动运行另外一段sql代码

创建触发器的语法

# 针对插入
create trigger tri_after_insert_t1 after insert on 表名 for each row
begin
    sql代码。。。
end

create trigger tri_after_insert_t2 before insert on 表名 for each row
begin
    sql代码。。。
end

# 针对删除
create trigger tri_after_delete_t1 after delete on 表名 for each row
begin
    sql代码。。。
end

create trigger tri_after_delete_t2 before delete on 表名 for each row
begin
    sql代码。。。
end

# 针对修改
create trigger tri_after_update_t1 after update on 表名 for each row
begin
    sql代码。。。
end

create trigger tri_after_update_t2 before update on 表名 for each row
begin
    sql代码。。。
end

案例代码

CREATE TABLE cmd (
    id INT PRIMARY KEY auto_increment,
    USER CHAR (32),
    priv CHAR (10),
    cmd CHAR (64),
    sub_time datetime, #提交时间
    success enum (‘yes‘, ‘no‘) #0代表执行失败
);

CREATE TABLE errlog (
    id INT PRIMARY KEY auto_increment,
    err_cmd CHAR (64),
    err_time datetime
);

delimiter $$
create trigger tri_after_insert_cmd after insert on cmd for each row
begin
    if NEW.success = ‘no‘ then
        insert into errlog(err_cmd,err_time) values(NEW.cmd,NEW.sub_time);
    end if;
end $$
delimiter ;

注意

上面的代码中: delimiter $$ 和deliniter ;
  sql中;为语句的默认结束符号,为了让sql正确识别语句,所以需要修改默认的结束符号。
  语句完成之后,再次修改为默认的符号。

删除触发器

drop trigger tri_after_insert_cmd;

事务

什么是事务

开启一个事务可以包含一些sql语句,这些sql语句要么同时成功,要么一个都

别想成功,称之为事务的原子性

事务的作用

事务用于将某些操作的多个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);

try:
    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元
except 异常:
    rollback; #出现异常,进行回滚操作
else:
    commit;#没有异常,则提交修改

存储过程

什么是存储过程

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

三种开发模型

一、        

应用程序:只需要开发应用程序的逻辑

mysql:编写好存储过程,以供应用程序调用

优点:开发效率,执行效率都高

缺点:考虑到人为因素、跨部门沟通等问题,会导致扩展性差

二、

应用程序:除了开发应用程序的逻辑,还需要编写原生sql

mysql:不做操作

优点:比方式1,扩展性高(非技术性的)

缺点:

1、开发效率,执行效率都不如方式1

2、编写原生sql太过于复杂,而且需要考虑到sql语句的优化问题

三、

应用程序:开发应用程序的逻辑,不需要编写原生sql,基于别人编写好的框架来处理数据,ORM

mysql:不做操作

优点:不用再编写纯生sql,这意味着开发效率比方式2高,同时兼容方式2扩展性高的好处

缺点:执行效率连方式2都比不过

创建存储过程

对于存储过程,可以接收参数,其参数有三类:

in 仅用于传入参数用

out 仅用于返回值用

inout 既可以传入又可以当作返回值

delimiter $$
create procedure p1(
    in m int,
    in n int,
    out res int
)
begin
    select tname from teacher where tid > m and tid < n;
    set res=0;
end $$
delimiter ;

如何用存储过程

1、直接在mysql中调用

set @res=10

call p1(2,4,10);

查看结果

select @res;

2、在python程序中调用

cursor.callproc(‘p1‘)

print(cursor.fetchall())

3、事务的使用---与存储过程的结合

delimiter //
create PROCEDURE p5(
    OUT p_return_code tinyint
)
BEGIN
    DECLARE exit handler for sqlexception
    BEGIN
        -- ERROR
        set p_return_code = 1;
        rollback;
    END;

    DECLARE exit handler for sqlwarning
    BEGIN
        -- WARNING
        set p_return_code = 2;
        rollback;
    END;

    START TRANSACTION;
        update user set balance=900 where id =1;
        update user123 set balance=1010 where id = 2;
        update user set balance=1090 where id =3;
    COMMIT;

    -- SUCCESS
    set p_return_code = 0; #0代表执行成功

END //
delimiter ;

删除存储过程

drop procedure proc_name;

函数

!!!注意!!!

函数中不要写sql语句(否则会报错),函数仅仅只是一个功能,是一个在sql中被应用的功能

若要想在begin...end...中写sql,请用存储过程

流程控制

全文参考

原文地址:https://www.cnblogs.com/guodengjian/p/9038534.html

时间: 2024-10-09 08:48:37

视图,触发器,事务与存储过程的相关文章

视图 触发器 事务 函数 存储过程

1.视图 视图是一个虚拟表(非真实存在).使用视图我们可以把查询过程中的临时表摘出来,用视图去实现. 视图有明显的效率问题,而且使用视图会过分依赖视图,强耦合,这样意味着扩展sql极为不便,因此不推荐使用 创建视图,使用视图 DROP VIEW teacher_view 删除视图 DROP VIEW teacher_view 2.使用触发器可以定制用户对某张表进行增删改操作前后的行为,注意:没有查询 delimiter // create trigger t1 BEFORE INSERT on

Mysql之视图 触发器 事务 存储过程 函数

视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,可以将该结果集当做表来使用. 使用视图我们可以把查询过程中的临时表摘出来,用视图去实现,这样以后再想操作该临时表的数据时就无需重写复杂的sql了,直接去视图中查找即可,但视图有明显地效率问题,并且视图是存放在数据库中的,如果我们程序中使用的sql过分依赖数据库中的视图,即强耦合,那就意味着扩展sql极为不便,因此并不推荐使用 #两张有关系的表 mysql> se

视图, 事务,存储过程,if,触发器,索引

视图 create [or replace]#如果存在就替换 view    视图名字(#可防止标题栏字段) as (select name,salary from em); alter view  视图名字 as (select name,salary from em);   等价于上面的 or replace 增删改查等同于 对于原表进行增删改查     视图只有结构无数据 类似变量 insert 视图名 () values() delete from 视图名字 where.. update

MySQL拓展 视图,触发器,事务,存储过程,内置函数,流程控制,索引,慢查询优化

视图: 1.什么是视图 视图就是通过查询得到一张虚拟表,然后保存下来,下次直接使用即可 2.为什么要用视图 如果要频繁使用一张虚拟表,可以不用重复查询 3.如何使用视图 create view teacher2course as select * from teacher inner join course on teacher.tid = course.teacher_id; 强调: (1)在硬盘中,视图只有表结构文件,没有表结构数据 (2)视图通常是用于查询,尽量不要修改视图中的数据 dro

SQL表连接视图触发器事务存储过程

trancate 删除    公共表表达式  修改视图 表联合:union列数目没变化,可以将结果集合并,没有改变结果的结构.多个select.行数增加而已. 表连接 改变列的数目,3列和9列的表合并成12列的表称为连接 交叉连接:cross两个表的笛卡尔积.生成辅助表,用老数据优化,需要1234纯数字连续据表 creat table num15 ( num int ) insert into num15 内连接: 外连接:

mysql批处理/触发器/事务管理/存储过程

mysql里的批处理(sql语句) 格式: l mysql –u user –p < sql_file 表示从某个文件里执行sql语句 l mysql –u user –p < sql_file > out_file 表示从某个文件里执行,并将执行结果保存到out_file文件之中 举个例子: 小王每天早晨来之后,都需要查询班级共有多少人,还要查本学期共有几门课程,还要查询最近的考试成绩........需要做很多操作 sql.txt里  use pingtai;   //选择数据库 se

视图,事务以及存储过程介绍

一:视图 1:定义:视图本质上是一张虚拟的表,它的数据来自select语句. 2:创建视图的语句: create view 视图名字 as select *from 表名; 3:作用: 原表安全,隐藏部分数据,开放指定的数据:因为视图可以将查询结果保存,所以可以用视图来减少书写sql的次数. 4:特点: ①:每次对视图进行的查询,其实都是再次执行了as后面的查询语句 ②:可以对视图进行修改,修改会同步到原表 ③:视图是永久存储的,存储的不是数据,而是一条 as sql 语句 二:事务 1:定义:

MySQL视图、事务与存储过程

一.可视化工具的使用方法 简述:首先我们使用数据库可视化工具是为了让我们在建立数据库的时候能够减少代码的书写从而提升我们编写程序的效率,而我使用的是Navicat工具是因为使用它基本为无脑操作我就不过多的介绍. 二.注入mysql攻击 1.什么是注入mysql攻击? 简述:注入mysql攻击指的是用户可以某种方式无需用户名或密码就可以登入你的数据库. 2.注入mysql攻击的两种方式: 1:用户在登录时在其输入的用户名后写入了如__等字符,在pymysql中__代表的是注释所以跟在其后的输入密码

Node.js——视图、事务、存储过程

https://www.bilibili.com/video/av15496406/?p=57 https://blog.csdn.net/u013630349/article/details/75041659 视图 存储一个复杂的sql语句,性能低,不如自己写sql语句 --创建视图 create view vw_t8 as select * from t8 --使用视图 select * from vw_t8 --删除试图 DROP VIEW vw_t8 事务 原文地址:https://ww

数据库(视图、事务、存储过程、函数)

1.视图: 视图就是通过查询得到一张虚拟表,然后保存下来,下次直接使用即可 (视图就是查询得到的虚拟表) 注意:1.在硬盘中,视图只有表结构文件,没有表数据文件,数据来源于原始表 2.视图一般只用于查询,一般不修改表中的数据,在公司一般不使用视图 1.创建视图 create view teacher2course as select * from teacher inner join course on teacher.tid = course.teacher_id; 2.删除视图 drop v