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. python网络编程--进程(方法和通信),锁, 队列,生产者消费者模型

    1.进程 正在进行的一个过程或者说一个任务.负责执行任务的是cpu 进程(Process: 是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础.在 ...

  2. java学习笔记—ServletConfig、ServletContext接口(13)

    ServletConfig是一个由Tomcat服务器在初始化Servlet的时候创建并传递进来的一个对象. 该对象主要描述的时候一个servlet的配置信息. 如: <servlet>  ...

  3. [JS] 屏蔽右键

    if (window.Event) document.captureEvents(Event.MOUSEUP); function nocontextmenu() { event.cancelBubb ...

  4. TCP 和 UDP 协议

    TCP 和 UDP 协议 一.socket层 Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口.在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐 ...

  5. RN 中 Native 模块的注入过程

    找到所有的模块 一般来说,只要在模块中声明 RCT_EXPORT_MODULE 即可.这是个宏,展开后是声明了一个函数,定义了两个函数,如下所示. #define RCT_EXPORT_MODULE( ...

  6. SHELL脚本扩展

    使用SED命令 sed称为流编辑器,命令格式如下: sed option script file -e script #指定多个命令 -f script_file #指定命令文件 -n #不需要为每个 ...

  7. 查看 page页面某一个属性在 web ui 中的位置。

    1:例如查询 description 属性在web ui 中的位置. 2:进入订单编辑状态,鼠标放到该字段上,按F2 3:出现该字段的详细信息,包括:component,contextNode 4: ...

  8. Java将\替换成/

    public static void main(String[] args) { String str="upload\\media\\201904\\i4Qjz8E40xGQovUq-2C ...

  9. java内存的分配策略

    1.概述 本文是<深入理解java虚拟机>(周志明著)3.6节的笔记整理,文章结构也与书上相同,讲述的是几条最普遍的内存分配策略. 2.对象优先在Eden分配 ** 大多数情况下,对象在新 ...

  10. 厉害了,七牛云 CEO 来讲架构了!

    说起许式伟,你应该不陌生,他是七牛云的CEO,ECUG 社区发起人,国内 Go 语言圈的领军人物,曾就职于金山.盛大,有超过 10 年的搜索和分布式存储相关技术的研发经验. 他的个人经历颇为传奇,大学 ...