MySQL高级

一、视图

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

解决方法:定义视图

视图:通俗的讲,视图就是一条SELECT语句执行后返回的结果集。视图是对若干张基本表的引用,一张虚表,查询语句执行的结果,不存储具体的数据。

定义视图:create view 视图名称(建议以v开头) as select语句;

查看视图:show tables;

删除视图: drop view 视图名称
实例:
1.将三张表拼接在一起
select * from goods as g left join goods_cates as c on g.cate_id=c.id join goods_brands as b on g.brand_id=b.id;
2.过滤需要信息
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 join goods_brands as b on g.brand_id=b.id);
3.创建视图
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 join goods_brands as b on g.brand_id=b.id));

二、事务
1. 为什么要有事务
例如:
A用户和B用户是银行的储户,现在A要给B转账500元,那么需要做以下几件事:
检查A的账户余额>500元;
A 账户中扣除500元;
B 账户中增加500元;
正常的流程走下来,A账户扣了500,B账户加了500,皆大欢喜。
那如果A账户扣了钱之后,系统出故障了呢?A白白损失了500,而B也没有收到本该属于他的500。

以上的案例中,隐藏着一个前提条件:A扣钱和B加钱,要么同时成功,要么同时失败。事务的需求就在于此。
所谓事务,它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位。

事务四大特性(简称ACID)
原子性(Atomicity)
一致性(Consistency)
隔离性(Isolation)
持久性(Durability)

开启事务:
begin;
或者
start transaction;

提交事务:
将缓存中的数据变更维护到物理表中
commit;

回滚事务:
放弃缓存中变更的数据
rollback;

原文地址:https://www.cnblogs.com/zc2018/p/8891863.html