摘要:一、窗口函数的作用 窗口函数是对一组值进行操作,不需要使用GROUP BY 子句对数据进行分组,还能够在同一行中同时返回基础行的列和聚合列。窗口函数,基础列和聚合列的查询都非常简单。二、语法格式 窗口函数的语法格式如下:OVER([PARTITION BY value_expression,.....
阅读全文
随笔分类 - SQLServer:基础
SQLServer数据库基础
摘要:一、窗口函数的作用 窗口函数是对一组值进行操作,不需要使用GROUP BY 子句对数据进行分组,还能够在同一行中同时返回基础行的列和聚合列。窗口函数,基础列和聚合列的查询都非常简单。二、语法格式 窗口函数的语法格式如下:OVER([PARTITION BY value_expression,.....
阅读全文
摘要:SQL Server从2005起开始支持xml类型,这个数据类型对于后期的改变非常有用。一对多的关系在后期变成了多对多的关系,XML类型就是一个不错的选择。 1、创建测试数据 创建表 --创建表,包含Xml类型列 CREATE TABLE Person ( Id int, Info xml ) 插入测试数据 --插入3条测试数据 INSERT Person VALUES(1,'1刘备') INSERT Person VALUES(2,'2关羽') INSERT Person VALUES(3,'3张飞') 2、查询节点内容 query()方法 .
阅读全文
摘要:一、使用SQL Server全文搜索配置 要使用SQL Server的全文搜索服务,需要进行如下配置。 1、开启全文搜索服务: 2、开启数据库的全文索引功能: 3、创建全文索引目录: 4、创建唯一索引: 5、创建全文索引: 二、使用全文搜索 CONTAINS搜索方式 1.简单词搜索 - 搜索一个或多
阅读全文
摘要:触发器可以做很多事情,但也会带来很多问题。使用它的技巧在于在适当的时候使用,而不要在不适当的时候使用它们。 触发器的一些常见用途如下:弹性参照完整性:实现很多DRI不能实现的操作(例如,跨数据库或服务器的参照完整性以及很多复杂的关系类型)。创建神级跟踪:这意味写出的记录不仅跟踪大多数当前的数据,还包括对每个记录进行实际修改的历史数据。随着SQL Server2008中的更改数据跟踪功能的出现,创建审计跟踪不再那么流行,但以前使用的就是触发器。执行与CHECK约束类似的功能,但是跨表,跨数据库甚至是跨服务器使用。用自己的语句代替用户的操作语句。一、触发器的概念 触发器是一种特殊类型的存储...
阅读全文
摘要:锁是一种防止在某对象执行动作的一个进程与已在该对象上执行的其他进行相冲突的机制。也就是说,如果有其他人在操作某个对象,那么你旧不能在该对象上进行操作。你能否执行操作取决于其他用户正在进行的操作。通过锁可以防止的问题 锁可以解决以下4种主要问题:脏读非重复性读取幻读丢失更新 1、脏读 如果一个事务读取的记录是另一个未完成事务的一部分,那么这时就发生了脏读。如果第一个事务正常完成,那么就有什么问题。但是,如果前一个事务回滚了呢,那将从数据库从未发生的事务中获取了信息。 2、非重复性读取 很容易将非重复性读取和脏读混淆。如果一个事务中两次读取记录,而另一个事务在这期间改变了数据,就会...
阅读全文
摘要:事务全部是关于原子性的。原子性的概念是指可以把一些事情当做一个单元来看待。从数据库的角度看,它是指应全部执行或全部都不执行的一条或多条语句的最小组合。 为了理解事务的概念,需要能够定义非常明确的边界。事务要有非常明确的开始和结束点。SQL Server中的每一条SELECT、INSERT、UPD...
阅读全文
摘要:一、表变量 表变量在SQL Server 2000中首次被引入。表变量的具体定义包括列定义,列名,数据类型和约束。而在表变量中可以使用的约束包括主键约束,唯一约束,NULL约束和CHECK约束(外键约束不能在表变量中使用)。定义表变量的语句是和正常使用Create Table定义表语句的子集。只是表变量通过DECLARE @local_variable语句进行定义。 表变量的特征:表变量拥有特定作用域(在当前批处理语句中,但不在任何当前批处理语句调用的存储过程和函数中),表变量在批处理结束后自动被清除。表变量较临时表产生更少的存储过程重编译。针对表变量的事务仅仅在更新数据时生效,所以锁和日..
阅读全文
摘要:SQL Server系统存储过程也是好几百个,算了,还是写几个常用的。 1、sp_help 查询表的信息 执行存储过程: sp_help Person 显示结果如下: 妈了个B,有了这张图,你还不懂怎么看一张表有那些信息,那哥以后都不学SQL Server了。另外,还有约束,存储过程,自定义函数等等信息,以后补充。 2、sp_helpdb 查看数据库信息 执行存储过程: sp_helpdb TestDataCenter 显示结果如下: 当然也可以不带参数,显示当前数据库连接下的所有数据库信息。 这张图几乎包含了数据库的所有信息了。有了这张图,想了解一个数据库的...
阅读全文
摘要:CAST和CONVERT都经常被使用。特别提取出来作为一篇文章,方便查找。 CAST、CONVERT都可以执行数据类型转换。在大部分情况下,两者执行同样的功能,不同的是CONVERT还提供一些特别的日期格式转换,而CAST没有这个功能。 既然CONVERT包括了CAST的所有功能,而且CONVERT还能进行日期转换,那么为什么需要使用CAST呢?实际上,这是为了ANSI/ISO兼容。CAST是ANSI兼容的,而CONVERT则不是。 语法: CAST (expression AS data_type [ (length ) ]) CONVERT (data_type [ ( le...
阅读全文
摘要:SQL Server系统视图非常的多,因此不可能一个一个地写,我最近一直在想,对于数据库的系统视图应该如何学,但是看了一下目录之后,我呆了,我觉得每个写一次,可能都要花费1个星期的时间,如果对每一个返回的列的作用都了解清楚,那不得了,你至少需要3个月的时间。后来我想了一个,不行,这种学习方法是错误的。我决定不再每一个系统视图都了解一次,我仅仅需要知道的是,通过系统视图能够做什么事情。 系统视图,存储的是关于整个数据库的东西。比如,一个数据库里面有哪些文件组,哪些表,哪些索引,哪些约束等等,都可以通过系统视图来获得。作用就是如此。 知道就可以了。但是也有一个问题,比如最近我想开发一个代码...
阅读全文
摘要:批处理简介 批处理是作为一个逻辑单元的T-SQL语句。如果一条语句不能通过语法分析,那么不会运行任何语句。如果一条语句在运行时失败,那么产生错误的语句之前的语句都已经运行了。 为了将一个脚本分为多个批处理,可使用GO语句。 GO语句的特点: GO语句必须自成一行,只有注释可以再同一行上。 它使得自脚本的开始部分或者最近一个GO语句以后的所有语句编译成一个执行计划并发送到服务器,与任何其他批处理无关。 GO语句不是T-SQL命令,而是由各种SQL Server命令实用程序(如:Management Studio中的"查询"窗口)识别的命令。 1、自成一行 GO命令应当自成一行
阅读全文
摘要:分区表简介 分区表是SQL Server2005新引入的概念,这个特性在逻辑上将一个表在物理上分为多个部分。(即它允许将一个表存储在不同的物理磁盘里)。在SQL Server2005之前,分区表实际上是分布式视图,也就是多个表做union操作。 分区表在逻辑上是一个表,而物理上是多个表。在用户的角度,分区表和普通表是一样的,用户角度感觉不出来。 而在SQL Server2005之前,由于没有分区的概念,所谓的分区仅仅是分布式视图: 对表分区的理由 表分区这个特性,只有SQL Server企业版或SQL Server开发版才有,理解表分区的概念之前,还得先理解SQL Se...
阅读全文
摘要:文件和文件组简介 在SQL Server中,数据库在硬盘上的存储方式和普通文件在Windows中的存储方式没有什么不同,仅仅是几个文件而已。SQL Server通过管理逻辑上的文件组的方式来管理文件。 SQL Server通过文件组对数据文件进行管理。我们看到的逻辑数据库由一个或者多个文件组构成。
阅读全文
摘要:SQL Server数据存储的形式 预读:用估计信息,去硬盘读取数据到缓存。预读100次,也就是估计将要从硬盘中读取了100页数据到缓存。 物理读:查询计划生成好以后,如果缓存缺少所需要的数据,让缓存再次去读硬盘。物理读10页,从硬盘中读取10页数据到缓存。 逻辑读:从缓存中取出所有数据。逻辑读100次,也就是从缓存里取到100页数据。 SQL Server存储的最小单位是页,每一页大小为8K,SQL Server对于页的读取是原子性的,要么读完一页,要么完全不读。即使是仅仅要获得一条数据,也要读完一页。而页之间的数据组织结构为B树结构。所以SQL Server对于逻辑读、预读、物理读...
阅读全文
摘要:视图实际上就是一个存储查询,重点是是可以混合和匹配来自基本表(或者其他视图)的数据,从而创建在很多方面像另一个基表那样起作用的对象。可以创建一个简单的查询,仅仅从一个表中选择几列,而忽略其他列;或者也可以创建一个复杂的查询,连接几个表,使的这些表看起来像一个表。一、简单的视图 视图的语法如下:...
阅读全文
摘要:SQL Server存储机制 1、区段 区段(extent)是用来为表和索引分配空间的基本存储单元。它由8个连续的64KB数据页组成。 基于区段(而不是实际使用空间)分配空间的概念的要点: 一旦区段已满,那么下一记录将要占据的空间不是记录的大小,而是整个新区段的大小。一次分配一个区段而不是分配一个记录。 通过预分配空间,SQL Server节省为每个记录分配新空间的时间。 向当前分配的区段添加了过多的行就要占用整个区段,看起来是一种浪费,但是这种方法浪费的空间不多。但是,这些浪费的空间会累加,特别是在碎片较多的环境中。 占据所有空间的好处是SQL Server省去了一些分配时间的...
阅读全文
摘要:一、约束的分类 在SQLServer中,有3种不同类型的约束。 1、实体约束 实体约束是关于行的,比如某一行出现的值就不允许出现在其他行,例如主键。 2、域约束 域约束是关于列的,对于所有行,某一列有那些约束,例如CHECK约束。 3、参照完整性约束 如果某列的值必须与其他列的值匹配,那就意味着需要一个参照完整性约束,例如外键。二、约束命名 在学习约束之前,首先来了解下为约束命名需要注意哪些地方。 SQLServer在我们不提供名称时,会自动创建名称,但是由系统自动创建的名称并不是特别有用。 例如,系统生成的主键名称可能是这样的:PK_Employees_145...
阅读全文
摘要:今天在公司碰到一个神奇的问题,浪费了我一个早上,在本地数据库连接服务器上的数据库,无论如何都不得。(备注:今天早上公司的路由坏了,老板在修。)其实,如果结合上这一点蛛丝马迹也就可以肯定是网络的问题了。在连接局域网服务器上的数据库的时候,SqlServer报错:在建立与服务器的连接时出错。在连接到 SQL Server 2005 时,在默认的设置下 SQL Server 不允许进行远程连接可能会导致此失败。 (provider: SQL 网络接口, error: 26 - 定位指定的服务器/实例时出错) 这是一个非常肯定的网络连接上的问题,只要从网络连接上去解决就OK了。其他配置不说了,...
阅读全文
|