视图&事务&存储过程&流程控制

视图

1.什么是视图?

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

2.为什么要用视图?

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

3.如何使用视图?

create view 视图名 as select * from 表 inner join 表 on 条件;

强调

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

2.视图一般只适用于查询,不推荐修改视图的数据,如果修改的话会将原数据进行修改。

修改视图:当组成视图的基本表发生变化后可以通过修改视图来保持于基本表的一致性CREATE  OR  replace VIEW 视图名  AS  SELECT  *  FROM 基本表;删除视图drop view 视图名;

为什么开发过程中不会使用视图

视图是mysql的功能,如果项目中使用大量的视图,在你想要扩充功能的时候如果这个视图需要对视图修改的话,就需要先将mysql这边的视图修改后去应用程序中修改对应的sql语句,这样的话需要跨部门沟通,所以通常不会使用视图,而是通过修改sql语句进行扩展功能。

触发器

是一种保证数据完整性的方法。由事件来触发并非由程序调用和手动启动。

为什么使用触发器?

触发器是针对于对于某张表数据增insert,改update,删delete的行为,这类操作行为一旦执行就会触发触发器的执行,即自动执行另一端sql代码

创建触发器语法

#针对插入:create trigger 触发器名 after insert on 表名 for each row begin       sql 代码。。。endcreate trigger 触发器名 before insert on 表名 for each rowbegin    sql代码。。。end#针对删除:create trigger 触发器名 after delete on 表名 for each rowbegin    sql代码...endcreate tigger 触发器名 before delete on 表名 for each rowbegin     sql代码,,,end#针对修改create tigger 触发器名 after update on 表名 for each rrowbegin    sql代码。。。end create tigger 触发器名 before update on 表名 for each rowend?举个栗子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‘));create table errlog(id int primary key auto_increment,err_cmd char(64),err_time datetime);delimiter $$ #将mysql默认的结束符由;换成$$针对本次有效create trigger tri_after_insert_cmd after insert on cmd for each row begin    if NEW.success = ‘no‘ then  #新纪录会被mysql封装成new对象        insert into errlog(err_cmd,err_time) values(NEW.cmd,NEW.sub_time);    end if;end $$delimiter; #结束后将结束符改回来insert into cmd(user,priv,cmd,sub_time,success)values(‘egon‘,‘0755‘,‘ls -l /etc‘,NOW(),‘yes‘),(‘egon‘,‘0755‘,‘cat /etc/passwd‘,NOW(),‘no‘),(‘egon‘,‘0755‘,‘useradd xxx‘,NOW(),‘no‘),(‘egon‘,‘0755‘,‘ps aux‘,NOW(),‘yes‘); #向表cmd中插入记录,触发触发器,根据if的条件决定是否插入错误日志。select * from errlog; #查看errlog表记录drop trigger tri_after_insert_cmd; #删除触发器?

事务

什么是事务

开启一个事物可以包含一些sq语句,这些sql语句要么同时成功要么全部都无法成功,称之为事物的原子性

事务的作用:

保证了对数据操作的数据安全性

事务应该具有的四个属性:

原子性、一致性、隔离性、持久性。四个属性通常称为ACID特性

原子性(atomicity):一个事物是不可分割的工作单位,实务中包括的诸多操作要么做要么不做

一致性(consistency):事务必须是使数据库从一个一致性状态变成另一个一致性状态,一致性于原子性密切相关。

隔离性(isolation):一个事物不能被其他事务干扰。每个事务内部操作与使用数据对并发的其他事物都是隔离的,并发执行的各个事务之间不能互相干扰。

持久性(durability):持久性也称永久性(permanence),指一个事物一旦提交,他对数据库中数据的高边就应该是永久性的,接下来的其他操作或故障不应该对其影响。

事务操作命令

start transaction; #开启事务在修改事务之前rollback; #回滚到上一个状态即事务记录时刻commit; #开启事务之后只要没有commit操作,数据就没有真正刷新到硬盘,即可进行回滚。

存储过程

定义:存储过程包含了一系列的可执行的sql语句,存储过程调用它的名字可以执行其内部的一堆sql‘

