sqlserver2014数据库应用技术

《清华大学出版社》

索引

这是一个很重要的概念,我们知道数据在计算机中其实是分页存储的,就像是单词存在字典中一样

数据库索引可以帮助我们快速定位数据在哪个存储页区,而不用扫描整个数据库

索引一旦被创建就会数据库自动管理和维护,增删改插座数据库都会对索引做修改

索引分类:

  • 聚集索引
  • 非聚集索引
  • 包含性列索引
  • 索引视图
  • 全文索引
  • xml索引

聚集索引,就是相当于排序的字典(将表中的数据完全重新排序),一个表只有一个,所占空间相当于表中数据的120%,数据建立聚集索引,会改变数据行的存储物理结构

非聚集索引,不改变数据行的物理存储结构,CREATE INDEX默认建立非聚集索引,理论一个表可以有249个非聚集索引

索引和约束

设置主键,会自动创建PRIMARY KEY 和创建一个聚集索引

创建UNIQUE 约束会自动创建一个唯一非聚集索引

创建表的索引

使用SQL语句

CREATE INDEX IX_name_mj
ON 买家表(买家名称)
GO

查看索引

EXEC sp_helpindex 买家表

分析索引

查看查询计划,使用的索引(优先使用聚集索引)

SET SHOWPLAN_ALL ON
GO
SELECT * FROM 买家表
GO SET SHOWPLAN_ALL OFF
GO

显示统计信息,查看所花费的磁盘io活动量

SET STATISTICS IO ON
GO
SELECT * FROM 买家表
GO SET STATISTICS IO OFF
GO

维护索引

数据表的增删改操作会产生大量索引碎片,索引表不连续,降低索引性能,需要整理索引

查看索引碎片SQL

DBCC SHOWCONTIG(买家表,PK_买家表)
GO

ssms查看索引

索引碎片整理

DBCC INDEXDEFRAG(销售管理,买家表,PK_买家表)

触发器

触发器是一个高级的数据约束,他是特殊的存储过程,不能通过执行sql触发,由增删改等事件自动触发

sqlserver2014提供3种触发器:

  • DML触发器,包括事后触发器,替代触发器,CLR运行时触发器
  • DDL触发器,修改表结构触发
  • LOGIN触发器,登录的时候触发

DML触发器

INSERT触发器

如果员工年龄不到18岁不执行插入操作

CREATE TRIGGER Employee_Insert
ON Employee
AFTER INSERT
AS
BEGIN
--从INSERTED表获取新插入员工的出生年月
DECLARE @birthday date
SELECT @birthday=birthday FROM inserted
--判断新员工年龄
IF(YEAR(GETDATE())-YEAR(@birthday)<18)
BEGIN
PRINT '该员工年龄不到18岁,不能入职!'
ROLLBACK TRANSACTION --回滚这个节点之前的所有操作,然后继续执行后面的语句
END
END

验证

INSERT Employee VALUES('小明','2012-10-10')

再验证

INSERT Employee VALUES('小明','1912-10-10')

注意主键id仍然会增长,即使刚刚的操作回滚了,id还是增加了1

UPDATE触发器

防止用户修改员工姓名name字段

CREATE TRIGGER Employee_Update
ON Employee
AFTER UPDATE
AS
BEGIN
IF(UPDATE(NAME))
BEGIN
PRINT '禁止修改员工姓名!'
ROLLBACK TRANSACTION --回滚这个节点之前的所有操作,然后继续执行后面的语句
END
END

验证

UPDATE Employee SET NAME='XX'

数据库的维护

备份

使用存储过程创建备份设备

EXEC sp_addumpdevice 'DISK','COMB','E"\DATA\COMB.BAK'

删除备份设备

EXEC sp_dropdevice 'COMB'

使用SQL创建数据库备份

BACKUP DATABASE 销售管理
TO COMB

使用SQL还原数据库

RESTORE DATABASE COMB
FROM DISK='E:/DATA/COMB.BAK'

