视图:
对于一个sql查询,如果发生了修改,就需要修改sql语句。
我们可以通过定义视图来解决问题。改变需求之后就改变视图。
视图是对查询的封装 定义视图: create view 视图名称 as select语句;
例如:定义视图 查询所有学生对应的成绩。
create view v_stu_score as
select students.* , scores.score
from students inner join scores
on scores.stuid = sudents.id; 查看视图:查看表会把视图也列出来
show tables; 删除视图: drop view 视图名称;
例如:drop view v_stu; 使用: 视图的用途就是查询。
select * from v_stu_score; 事务: 1 为什么要有事务
事务广泛的运用于订单系统、银行系统等多种场景
例如:A用户和B用户是银行的储户,现在A要给B转账500元,那么需要做以下几件事:
检查A的账户余额>500元;
A 账户中扣除500元;
B 账户中增加500元;
正常的流程走下来,A账户扣了500,B账户加了500,皆大欢喜。
那如果A账户扣了钱之后,系统出故障了呢?A白白损失了500,而B也没有收到本该属于他的500。
以上的案例中,隐藏着一个前提条件:A扣钱和B加钱,要么同时成功,要么同时失败。事务的需求就在于此 事务(Transaction)是并发控制的基本单位。所谓事务,它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位。
例如,银行转帐工作:从一个帐号扣款并使另一个帐号增款,这两个操作要么都执行,要么都不执行。
所以,应该把他们看成一个事务。事务是数据库维护数据一致性的单位,在每个事务结束时,都能保持数据一致性 2 事务四大特性(简称ACID):
原子性(Atomicity):事务中的全部操作在数据库中是不可分割的,要么全部完成,要么均不执行
一致性(Consistency):几个并行执行的事务,其执行结果必须与按某一顺序串行执行的结果相一致
隔离性(Isolation):事务的执行不受其他事务的干扰,事务执行的中间结果对其他事务必须是透明的
持久性(Durability):对于任意已提交事务,系统必须保证该事务对数据库的改变不被丢失,即使数据库出现故障 3 事务的使用:
只有innodb引擎才支持使用事务
查看表的创建语句可以看到 engine = innodb
show create table students; 修改数据库的命令都会出发事务,并且执行结束会提交。包括 insert、update 和 delete 开启事务: 开启事务后 变更会维护本地缓存当中,不修改真实的库表
begin;
提交事务: 提交后 会将本地缓存中的临时表变化提交给真实表做出修改
commit;
回滚事务: 如果提交失败 或者事务执行到一半发生异常 可以回滚,放弃内存当中改变的临时结果。
rollback; 例如:
begin; -- 开启事务
insert into classes (name) values ( "haha" ); -- begin后执行了修改语句,此时执行select能看到修改后的数据表,是在我们内存当中的临时表。
-- rollback; 如果执行回滚,代表放弃之前的修改,实际上真实表没有任何变化。
commit; -- 提交事务,代表我刚刚做出的修改更改到真实表当中。 索引:
在实际当中使用数据库,绝大多数的操作都是在查询数据。
当数据库中数据库中数据量非常大的时候,查询速度就会很慢。
索引是优化查询速度的方案。 主键和唯一索引都是索引,可以提高查询速度。索引会单独创建一个目录,对应数据的位置。
索引分单列索引和组合索引:
单列索引,索引只包含一列数据。一张表可以有多个单列索引。
多列索引,一个索引包含多个列。 索引实际上是mysql服务器为了一个平衡二叉树。当我们按照索引查找实际上执行了二分查找。 语法:
查看索引: show index from 表名; 创建索引: create index 索引名 on 表名( 字段名称(长度) );
如果指定字段是字符串,需要指定长度。建议长度与定义字段长度一直。
如果不是字符串 可以不填写长度 删除索引: drop index 索引名 on 表名; 缺点:
虽然索引大大提高查询速度,但会降低更新表的效率。每次更新表,sql还需要对索引进行维护。
建立索引会占用磁盘空间的索引文件。 索引查询时间测试:
1 创建一个测试表:
create table test_index(
id int primary key auto_increment;
title varchar(10)
);
2 插入十万条数据
创建存储过程:
delimiter //
create procedure pro_test()
begin
declare i int default 0;
while i < 1000000 do
insert into test_index value( 0 , concat("test",i) );
i += 1;
end while;
end
// delimiter ; 调用存储过程:
call pro_test(); 3 开启运行时间监控
set profiling = 1; 4 查找数据
select * from test_index where id = 100000
select * from test_index where title = "test1000000";
查看执行时间: show profiles;
-- 可以看出,主键是自动维护一个索引的,查询主键花费时间明显少特别多。 5 创建一个索引后再查询:
create index index_test on test_index( title varchar(10) ); select * from test_index where title = "test1000000";
show profiles; 可以看出 添加索引之后明显时间降低。

