视图:
对于一个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. Unity3D脚本的生命周期(执行顺序)

    Unity脚本中有许多固定的函数 例如Start();Update(); 而这些函数都有固定的执行顺序 搞清楚这些函数的执行顺序 对于我们理清代码的逻辑就显得尤为重要 举个简单的例子 //脚本A pu ...

  2. oracle sql model从句demo

    model从句作用 sql model可以完成像EXCEL工作表的数据内容扩展.计算填充的功能 关键词解释 partition 分区关键词,白话就是分组 dimension 度量关键词,白话就是要取出 ...

  3. WebGL 3D 电信机架实战之数据绑定

    前言 在前端中,视图层和数据层需要进行单向或者双向数据绑定,大家都已经不陌生了,有时候 2D 做的比较顺了之后,就会想要挑战一下 3D,不然总觉得痒痒的.这个 3D 机架的 Demo 我觉得非常有代表 ...

  4. 1-4 criteria用法大全

    Criteria的完整用法 QBE (Query By Example) Criteria cri = session.createCriteria(Student.class); cri.add(E ...

  5. 手把手的SpringBoot教程,SpringBoot创建web项目(五)

    这一节,我们来演示如何在SpringBoot项目中连接数据库,并且自动创建一张表. 按照惯例,数据库我们依然使用mysql,至于什么是jpa呢? jpa是sun推出的持久化规范(java persis ...

  6. Mycat 配置说明(schema.xml )

    Schema.xml 作为 MyCat中重要的配置文件之一,管理着 MyCat的逻辑库.表.分片规则.DataNode以 及DataSource.弄懂这些配置,是正确使用MyCat的前提. schem ...

  7. freeMark的入门教程

    1.FreeMarker支持如下转义字符: \";双引号(u0022) \';单引号(u0027) \\;反斜杠(u005C) \n;换行(u000A) \r;回车(u000D) \t;Ta ...

  8. day1-计算机基础

    第一单元  计算机组成原理 一.概念及过程 1.进行逻辑和数值高速计算的计算机器,有存储功能,能按照程序自动执行,且能够处理海量数据的现代化电子设备. 2.发展过程 数学运算:算盘,帕斯卡的齿轮装置, ...

  9. Redis主从集群的Sentinel配置

    http://www.cnblogs.com/LiZhiW/p/4851631.html

  10. JS实现键盘监听

    不说废话直接上正文: <html> <head> <meta http-equiv="Content-Type" content="text ...