三种开发模式

第一种

‘‘‘应用程序:只需要开发应用程序的逻辑mysql:编写好存储过程,以供应用程序调用优点:开发效率与执行效率都高缺点:考虑到认为因素,跨部门沟通等问题,会导致扩展性差‘‘‘

第二种

‘‘‘应用程序:除了开发应用程序的逻辑,还需要编写原生sql优点;比方式一扩展性高(非技术性)缺点:开发效率,执行效率不如方式一    编写原生sql太过复杂,而且考虑到sql语句的优化环境‘‘‘

第三种

‘‘‘应用程序:开发应用程序的逻辑,不需要编写原生代码,iyu别人的框架来处理数据,ORM优点:不用再编写原生sql,这就意味着开发效率比方式二高,同时兼容方式二的扩展性缺点:执行效率比方式二还低‘‘‘

创建存储过程

在mysql中调用delimiter $$create procedure p1(    in m int,  # in表示这个参数必须只能是传入不能被返回出去    in n int,      out res int  # out表示这个参数可以被返回出去,还有一个inout表示即可以传入也可以被返回出去)begin    select tname from teacher where tid > m and tid < n;    set res=0;end $$delimiter ;?# 小知识点补充,当一张表的字段特别多记录也很多的情况下,终端下显示出来会出现显示错乱的问题select * from mysql.user\G;set @res = 10#res的值用来判断存储过程是否被执行成功的依据,所以先定义一个变量@res存储10call p1(2,4,@res);

在python中调用(了解)

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 ;

函数

mysql的内置函数只能在sql语句中使用

CREATE TABLE blog (
    id INT PRIMARY KEY auto_increment,
    NAME CHAR (32),
    sub_time datetime
);

INSERT INTO blog (NAME, sub_time)
VALUES
    (‘第1篇‘,‘2015-03-01 11:31:21‘),
    (‘第2篇‘,‘2015-03-11 16:31:21‘),
    (‘第3篇‘,‘2016-07-01 10:21:31‘),
    (‘第4篇‘,‘2016-07-22 09:23:21‘),
    (‘第5篇‘,‘2016-07-23 10:11:11‘),
    (‘第6篇‘,‘2016-07-25 11:21:31‘),
    (‘第7篇‘,‘2017-03-01 15:33:21‘),
    (‘第8篇‘,‘2017-03-01 17:32:21‘),
    (‘第9篇‘,‘2017-03-01 18:31:21‘);
select DATE_FORMAT(sub_time,‘%Y-%m-%d‘),count(id) FROM blog group by DATE_FORMAT(sub_time,‘%Y-%m-%d‘);

流程控制

#if 条件
delimiter //
CREATE PROCEDURE proc_if ()
BEGIN
    declare i int default 0;
    if i = 1 THEN
        SELECT 1;
    ELSEIF i = 2 THEN
        SELECT 2;
    ELSE
        SELECT 7;
    END IF;
END //
delimiter ;
#where循环
# while循环
delimiter //
CREATE PROCEDURE proc_while ()
BEGIN
    DECLARE num INT ;
    SET num = 0 ;
    WHILE num < 10 DO
        SELECT
            num ;
        SET num = num + 1 ;
    END WHILE ;
END //
delimiter ;

原文地址:https://www.cnblogs.com/cyfdtz/p/12108037.html

时间: 2024-10-13 08:38:09

视图&事务&存储过程&流程控制的相关文章

MySQL 存储过程 -流程控制的使用

#五.流程控制的使用 #1.IF 使用 create PROCEDURE iftest1() BEGIN DECLARE a int DEFAULT 10; -- IF (a>1 &&a<20) THEN IF (a>1 and a<20) THEN SELECT 'ok'; ELSE SELECT 'No'; END IF; END; CALL iftest(); #2.case 使用 create PROCEDURE casetest() BEGIN DECLA

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

一,视图1,什么是视图? 视图就是通过查询得到一张虚拟表,然后保存下来,下次用的话直接使用即可2,为什么要用视图 如果要频繁使用一张虚拟表,可以不用重复查询3,怎么用? 在查询前面加 create view 视图名称 as sql语句 create view teacher_view as select tid from teacher where tname='李平老师': 强调:在硬盘中,视图只有表结构文件,没有数据文件 视图开发尽量不用 因为是在mysql里面 ,视图通常用于插叙,尽量不要

Mysql-自带的一些功能,基本用法(视图,触发器,事务,存储过程,函数,流程控制)

一. 视图 二. 触发器 三. 事务 四. 存储过程 五. 函数 六. 流程控制 一 .视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,可以将该结果集当做表来使用. 使用视图我们可以把查询过程中的临时表摘出来,用视图去实现,这样以后再想操作该临时表的数据时就无需重写复杂的sql了,直接去视图中查找即可,但视图有明显地效率问题,并且视图是存放在数据库中的,如果我们程序中使用的sql过分依赖数据库中的视图,即强耦

MySQL之视图、触发器、事务、存储过程、函数 流程控制

阅读目录 一 视图 二 触发器 三 事务 四 存储过程 五 函数 六 流程控制 MySQL这个软件想将数据处理的所有事情,能够在mysql这个层面上全部都做了,也就是说它想要完成一件事,以后想开发的人,例如想写python程序的人,你就专门的写你自己的python程序,以后凡是关于数据的增删改查,全部都在MySQL里面完成,也就是说它想实现一个数据处理与应用程序的一个完全的解耦和状态,比如说,如果我是个应用程序员,我想要查询数据,我不需要自己写sql语句,只需要调用mysql封装好的一些功能,直

视图,触发器,事务,存储过程,函数与流程控制,索引

一.视图 1.什么是视图 虚拟表:在硬盘中没有的,通过查询在内存中拼接的表 视图:通过查询得到一张虚拟表,保存下来,下次可直接使用 2.为什么要用视图 如果要频繁使用一张虚拟表,可以不用重复查询 3.如何用视图 create view teacher2course as select * from teacher inner join course on teacher.tid = course.teacher_id; 4.删除视图 drop view teacher2course; 5.强调

mysql基础教程(四)-----事务、视图、存储过程和函数、流程控制

事务 概念 事务由单独单元的一个或多个SQL语句组成,在这 个单元中,每个MySQL语句是相互依赖的.而整个单独单 元作为一个不可分割的整体,如果单元中某条SQL语句一 旦执行失败或产生错误,整个单元将会回滚.所有受到影 响的数据将返回到事物开始以前的状态:如果单元中的所 有SQL语句均执行成功,则事物被顺利执行. 存储引擎 概念 在mysql中的数据用各种不同的技术存储 在文件(或内存)中. 查看 通过 show engines: 来查看mysql支持的存储引擎. 常见引擎 在mysql中用的

MySQL视图、触发器、事务、存储过程、内置函数、流程控制、索引

一.视图 1.什么是视图 视图就是通过查询得到一张虚拟表,然后保存下来,下次直接使用即可 2.为什么要用视图 如果频繁使用一张虚拟表,可以不用重复查询 3.如何使用视图 create view teacher2course as #把下面查询的结果放在视图teacher2course中 select * from teacher inner join course on teacher.tid = course.teacher_id; 注意: 1.视图只有表结构,视图中的数据还是来源于原来的表

mysql数据库之 存储引擎、事务、视图、触发器、存储过程、函数、流程控制

目录 一.存储引擎 1.什么是存储引擎? 2.mysql支持的存储引擎 3. 使用存储引擎 二.事务 三.视图 1.什么是视图 2.为什么要用视图 3.如何用视图 四.触发器 为何要用触发器 创建触发器语法 五.存储过程 六.函数 七.流程控制 八.数据库备份(运维方向) 一.存储引擎 1.什么是存储引擎? mysql中建立的库===>文件夹 库中建立的表===>文件 现实生活中我们用来存储数据的文件有不同的类型,每种文件类型对应各自不同的处理机制:比如处理文本用txt类型,处理表格用exce

数据库---视图,触发器,事务,存储过程 ,函数,流程控制, 索引与慢查询优化,测试索引,数据库三范式(简介)

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