SQL Serever学习16——索引,触发器,数据库维护
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——索引,触发器,数据库维护的更多相关文章
- SQL Serever学习14——存储过程和触发器
存储过程 在数据库中很多查询都是大同小异,编写他们费时费力,将他们保存起来,以后执行就很方便了,把SQL语句“封装”起来. 存储过程的概念 存储过程是一组SQL语句集,经过编译存储,可以”一次编译,多 ...
- SQL Serever学习9——基础查询语句
SQL语言概述 SQL是结构化查询语言(Structure Query Language),1974年提出,1979年被IBM实现,SQL语言已经成为关系型数据库的标准语言. 包括: DDL数据定义语 ...
- sql语句学习及索引学习,未完待续,补充增删改查
1,查询出last_name 为 'Chen' 的 manager 的信息. select * fromwhere employee_id = ( selectfrom employees wher ...
- SQL Serever学习17——数据库的分析和设计
数据库的分析和设计 设计数据库确定一个合适的数据模型,满足3个要求: 符合用户需求,包含用户所需的所有数据 能被数据库管理系统实现,如sqlserver,oracle,db2 具有比较高质量,容易理解 ...
- SQL Serever学习15——进阶
特别说明:在sqlserver2014中,不区分大小写,也就是说,SQL是大小写不敏感的 数据库模型3类: 层次模型 网状模型 关系模型 关系型数据库语言3种: DDL数据定义语言 CREATE(创建 ...
- SQL Serever学习10——T-SQL语句
在sqlserver2018中使用的是Transact-SQL语言,简称T-SQL. 数据库的创建和管理 数据定义语言DDL DDL功能包括数据库,表,索引,视图,存储过程 数据库:CREATE DA ...
- SQL Serever学习6——数据表
数据表 表的构成 数据库中的基本表由记录(行)和字段(列)构成,SQLServer2008每个表可以有1024个列,每个列可以有8060字节(不包括iamge,ntext,text类型). 记录(Re ...
- SQL Serever学习13——数据库编程语言
编程基础 注释 注释命名来对一些语句进行说明,便于日后维护或者其他用户理解,注释不会执行. 单行注释 SELECT GETDATE() --查询当前日期 多行注释 /* 注释有助于 理解操作的内容 查 ...
- SQL Serever学习12——数据库的备份和还原
公司的服务器奔溃了,事先没相应的保护措施,使得公司遭到了较大损失,为了以后不再出现类似事件,在系统中引入备份机制,使得数据库被破坏后损失降到最低. 数据的导出和导入 数据转换服务 数据转换服务DTS( ...
随机推荐
- Kafka与.net core(一)安装
1.安装JDK 目前官网不能直接下载,在网上找到1.8.0版本安装包下载到本地. 1.1.下载jdk并解压 [root@iz2zei2y693gtrgwlibzlwz java]# ls jdk1.. ...
- .net程序员书单
C# 基础 <CLR via C#> <c# 高级编程> 框架学习 <WPF编程宝典 > (英文名:<Pro WPF 4.5 in C#. Windows P ...
- JAVA实现长连接(含心跳检测)Demo
实现原理: 长连接的维持,是要客户端程序,定时向服务端程序,发送一个维持连接包的. 如果,长时间未发送维持连接包,服务端程序将断开连接. 客户端: Client通过持有Sock ...
- OpenResty 最佳实践 (1)
此文已由作者汤晓静授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. OpenResty 发展起源 OpenResty(也称为 ngx_openresty)是一个全功能的 Web ...
- 前端基础--css基本语法,选择器
一.css概述 CSS(Cascading Style Sheet)层叠样式表,定义如何显示HTML元素,给HTML设置样式,让它更加美观.当浏览器读到一个样式表,它就会按照这个样式表来对文档进行格式 ...
- Java50道经典习题-程序12 计算奖金
题目:企业发放的奖金根据利润提成.利润(I)低于或等于10万元时,奖金可提10%: 利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可提成7.5%: ...
- thinkphp3搜索结果分页
公司的办公室搬到武昌,办公室水不好喝 还是乐百氏 娃哈哈的水我们oa用的tp3的一套oa,现在boss要求按状态 和类型(2个维度)来搜索案子 数量多,用 分页注意到初始的表单 input的name ...
- [ActionScript 3.0] 模拟win7彩色气泡屏保效果
主文件: package { import com.views.BubbleView; import com.views.ColorfulBubble; import flash.display.Sp ...
- Python之scrapy框架之post传输数据错误:TypeError: to_bytes must receive a unicode, str or bytes object, got int
错误名:TypeError: to_bytes must receive a unicode, str or bytes object, got int 错误翻译:类型错误:to_bytes必须接收u ...
- C++基础知识-派生类、调用顺序、访问等级、函数遮蔽
一.派生类的概念 类之间有一种层次关系,有父亲类,有孩子类. 车这个类,当成父类(也叫基类.超类),派生出卡车.轿车,他们属于孩子类(子类.派生类) 继承:有父亲类,有孩子类,构成了层次关系.继承这种 ...