SQL Serever学习16——索引,触发器,数据库维护的更多相关文章

  1. SQL Serever学习14——存储过程和触发器

    存储过程 在数据库中很多查询都是大同小异,编写他们费时费力,将他们保存起来,以后执行就很方便了,把SQL语句“封装”起来. 存储过程的概念 存储过程是一组SQL语句集,经过编译存储,可以”一次编译,多 ...

  2. SQL Serever学习9——基础查询语句

    SQL语言概述 SQL是结构化查询语言(Structure Query Language),1974年提出,1979年被IBM实现,SQL语言已经成为关系型数据库的标准语言. 包括: DDL数据定义语 ...

  3. sql语句学习及索引学习,未完待续,补充增删改查

    1,查询出last_name 为 'Chen' 的 manager 的信息.  select * fromwhere employee_id = ( selectfrom employees wher ...

  4. SQL Serever学习17——数据库的分析和设计

    数据库的分析和设计 设计数据库确定一个合适的数据模型,满足3个要求: 符合用户需求,包含用户所需的所有数据 能被数据库管理系统实现,如sqlserver,oracle,db2 具有比较高质量,容易理解 ...

  5. SQL Serever学习15——进阶

    特别说明:在sqlserver2014中,不区分大小写,也就是说,SQL是大小写不敏感的 数据库模型3类: 层次模型 网状模型 关系模型 关系型数据库语言3种: DDL数据定义语言 CREATE(创建 ...

  6. SQL Serever学习10——T-SQL语句

    在sqlserver2018中使用的是Transact-SQL语言,简称T-SQL. 数据库的创建和管理 数据定义语言DDL DDL功能包括数据库,表,索引,视图,存储过程 数据库:CREATE DA ...

  7. SQL Serever学习6——数据表

    数据表 表的构成 数据库中的基本表由记录(行)和字段(列)构成,SQLServer2008每个表可以有1024个列,每个列可以有8060字节(不包括iamge,ntext,text类型). 记录(Re ...

  8. SQL Serever学习13——数据库编程语言

    编程基础 注释 注释命名来对一些语句进行说明,便于日后维护或者其他用户理解,注释不会执行. 单行注释 SELECT GETDATE() --查询当前日期 多行注释 /* 注释有助于 理解操作的内容 查 ...

  9. SQL Serever学习12——数据库的备份和还原

    公司的服务器奔溃了,事先没相应的保护措施,使得公司遭到了较大损失,为了以后不再出现类似事件,在系统中引入备份机制,使得数据库被破坏后损失降到最低. 数据的导出和导入 数据转换服务 数据转换服务DTS( ...

随机推荐

  1. 重新打造的我的Pugo

    Pugo博客已经搭建了好几个月了吧,给我感受到非常方便的就是,我换了好多VPS,迁移显得非常的方便,但是也有不足的地方,比如发布一篇新的博客,我每次都需要重新进入后台进行新的Post,还需要重新bui ...

  2. 201621123023《Java程序设计》第10周学习总结

    一.本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容. 二.书面作业 本次PTA作业题集异常 1. 常用异常 结合题集题目7-1回答 1.1 自己以前编写的代码中经常出 ...

  3. python获取aliyun ECS实例

    #!/usr/bin/env python #-*- coding:utf-8 -*- # Description : get ecs from aliyun # Author : quke # Da ...

  4. 【Qt】VS2010编译Qt5.3.2 64bit

    1. 为什么要这么做 在Windows下,Qt官网默认提供的二进制版本大多是32位,目前(2015.01.24)只对VS2013提供了64位版本,如下图所示: 为了适应我目前安装的VS2010 IDE ...

  5. sql注入实例详解(二)

    前言 这篇文章就是一个最基本的SQl手工注入的过程了.基本上在sqlilabs上面的实验,如果知道了其中的全部知识点,都可以通过以下的步骤进行脱裤.下面的这个步骤也是其他的脱裤手段的基础.如果想要精通 ...

  6. python 对mongodb进行压力测试

    最近对mongoDB数据库进行性能分析,需要对数据库进行加压. 加压时,最初采用threading模块写了个多线程程序,测试的效果不理想. 单机读数据库每秒请求数只能达到1000次/s.而开发的jav ...

  7. iOS关于代码风格问题

    cocoapods管理第三方库,详见cocoapods安装及使用 OC代码风格需要规范,所有第三方依赖需要用cocoapods管理.代码风格需要: 1. pod 'CodeFormatter', :g ...

  8. Vue子组件监听事件中传递参数的方法

    在子组件中,我们可以通过以下方式监听事件: v-on:click="$emit('funcName',a)" 如果需要传多个参数,可以通过以下方式: v-on:click=&quo ...

  9. 3.2 Multi-Master Replication

    摘要: 出处:黑洞中的奇点 的博客 http://www.cnblogs.com/kelvin19840813/ 您的支持是对博主最大的鼓励,感谢您的认真阅读.本文版权归作者所有,欢迎转载,但请保留该 ...

  10. windows安装tesseract-OCR及使用

    tesseract是Python的一个OCR(光学字符识别)库 首先下载tesseract的exe安装文件   https://github.com/UB-Mannheim/tesseract/wik ...