博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
20190422 SQL SERVER 服务
阅读量:5153 次
发布时间:2019-06-13

本文共 4211 字,大约阅读时间需要 14 分钟。

-- 数据库服务
-- SQL Server(MSSQLSERVER)是必须要开启的,这个是数据库引擎服务,就像汽车的发动机一样
-- SQL Server代理(MSSQLSERVER)是代理服务,比如你有一些自动运行的,定时作业,或者是一些维护计划,比如定时备份数据库等操作,那么就要打开,否则,就不会备份数据库了
-- SQL Server Reporting Services (MSSQLSERVER)是报表服务,一般不用开启,除非你做了报表,通过这个组件来提供报表服务,才需要开启。
-- SQL Server Analysis Services (MSSQLSERVER)是分析服务,一般不用开启,除非你做多位分析,和数据挖掘,才需要开启
-- SQL Full-text Filter Daemon Launcher (MSSQLSERVER)是全文检索服务,如果你没有使用全文检索技术,那么也不需要开启。
-- SSIS 用于商业智能
-- SQL Server Browser Service 以 Windows 服务的形式运行,侦听对 Microsoft SQL Server 资源的传入请求,并提供计算机上安装的 SQL Server 实例的相关信息
-- 主要考虑的是一台服务器上面,多个实例的情况,一般一台服务器上面只有一个实力就不需要启动这个服务

-- 触发E器

-- 案例1 禁止用户插入新的记录
CREATE TRIGGER no_insert
ON xs
AFTER INSERT -- 在Insert只有才发生吗? 那么
AS
BEGIN
RAISERROR('XS表不允许插入新的记录',1,1); --返回信息,这是个INSERT 后放弃的过程
ROLLBACK TRANSACTION
END

SELECT * FROM inserted

SELECT *

FROM XS

INSERT INTO XS

VALUES('14311101','SOAR','女','1977-10-11','14信管','江西萍乡','18','');

DELETE XS

WHERE 姓名='SOAR';

DROP TRIGGER no_insert;

-- 案例2 DELETE 的触发器,作用是删除数据后给出提示
CREATE TRIGGER xs_del
ON XS
AFTER DELETE
AS
BEGIN
SELECT 学号 as '被删除的学生',姓名 FROM deleted
END

DELETE FROM XS WHERE 学号='14311101';

DROP TRIGGER xs_del;

-- UPDATE 触发器

CREATE TRIGGER xs_update

ON XS
AFTER UPDATE
AS
BEGIN
SELECT 姓名 AS '更改后',学号 FROM inserted; -- 这里可以看出更新的系统逻辑
SELECT 姓名 AS '更改前',学号 FROM deleted
END

UPDATE XS SET 姓名='SOAR'

WHERE 学号='14311002'

UPDATE XS SET 姓名='贺梅'

WHERE 学号='14311002'

DROP TRIGGER xs_update

-- INSEAD OF 触发器

-- 对比一下不让INSERT的过程

CREATE TRIGGER xs_instead

ON xs
INSTEAD OF INSERT
AS
BEGIN
DECLARE @st INT;
SELECT @st = (SELECT 总学分 FROM inserted)
IF @st >30
SELECT '总学分不符合要求' AS 失败原因
END

INSERT INTO XS(学号,姓名,总学分) VALUES('15001','张三','35');

SELECT * FROM XS WHERE 学号='15001';

-- 针对整个数据库的触发器
CREATE TRIGGER safty
ON DATABASE -- ALL SERVER 这个是要求对所有数据库生效的,我认为没事的话,不会有人去写这个的
FOR DROP_TABLE,ALTER_TABLE
AS
BEGIN
PRINT '当前数据库禁止更新删除操作'
ROLLBACK TRANSACTION
END

DROP TRIGGER safty;

DROP TABLE XS;

-- 创建一个登陆触发器 这个不好测试,因为是针对IP地址的验证

-- 创建一个触发器当登陆名为test 的时候,只允许在8:00 - 17:30 的时间登陆

CREATE TRIGGER time_limit

ON ALL SERVER WITH EXECUTE AS 'log_test'
FOR LOGON
AS
BEGIN
IF ORIGINAL_LOGIN()='log_test' AND CONVERT(CHAR(10),GETDATE(),108) BETWEEN '08:00:00' AND '10:30:00'
ROLLBACK;
END

SELECT CONVERT(CHAR(10),GETDATE(),108)

DROP TRIGGER time_limit;

-- 首先创建一个用户,命名为test

-- 针对不同级别的触发器,查看的地方不同,表级别、数据库级别、服务器级别

-- 注意一下权限的部分

-- 限制对保护数据的操作

