一:视图

1.问题

对于复杂的查询,往往是有多个数据表进行关联查询而得到,如果数据库因为需求等原因发生了改变,为了保证查询出来的数据与之前相同,则需要在多个地方进行修改,维护起来非常麻烦

解决办法:定义视图

2.视图是什么

通俗的讲,视图就是一条select语句执行后的结果集,所以我们在创建视图的时候,主要的工作就落在创建这条sql查询语句上。

视图是对若干张表的引用,一张虚表,查询语句执行的结果,不存储具体的数据(基础表发生改变,视图也会发生改变)

方便操作,特别是查询操作,较少复杂sql语句,增强可读性

3.定义视图

create view 视图名称 as select语句;  

--视图名称建议以v_开头

4.查看视图

查看表会将所有的视图列举出来

show tables;

5.使用视图

视图的用途就是查询

select * from 视图名称;

6.删除视图

drop view 视图名称;

7.视图demo

(1)三表联查

mysql> select * from goods as g left join goods_cates as c on g.cate_id=c.id left join goods_brands as b on g.brand_id=b.id;

select g.*,c.name as cate_name,b.name as brand_name from goods as g left join goods_cates as c on g.cate_id=c.id left join goods_brands as b on g.brand_id=b.id;

如图,按照传统的方式,多表查询时候,不仅sql语句写的长,而且还容易出错。如果我们把上面的查询语句作为一个虚拟表来使用,这就是我们所说的视图

create view v_goods_info as select g.*,c.name as cate_name,b.name as brand_name from goods as g left join goods_cates as c on g.cate_id=c.id left join goods_brands as b on g.brand_id=b.id;

(2)查看下视图的结构;

desc v_goods_info;

(3)使用视图

select * from v_goods_info;

8.视图的作用

(1)提高了重用性,就像一个函数

(2)对数据库重构,却不影响程序的运行

(3)提高了安全性能,可以对不同的用户

(4)让数据更加清晰

二:事务

1为什么要有事务

事务广泛运用于订单系统,银行系统等多种场景

例如:A和B都是银行的储户,现在A要给B转账500,那么需要做以下几件事:

   ①检查A账户余额>500;

     ②A账户中扣除500;

     ③B账户增加500;

正常流程走下来,A账户减少500,B账户增加500,皆大欢喜。

那如果A账户扣了钱之后,系统出了故障怎么办?A白白损失500,B没有得到本该属于他的500。

以上案例隐藏一个前提条件;A扣钱和B加钱,要么同时成功,要么同时失败,事务的需求就在于此。

所谓事务,就是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位。

事务是数据库维护数据一致性的单位,在每个事务结束时,都能保持数据一致性

2事务的四大特性

(1)原子性(atomicity)

一个事务必须被视为一个不可分割的最小工作单位,整个事务中所有的操作要么全部提交成功,要么全部失败回滚,对于一个事务来说,不可能只执行其中一部分操作。

(2)一致性(consistency)

数据库总是从一个一致性状态转换到另一个一致性的状态。

(3)隔离性(isolation)

通常来说,一个事务所做的修改在最终提交以前,对其他事务是不可见的。

(4)持久性(durability)

一旦事务提交,则其所做的修改会永久保存到数据库(此刻即使系统奔溃,保存的数据也不会丢失)

3事务命令

表的引擎类型必须是innodb类型才可以使用事务,这是mysql表的默认引擎

查看标的创建语句,可以看到engine=innodb

show create table goods; 

(1)开启事务

开启事务后执行修改命令,变更会维护到本地缓存中,而不维护到物理表。

begin;

start transaction;

(2)提交事务

将缓存中的数据变更维护到物理表中

commit;

(3)回滚事务

放弃缓存中的变更

rollback;

4.注意:

(1)修改数据的命令会自动的触发事务,包括insert、update、delete

(2)而在SQL语句中有手动开启事务的原因是:可以进行多次数据的修改,如果成功一起成功,否则一起会滚到之前的数据

