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‘

原文地址:https://www.cnblogs.com/1906859953Lucas/p/9563307.html

时间: 2024-11-08 18:10:40

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

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

1,查询出last_name 为 'Chen' 的 manager 的信息. select * fromwhere employee_id = ( selectfrom employees where'Chen') 2,查询每个月倒数第2 天入职的员工的信息 select last_name, hire_date where hire_date = last_day(hire_date) – 1 3,查询平均工资高于 8000 的部门 id 和它的平均工资. SELECT department_

SQL Serever学习6——数据表

数据表 表的构成 数据库中的基本表由记录(行)和字段(列)构成,SQLServer2008每个表可以有1024个列,每个列可以有8060字节(不包括iamge,ntext,text类型). 记录(Record):表中的行,保存某一个相关属性的一组数据. 字段(Field):表中的列,保存某些事物的某一个属性值. 表的分类 系统表,保存系统信息,只有管理员有权使用 临时表,数据库运行中创建的临时存储数据的表,断开连接被删除 分区表,数据量很大时,可以将其中数据分成多个部分,分别放在数据库的多个文件

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

在sqlserver2018中使用的是Transact-SQL语言,简称T-SQL. 数据库的创建和管理 数据定义语言DDL DDL功能包括数据库,表,索引,视图,存储过程 数据库:CREATE DATABASE , DROP DATABASE 表:CREATE TABLE , DROP TABLE  , ALTER TABLE 索引:CREATE INDEX , DROP INDEX 视图:CREATE VIEW , DROP VIEW 数据库创建 创建数据库包括:数据库名,文件位置,大小,事

SQL Serever学习15——进阶

特别说明:在sqlserver2014中,不区分大小写,也就是说,SQL是大小写不敏感的 数据库模型3类: 层次模型 网状模型 关系模型 关系型数据库语言3种: DDL数据定义语言 CREATE(创建书库或数据库对象) , ALTER, DROP DML数据操作语言 SELECT(检索表或视图) , UPDATE ,  INSERT , DELETE DCL数据控制语言 GRANT(授予权限) , REVOKE(撤销权限) , DENY(拒绝权限,并禁止从其他角色继承许可权限) 系统数据库4个:

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

数据库的分析和设计 设计数据库确定一个合适的数据模型,满足3个要求: 符合用户需求,包含用户所需的所有数据 能被数据库管理系统实现,如sqlserver,oracle,db2 具有比较高质量,容易理解,使用方便,便于维护,效率高 设计步骤分为6步: 需求分析,与用户沟通,达成统一意见 概念结构设计,创建E-R图 逻辑结构设计,从E-R图转为关系模型,1对多,多对多,建立数据模型,数据库三范式 物理结构设计,确定数据类型,是否可空,确定主键,外键,索引 数据库实施 数据库运行维护 数据库的三范式:

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

编程基础 注释 注释命名来对一些语句进行说明,便于日后维护或者其他用户理解,注释不会执行. 单行注释 SELECT GETDATE() --查询当前日期 多行注释 /* 注释有助于 理解操作的内容 查询当前日期 */ SELECT GETDATE() 变量 在T-SQL执行命令时,可以申明变量临时存储各种数据,申明时被初始化为NULL,只能代替数值,不能代替对象或关键字 局部变量 必须先用DECLARE 语句定义,局部变量在名称前加@ SELECT 赋值语句哟啊保证结果不超过一条数据,否则将会把

SQL Serever学习5——数据库配置

数据库的主要属性 限制访问 用来设置数据允许用户访问的状态,或者说允许多少客户访问,有3个选项: MULTI_USER(多个),大多数数据库正常状态,允许多个用户同时访问该数据库. SINGLE_USER(单个),通常由于维护数据库时,一次只允许一个用户访问,杜绝了其他用户访问正在维修的数据库,减少数据丢失以及错误. RESTRICED_USER(限制),一种特殊状态,一些特殊功能的数据库才会选用,只有特殊身份用户才能访问数据库,这些特殊用户包括:db_owner(数据库拥有者),dbcreat

Oracle 学习笔记 19 -- 触发器和包浅析(PL/SQL)

触发器是存放在数据库中的一种特殊类型的子程序.不能被用户直接调用,而是当特定事件或操作发生时由系统自己主动 调用执行.触发器不能接受參数.所以执行触发器就叫做触发或点火.Oracle事件指的是数据库的表进行的insert .update.delete操作或对视图进行类似的操作. 触发器是很多关系数据库系统都提供的一项技术.在Oracle系统里,触发器类似过程和函数,都有声明,运行和异常 处理过程的PL/SQL块. 触发器的组成: 触发事件:在何种情况下触发:比如:INSERT , UPDATE

Oracle之PL/SQL学习笔记之触发器

Oracle之PL/SQL学习笔记之触发器 触发器是许多关系数据库系统都提供的一项技术.在ORACLE系统里,触发器类似过程和函数,都有声明,执行和异常处理过程的PL/SQL块. 触发器在数据库里以独立的对象存储,它与存储过程和函数不同的是,存储过程与函数需要用户显示调用才执行,而触发器是由一个事件来启动运行. 即触发器是当某个事件发生时自动地隐式运行.并且,触发器不能接收参数.所以运行触发器就叫触发或点火(firing).ORACLE事件指的是对数据库的表进行的INSERT. UPDATE及D