CREATE TRIGGER update_limit ON XS
FOR update
AS
BEGIN
IF update(班级) and Exists(SELECT * FROM inserted WHERE 学号='14311002')
RAISERROR('学号为1431102学生的班级不能修改',16,1)
ROLLBACK TRANSACTION
END;

SELECT * FROM XS WHERE 学号='14311002'

update xs set 班级='19计科' WHERE 学号='14311002' ;

-- 触发器实现级联操作

-- 使用触发器对有关系的表进行级联操作,比如级联更新\级联删除

CREATE TRIGGER trigdelete

ON xs
AFTER DELETE
AS
BEGIN
DELETE XK WHERE 学号=(SELECT 学号 FROM deleted)
END

-- 所谓的更新就是插入和删除的概念

SELECT * FROM XS
INNER JOIN XK
ON XS.学号=XK.学号

SELECT * FROM XK

DELETE FROM XS WHERE 学号='14311001' ; -- 这里可以实践一下DELETE的动作

-- 修改触发器

-- 使用系统存储过程查看触发器

SP_HELPTEXT UPDATE_LIMIT;

 

EXEC sp_rename update_limit,update_test; -- OK

-- 禁止触发器的两种写法

ALTER TABLE XS

DISABLE TRIGGER update_test; --会有一个打叉的情况

DISABLE TRIGGER update_test ON xs;

-- 启用触发器

ALTER TABLE xs

ENABLE TRIGGER no_insert;

-- 这种触发器常用于记录删除数据,但是呢,要针对指定的列进行删除,否则不能记录

-- 索引

-- 索引会占据空间, 对数据的增删和修改,都会影响到索引的空间

-- 如何查看索引的空间情况

-- 索引包括聚集索引,非聚集索引,全文索引,XML索引和空间索引5种主要类型

-- 聚集索引,非聚集索引 ,

-- 聚集索引,每张表只能有一个,而非聚集索引可以有多个

-- 创建索引的几种方式

CREATE Clustered Index IX_XS_name

ON XS(姓名) -- 会报错

CREATE Unique nonClustered Index IX_XS_number

ON XS(学号)
With IGNORE_DUP_KEY

-- 查看索引

EXEC sp_helpindex XS

-- 重建索引 ALL 表示所有索引重建

Alter Index ALL ON XS Rebuild

--

Alter Index IX_XS_number ON XS Rebuild

Drop Index XS.IX_XS_number

-- 索引预留空间

CREATE UNIQUE NONCLUSTERED INDEX IX_XS_number
ON XS(学号)
WITH (PAD_INDEX=ON,FILLFACTOR=10)

-- 索引的分析
-- SHOWPLAN_ALL 语句

USE xsxk

GO
SET SHOWPLAN_ALL ON
GO
SELECT 学号,姓名,性别,出生日期
FROM XS WHERE 出生日期>='1995-10-1'
AND 出生日期 <='1995-10-30'
GO
SET SHOWPLAN_ALL OFF

USE xsxk
GO
SET STATISTICS IO ON
GO
SELECT 学号,姓名,性别,出生日期
FROM XS WHERE 出生日期>='1995-10-1'
AND 出生日期 <='1995-10-30'
GO
SET STATISTICS IO OFF

-- 获取索引中的平均碎片

USE xsxk

GO
SELECT avg_fragmentation_in_percent
FROM sys.dm_db_index_physical_stats(DB_ID(),OBJECT_ID('XS'),NULL,NULL,NULL)

-- 全文索引
-- 全文索引的意义在哪里?

 

转载于:https://www.cnblogs.com/Soar-Pang/p/10748766.html

你可能感兴趣的文章
Java网络编程--socket服务器端与客户端讲解
查看>>
List_统计输入数值的各种值
查看>>
学习笔记-KMP算法
查看>>
Timer-triggered memory-to-memory DMA transfer demonstrator
查看>>
跨域问题整理
查看>>
[Linux]文件浏览
查看>>
64位主机64位oracle下装32位客户端ODAC(NFPACS版)
查看>>
获取国内随机IP的函数
查看>>
今天第一次写博客
查看>>
江城子·己亥年戊辰月丁丑日话凄凉
查看>>
IP V4 和 IP V6 初识
查看>>
Spring Mvc模式下Jquery Ajax 与后台交互操作
查看>>
(转)matlab练习程序(HOG方向梯度直方图)
查看>>
『Raid 平面最近点对』
查看>>
【ADO.NET基础-数据加密】第一篇(加密解密篇)
查看>>
C语言基础小结(一)
查看>>
STL中的优先级队列priority_queue
查看>>
UE4 使用UGM制作血条
查看>>
浏览器对属性兼容性支持力度查询网址
查看>>
OO学习总结与体会
查看>>