Mysql之视图和事务(五)的更多相关文章

  1. MySQL拓展 视图,触发器,事务,存储过程,内置函数,流程控制,索引,慢查询优化,数据库三大设计范式

    视图: 1.什么是视图 视图就是通过查询得到一张虚拟表,然后保存下来,下次直接使用即可 2.为什么要用视图 如果要频繁使用一张虚拟表,可以不用重复查询 3.如何使用视图 create view tea ...

  2. MySQL之视图、触发器、事务、存储过程、函数

    一 视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,可以将该结果集当做表来使用. 使用视图我们可以把查询过程中的 ...

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

    一.视图 视图就是一个虚拟表,我们把复杂的sql语句后看到的虚拟表封装起来,给他取个名字,当我们下次使用的时候,就不用再去写复杂的sql语句,直接调用封装后的视图名字,就可以得到我们想要的表,然后就可 ...

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

    MySQL之视图.触发器.事务.存储过程.函数 阅读目录 一 视图 二 触发器 三 事务 四 存储过程 五 函数 六 流程控制 MySQL这个软件想将数据处理的所有事情,能够在mysql这个层面上全部 ...

  5. mysql:视图,触发器,事务,存储过程,函数。

    一  视图 1 什么是视图:视图其实就是通过查询得到一张表并且保存下来,就是一张虚拟的表,并非真实存在,比如我们将两个表在终端通过(inner join)内链接起来,那么我们得到的这个表就叫做视图,其 ...

  6. mysql 视图,事务,存储过程,触发器

    一 视图 视图是一个虚拟表(非真实存在),是跑到内存中的表,真实表是硬盘上的表.使用视图我们可以把查询过程中的临时表摘出来,保存下来,用视图去实现,这样以后再想操作该临时表的数据时就无需重写复杂的sq ...

  7. MYSQL之视图、触发器、事务

    一 视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,可以将该结果集当做表来使用. 使用视图我们可以把查询过程中的 ...

  8. 数据库MySQL之 视图、触发器、存储过程、函数、事务、数据库锁、数据库备份、事件

    数据库MySQL之 视图.触发器.存储过程.函数.事务.数据库锁.数据库备份.事件 浏览目录 视图 触发器 存储过程 函数 事务 数据库锁 数据库备份 事件 一.视图 1.视图概念 视图是一个虚拟表, ...

  9. MySQL 的视图、触发器、事务、存储过程、函数

    MySQL 的视图.触发器.事务.存储过程.函数   阅读目录 一 视图 二 触发器 三 事务 四 存储过程 五 函数 六 流程控制 一 视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句 ...

随机推荐

  1. xadmin引入django-import-export导入功能

    一.安装 由于xadmin自带的包里面已经包含了django-import-export 所以不用再pip install django-import-export了 但是xadmin管理后台只有导出 ...

  2. VS2013 EF6连接MySQL步骤

    1.安装MySql的VS插件(版本请下载最新版)mysql-for-visualstudio-1.2.3.msihttp://cdn.mysql.com/Downloads/MySQL-for-Vis ...

  3. 如何使用Activator.CreateInstance创建一个列表<T>,其中T在运行时是未知的?

    参考网址:https://cloud.tencent.com/developer/ask/185965 using System; using System.Collections.Generic; ...

  4. WTL 9.0的变化 - atlapp.h

    忽然发现WTL更新到9.0.4140了,便对比了一下 8.1.12085. 先看看atlapp.h中有什么大的变动. 第61行: #if defined(_SYSINFOAPI_H_) &&a ...

  5. 火车头data下任务文件夹的SpiderResult.db3文件用什么软件打开

    火车头采集器默认是用sqlite数据库来保存数据的,新建一个采集,打开data/任务/发现有一个SpiderResult.db3文件,.db3是sqlite的存储文件后缀,那么要如何查看这些文件呢?用 ...

  6. 提高 Visualforce 页面加载效率的小知识

    一般原则 在设计页面时,我们要将页面的功能降至最少,不要包含多余的功能和数据,以最大化提高运行效率 如果需要开发的功能可以通过 Salesforce 的标准功能实现,那么尽量使用标准功能,比如 工作流 ...

  7. PATA1062 Talent and Virtue

    技术要点就是,一个是cmp函数的书写,首先应该分清楚排序关系,然后按照顺序依次排下去. 还有这里有一个巧妙点就是,在结构体中加入了类别这个标签. 学会抽象分类解决,排序比较函数cmp本质工作就是比较结 ...

  8. webpack的一些坑

    最近自己着手做一个小的Demo需要webpack,目前版本号是4.41.2,想使用的版本是3.6.0,因3x版本和4x版本很多地方不同,所以在安装过程中也是很多坎坷,下面是遇到的一些坑,和一些解决办法 ...

  9. Spring Boot 知识笔记(Filter过滤器)

    Filter也称之为过滤器,它是Servlet技术中最激动人心的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 htm ...

  10. wpf radiobuttong 去前面的圆点, 自定义radiobutton样式

    自定义radiobutton样式代码: <windows.Resources> <LinearGradientBrush x:Key="CheckRadioFillNorm ...