zoukankan      html  css  js  c++  java
  • Mysql之视图和事务(五)

    一:视图

    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语句中有手动开启事务的原因是:可以进行多次数据的修改,如果成功一起成功,否则一起会滚到之前的数据

  • 相关阅读:
    回答自己的提问
    <构建之法>13——17章的读后感
    <构建之法>10,11,12章的读后感
    <构建之法>8,9,10章的读后感
    作业5.2
    【作业报告】作业5 四则运算 测试与封装 5.1 改进版
    作业 5.1
    阅读
    做汉堡
    阅读《构建之法》
  • 原文地址:https://www.cnblogs.com/huiyichanmian/p/11209608.html
Copyright © 2011-2022 走看看