一、视图
视图:简单来说,视图就是一条select语句执行之后返回的结果集,所以在创建视图的时候基本工作就落在这条SQL查询语句上.
视图是对若干张基本表的引用,它是一张虚表,是查询语句执行的结果,不存储具体的数据(基本表数据发生了改变视图也会跟着改变)
视图只用于查询数据,方便查询
use jingdong;
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, b.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;
# 创建视图 目的是方便茶数据
# create view 视图名称(推荐以v开头) as 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_brand as b on g.brand_id = b.id;
show tables;
select * from v_goods_info limit 5;
update v_goods_info set name = "笔记本" where id = 5; #视图只能进行方便查询 不可用于增删改
#删除视图
# drop view 视图名
1.视图的作用:
# 1.提高了重用性,就像一个函数
# 2.对数据库重构,却不影响程序的运行
# 3.提高了安全性能,可以对不同用户
# 4.让数据更加清晰
二、事务
所谓事务,即一个操作序列,即这些操作要么都执行 要么都不执行 是一个不可分割的工作单元.
# 开启事务
begin;
# 或者
start transaction;
# python中默认已经开启了事务,必须commit之后数据才可以提交
# mysql命令行工具执行完语句之后自动进行了commit,但是一旦开启了事务,不提交,数据就不会写入数据库,同时该条记录处于上锁状态,其他用户此时对这条记录进行操作的话会处于等待状态,
# 必须进行提交之后另一个用户才可以对此字段进行操作,这也是隔离性的体现,保证数据的安全.
1.事务的特性
- 原子性:一个事务被认为是一个不可分割的最小工作单元。整个事务中的所有操作要么全部提交成功,要么全部失败滚回。保证了操作要么成功,要么不成功.
- 一致性:保证了数据在commit之前不会因为系统等其他外部因素造成数据错误
- 隔离性:通常来说,一个事务的修改在最终提交之前,对其他事务是不可见的,一个SQL语句(客户端)的执行不会影响另一个SQL语句(客户端)的执行.
- 持久性:一旦事务提交,则会永久保存在数据库中.
三、索引
索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个重要组成部分),它们包含着对数据表里所有记录的引用指针。加快数据库的查询速度。
索引的原理是每一次都缩小要查找的数据的范围来筛选出最后的结果,同时把随机的事件变成顺序的事件,也就是我们总是通过同一种查找方式来锁定数据。
B-树:
create table test_index(title varchar(10));
select count(*) from test_index;
# 开始运行时间监测
set profiling = 1;
select * from test_index where title = 'haha-99999';
# 查看执行时间
show profiles;
# 为表test_index的title字段创建索引title_index
create index title_index on test_index(title(10));
# 执行查询语句
select * from test_index where title = 'haha-99999';
show profiles;
#查看索引
show index from test_index;
show index from goods;
# 创建索引
# 如果指定字段是字符串 需要指定长度 建议长度和创建字段的数据长度一致
# 字段类型如果不是字符串 可以不填写长度
# create index 索引名称 on 表名(字段名称(长度))
# 删除索引
# drop index 索引名称 on 表名;