mysql中的视图、事务和索引的更多相关文章

  1. 数据库表设计时一对一关系存在的必要性 数据库一对一、一对多、多对多设计 面试逻辑题3.31 sql server 查询某个表被哪些存储过程调用 DataTable根据字段去重 .Net Core Cors中间件解析 分析MySQL中哪些情况下数据库索引会失效

    数据库表设计时一对一关系存在的必要性 2017年07月24日 10:01:07 阅读数:694 在表设计过程中,我无意中觉得一对一关系觉得好没道理,直接放到一张表中不就可以了吗?真是说,网上信息什么都 ...

  2. MySQL 查询 存储过程 视图 触发器 函数 索引 建表语句 数据库版本 当前登录用户 当前数据库名称

    MySQL 查询 存储过程 视图 触发器 函数 索引 建表语句 数据库版本 当前登录用户 当前数据库名称   INFORMATION_SCHEMA.TABLES INFORMATION_SCHEMA. ...

  3. Mysql中的视图

    什么是视图 通俗的讲,视图就是一条SELECT语句执行后返回的结果集.所以我们在创建视图的时候,主要的工作就落在创建这条SQL查询语句上. 视图的特性 视图是对若干张基本表的引用,一张虚表,查询语句执 ...

  4. 【转载】Mysql中的Btree与Hash索引比较

    转载地址:http://www.jb51.net/article/62533.htm 这篇文章主要介绍了Mysql中的Btree与Hash索引比较,本文起讲解了B-Tree 索引特征.Hash 索引特 ...

  5. SQLServer中在视图上使用索引(转载)

    在SQL Server中,视图是一个保存的T-SQL查询.视图定义由SQL Server保存,以便它能够用作一个虚拟表来简化查询,并给基表增加另一层安全.但是,它并不占用数据库的任何空间.实际上,在你 ...

  6. MySQL学习06(事务和索引)

    事务 概述 什么是事务 事务就是将一组SQL语句放在同一批次内去执行 如果一个SQL语句出错,则该批次内的所有SQL都将被取消执行 MySQL事务处理只支持InnoDB和BDB数据表类型 事务的ACI ...

  7. 在Navicat for MySQL中打开视图时,提示视图没有主键的问题

    一直把视图理解为一个select语句而已,视图一般就是用于查询,不会通过视图来更新表或视图本身的数据,所以视图根本不需要什么主键.今天自己建了一个视图view_test: drop view if e ...

  8. 关于mysql中like查询是否通过索引的测试

    测试mysql的like语句是否通过索引时得到结果如下: 图片1: 图片2: 图片3: 通过上述3组图片我想大家很容易愤青我使用的'%8888888%','%8888888'和'8888888%'3中 ...

  9. MySQL中的视图详解

    一.什么是视图? 简单来说,视图就是从一张表中导出的虚拟表.视图拥有表的结构,但是在数据库中只有视图的定义,但是没有视图中的数据. 视图是由查询语句从一张表中导出来的数据,不是一张实际的表. 二.视图 ...

  10. MySQL中EXPLAIN解释命令 查看索引是否生效

    explain显示了mysql如何使用索引来处理select语句以及连接表.可以帮助选择更好的索引和写出更优化的查询语句. 使用方法,在select语句前加上explain就可以了: 如: expla ...

随机推荐

  1. C/S 和B/S 详解 --- 2017-04-25

    来源:脚本之家 一.C/S 架构 1. 概念 C/S 架构是一种典型的两层架构,其全程是Client/Server,即客户端服务器端架构,其客户端包含一个或多个在用户的电脑上运行的程序,而服务器端有两 ...

  2. 100个命令Linux常用命令大全

    Linux常用命令大全100条: 1,echo "aa" > test.txt 和 echo "bb" >> test.txt//>将原 ...

  3. Mycat 分片规则详解--ASCII 取模范围分片

    实现方式:该算法与取模范围算法类似,该算法支持数值.符号.字母取模.首先截取长度为 prefixLength 的子串,在对子串中每一个字符的 ASCII 码求和,然后对求和值进行取模运算(sum%pa ...

  4. Shell 读取用户输入

    14.2  读取用户输入 14.2.1  变量 上一章我们谈到如何定义或取消变量,变量可被设置为当前shell的局部变量,或是环境变量.如果您的shell脚本不需要调用其他脚本,其中的变量通常设置为脚 ...

  5. 跨域的另一种解决方案CORS(CrossOrigin Resource Sharing)跨域资源共享

    在我们日常的项目开发时使用AJAX,传统的Ajax请求只能获取在同一个域名下面的资源,但是HTML5打破了这个限制,允许Ajax发起跨域的请求.浏览器是可以发起跨域请求的,比如你可以外链一个外域的图片 ...

  6. 【js Date】时间字符串、时间戳转换成今天,明天,本月等文字日期

    作为前端开发攻城师,难免对时间进行各种计算和格式转换,一个js的Date对象统统可以搞定.下例是将一个具体的时间转换成今天.明天.几天之内.本月等文字描述的日期的工具函数,也可以基于它扩展,多应用于网 ...

  7. MySQL使用和操作总结

    简介 MySQL是一种DBMS,即它是一种数据库软件.DBMS可分为两类:一类是基于共享文件系统的DBMS,另一类是基于客户机——服务器的DBMS.前者用于桌面用途,通常不用于高端或更关键应用. My ...

  8. 简单爬虫 -- 以爬取NASA AOD数据(TIFF文件)为例

    目录: 网站分析 爬取下载链接 爬取TIFF图片 1.网站分析 主页面:https://neo.sci.gsfc.nasa.gov/view.php?datasetId=MYDAL2_M_AER_OD ...

  9. Matlab绘图基础——绘制向量图,二维三维(绘制参数曲线图)

    ------------------------------------------- %绘制向量场图 %例一 clear all;clc; [X,Y] = meshgrid(-2:.2:2,-3:. ...

  10. 使用责任链模式消除if分支实践

    之前接手过一个车辆监控的工具,接受第三方推送过来的车辆状态数据然后入库.车辆状态一共有8种之多,每种状态都需要做不同 处理操作.刚接手这份代码时,针对此处处理,是庞大的if-else结构,if-els ...