优化MySchool数据库(事务、视图、索引)
事务、视图、索引:
事务:当生活逻辑中的“一个步骤”,需要使用多条SQL去完成时,必须使用事务来确保其“完整性“。
视图:简化数据库结构,方便你编写SQL语句(简化SQL语句的编写)
索引:提高“数据检索效率”
事务:
---- 用于保证多条SQL语句的同步执行(要么一起全部执行成功,要么全部都回滚不执行)
---- 语法:
Begin Transaction (开始事务)
{ 多条SQL语句 }
commit Transaction (提示事务)
rollback Transaction (回滚事务)
---- 实际编码:
declare @errorSum int
set @errorSum = 0
Begin Transaction
insert into .......(SQL语句)
set @errorSum = @errorSum + @@ERROR
insert into .......(SQL语句)
set @errorSum = @errorSum + @@ERROR
......
if @errorSum = 0
commit transaction
else
rollback transaction
事务特点:
------ 原子性、一致性、隔离性、持久性
原子性:整个事务,无论其中包含多少SQL语句,都是一个整体!要么都提交,要么都回滚;
一致性:事务执行前后,整个数据库都满足各种约束条件
隔离性:多个事务操作同一数据对象,彼此的“执行过程”和“效果”相互隔离,互不影响。
持久性:虽然事务执行过程中,对数据库的影响具有不确定性(提交、回滚),但是一旦事务结束(commit、rollback),对数据库照成的影响将是持久存在的。
事务分类:
------ 显式事务、隐式事务、自动提交事务
显式事务:以Begin Transaction开始,rollback \commit 结束的事务
隐式事务:以“开关”(ON)方式打开事务,当事务结束后,自动开始新事务,直到“开关”关闭(OFF)
自动提交事务:SQL SERVER 的默认事务方式,每句SQL都是独立的事务
视图:
---- 当我们进行数据库设计时,为了减少数据的冗余,常常会将生活中本身关联在一起的数据,拆分到不同的表单中!这样,导致在访问数据时,SQL代码复杂,效率也低下(多表联查)。可以将“多表联查”的SQL语句预先存放在数据库中,从减少每次使用时,都重新编写的麻烦!
----- 视图:就是保存在数据库中的“一条”“select语句”。视图的使用与“Table”相似,但table中直接存放着数据,但是view中没有存放数据,数据依然存放在其对应的基础表中。
----- 视图中Select语句,编写时的注意事项:
- order by (除非含有Top)
- into
- 表变量(临时表)
------ 视图的应用场景:
- 简化后台数据库的结构,方便编写数据访问代码简化sql(将多个物理数据库当做一个逻辑数据库)
- 保护“敏感数据”,防止非法访问!(通过其Select对行、列进行过滤)
索引:
------- 将数据表中的某列进行排序,让其以后对该列的查询能够在“排序后”的结果上进行,从而提高数据检索的效率(排序的过程可以在新的索引表中进行【非聚集索引】,也可以在原有的表单中进行【聚集索引】)
-------- 创建语法:
if exists(select * from sysindexes where name = '索引名')
drop index 表名.索引名
go
create index 索引名 on 表名(列名)
go
索引分类:
- 唯一索引---- 索引表中所有的索引项,不允许重复
- 主键索引---- 依据表单的主键列,创建索引表
- 非聚集索引 ----- 将表单中的“搜索列”,复制到索引表并排序。(数据表与索引表各自单独存在)
- 聚集索引 ---- 在原始的物理表单上,直接对“搜索列”进行排序。(数据表与索引表合二为一)
注意:
1、一个表单只能创建一个“聚集索引”,但可以创建多个“非聚集索引”
2、表单在创建主键时,将自动在表单上创建一个“主键索引”及“聚集索引”
索引的利弊:
利:提高数据检索效率
弊:增加了系统的数据存储开销、数据更改时效率降低
索引的应用场景:
适用:频繁搜索(where),频繁被查询(select) ,排序,关联查询的列(主外键列)
不适用:行少、列数据变化少
小贴士:
|
系统表名 |
所在数据库 |
存放的系统信息 |
|
sysDataBases |
master |
数据库信息 |
|
sysObjects |
用户数据库 |
表、视图、存储过程 |
|
sysIndexes |
用户数据库 |
索引 |
select ....
into 新表名
from ....
----- 作用,将查询结果,保存到一个【新建的数据表单】中。
优化MySchool数据库(事务、视图、索引)的更多相关文章
- 优化MySchool数据库设计之【巅峰对决】
优化MySchool数据库设计 之独孤九剑 船舶停靠在港湾是很安全的,但这不是造船的目的 By:北大青鸟五道口原玉明老师 1.学习方法: 01.找一本好书 初始阶段不适合,可以放到第二个阶段,看到知识 ...
- 第五章 MySQL事务,视图,索引,备份和恢复
第五章 MySQL事务,视图,索引,备份和恢复 一.事务 1.什么是事务 事务是一种机制,一个操作序列,它包含了一组数据库操作命令,并且把所有的命令作为一个整体一起向系统提交或撤销操作请求.要么都执行 ...
- 优化MySchool数据库(一)
<优化MyShcool数据库>:能够的独立的分析|设计|创建|运营|你的独立的数据库系统 设计--->实现--->TSQL--->查询优化---->性能优化技术-- ...
- accp7.0优化MySchool数据库设计内测笔试题总结
1) 在SQL Server 中,为数据库表建立索引能够(C ). 索引:是SQL SERVER编排数据的内部方法,是检索表中数据的直接通道 建立索引的作用:大大提高了数据库的检索速度,改善数据库性能 ...
- 优化MySchool数据库(二)
优化School数据库(TSQL建库建表建约束) 使用T_sql代码建库.建表.建约束: 建库: Create database HotelManagerSystem on ( ---- 数据文件-- ...
- 关于MySQL 事务,视图,索引,数据库备份,恢复
/*创建数据库*/ CREATE DATABASE `mybank`;/*创建表*/USE mybank;CREATE TABLE `bank`( `customerName` CHAR(1 ...
- Sql Server数据库之事务,视图,索引
一.事务的定义 事务是一种机制,包含一组操作指令,并将所有的命令作为一个整体一起向系统提交或撤销操作请求(要么都执行,要么都不执行) 二.事务的分类 显式事务:用Begin TRANSCATION开始 ...
- 优化MySchool数据库设计总结
数据库的设计 一:什么是数据库设计? 数据库设计就是将数据库中的数据实体以及这些数据实体之间的关系,进行规范和结构化的过程. 二:为什么要实施数据库设计? 1:良好的数据库设计可以有效的解决数据冗 ...
- 优化MySchool数据库设计
第一章 数据库的设计 1.E-R图中: 矩形:实体 椭圆:属性 菱形:关系 直线:连接实体,属性和关系 2.映射基数 一对多 多对一 多对多 3.范式: 第一范式:确保每列的原子性 第二范式:确保表中 ...
随机推荐
- APP数据接口开发的一些经验
刚接到这样的任务时,没有感觉到任何压力,不就是给移动端应用提供数据吗?那边发来参数,这边处理数据,返回JSON.做网站开发时经常使用ajax请求后台数据,不就是这么回事吗.于是,在确认完需求后就开始干 ...
- Httpd运维日志:通过apxs添加模块
Brief 在部署Httpd时为方便管理和安全等原因,我们仅会安装所需的模块,那么后期功能扩展时则需要通过Httpd内置提供的apxs程序来进行模块添加. 而apxs程序则位于apache/bin目录 ...
- Java魔法堂:内部类详解
一.前言 对于内部类平时编码时使用的场景不多,比较常用的地方应该就是绑定事件处理程序的时候了(从C#.JS转向Java阵营的孩子总不不习惯用匿名内部类来做事件订阅:().本文将结合Bytecode对四 ...
- 跟着官网的例子学Reacjs (一)FilterableProductTable
最近开始学习React,发现最好的方法不是看这个书那个书,而是直接上官网,一步步的跟着学习,真的获益匪浅.许多翻译的书上漏掉的知识点都可以学到. 入门的一些准备工作可以参照官网的步骤,引入依赖的核心包 ...
- 相同版本的CDH集群间迁移hdfs以及hbase
前言 由于项目数据安全的需要,这段时间看了下hadoop的distcp的命令使用,不断的纠结的问度娘,度娘告诉我的结果也让我很纠结,都是抄来抄去, 还好在牺牲大量的时间的基础上还终于搞出来了,顺便写这 ...
- C语言学习018:strdup复制字符串数组
在C语言学习005:不能修改的字符串中我们知道字符串是存储在常量区域的,将它赋值给数组实际是将常量区的字符串副本拷贝到栈内存中,如果将这个数组赋值给指针,我们可以改变数组中的元素,就像下面那样 int ...
- C# ~ NUnit单元测试
单元测试 单元测试(Unit Test)的一个测试用例(Test Case)是一小段代码,用于测试一个小的程序功能的行为是否正常,保证开发的功能子项能正确完成并实现其基本功能.一个单元测试是用于判断某 ...
- 为什么很多APP要有启动页面
我们启动APP时,一般都会是一张含有LOGO的图片.这张图片叫做启动页面. 这个启动页面是必须.一定需要的吗?有什么作用? 这是苹果官方对于iOS启动页的设计说明: 为了增强应用程序启动时的用 ...
- MySQL中select * for update锁表的范围
MySQL中select * for update锁表的问题 由于InnoDB预设是Row-Level Lock,所以只有「明确」的指定主键,MySQL才会执行Row lock (只锁住被选取的资料例 ...
- [修正] Berlin 10.1 支持 iPhone 4 (iOS v7.x)
原本在 Seattle 版本时,还能支持 iPhone 3GS (iOS v6.x), iPhone 4 (iOS v7.x),到了 Berlin 已不支持了,在用户的抱怨下,只好自己尝试去修正它,经 ...