MSSQL的全称是Microsoft SQL Server,Microsoft的意思是微软,SQL Server是一种关系数据库,两者结合后意思是:微软公司的关系数据库产品,一般简称“MS-SQL”或“SQL Server”。它是一个数据库平台,提供数据库的从服务器到终端的完整的解决方案,其中数据库服务器部分,是一个数据库管理系统数据库管理系统,用于建立、使用和维护数据库。
SQL Server是一个可扩展的、高性能的、为分布式客户机/服务器计算所设计的数据库管理系统,实现了与WindowsNT的有机结合,提供了基于事务的企业级信息管理系统方案。
SQL Server采用单进程、多线程多系统结构、客户端/服务器体系结构,并且支持分布式数据库结构。
SQL Server 采用单进程、多线程结构,由执行 核心即线程来分配多用户对数据库的存取,这样减少了多进程方式对数据库存取时的协调时间,提高 了执行效率。由于是单进程,它就不需要进程之间 的通信机制。线程的操作由数据库引擎来指定,在 执行时把这些指令发送给操作系统。
SQL Server 是客户端/服务器系统设计的,需要用户频繁干预的任务,如输入、显 示数据等,由客户端完成;而对于数据库的存取和控制任务,则由服务器完成。当用户需要 读取数据库中的数据时,就会通过网络向服务器提出申请,服务器对客户端的数据库请求做 出相应的处理,然后仅将结果传给客户端,这样就大大减少了网络流量。
在 SQL Server 中,有一个包含 1024 个工作线程的线程池,用以响应用户的连接请求。SQL Server 为不同的用途准备了不同的线程池,包括磁盘备份管理、用户连接等。
一个网络中可以有多个 SQL Server,用户可以将数据分别存放在各个 SQL Server 上,成 为分布式数据库结构。客户端可以分别或同时向多个 SQL Server 存取数据,这样可以降低单 个 SQL Server 的处理负担,提高系统的执行效率。
SQL Server 是按客户端/服务器体系结构设计的,客户端可以通过 ODBC 与 SQL Server 连接。
在 SQL Server 中,我们可使用查询分析器(Query Analyzer)来执行 SQL Server 支持的 任何 SQL 语句。查询分析器具有图形用户界面(GUI),可用来提出交互式的查询,并向 SQL Server 发送 SQL 命令。
Transact-SQL是一套定义完善的语言,开发人员可以通过这种语言来进行应用程序和数据库服务器之间的通信,并能够对数据库服务器进行编程处理,Transact-SQL是ANSI-SQL的一个超集,利用Transact-SQL,我们可以使服务器执行一些定制的事物逻辑处理。
Transact-SQL由多种应用程序生成,包括以下几种:
通用办公生产应用程序。
使用图形用户界面(GUI)的应用程序,使用户得以选择包含要查看数据的表和列。
使用通用语言语句,确定用户所要查看数据的应用程序。
将其数据存储与SQL Server数据库中的商用应用程序。这些应用程序既可以使来自其他厂商的应用程序,也可以使内部编写的应用程序。
由开发系统,如Visual C++ 、Visual Basic或Visual J++等,使用数据库应用程序接口(API),如ADO、OLE DB以及ODBC等,创建的应用程序。
Transact-SQL的分类:
数据定义语言(DDL,Data Definition Language)
数据操纵语言(DML,Data Manipulation Language)
数据控制语言(DCL,Data Control Language)
系统存储过程(System Stored Procedure)
一些附加的语言元素(注释、变量、运算符、函数、流程控制语句)
在SQL中,表有如下规定:
每张表都有一个名字,通常称为表名或关系名。表名必须以字母开头,最大长度为 30 个字符。
一张表可以由若干列组成。同一张表中,列名唯一,列名也称为属性名或字段。
同一列的数据必须有相同的数据类型。
表中的每一列值必须是不可分割的基本数据项。
表中的一行称为一个元组,相当于一条记录。
SQL支持以下3种类型的表:
永久表
全局临时表
局部临时表
在 SQL Server 中,不能采用 CREATE TYPE 语句定义用户的数据类型,可以采用其提供的企业管理器 (Enterprise Manager)创建一个用户定义的数据类型,创建步骤:
启动企业管理器(Enterprise Manager),找到要操作的数据库。
右击该数据库名,打开快捷菜单,选择“新建”→“用户定义的数据类型”命令。
在弹出的用户定义的数据类型对话框中,在“名称”区域键入数据类型的名称。
在“数据类型”下拉列表中选择一个数据类型。
在“长度”区域键入数据长度,如果想要对用户定义的数据类型的列允许 NULL 值,则选中“允许 NULL 值”复选框。
单击“确定”按钮即可实现数据类型的定义。
创建数据库中的表,表由行和列组成,每个表都必须有个表名:CREATE TABLE
注:创建表,必须要保证该表名在数据库中不存在,否则数据库会提示创建失败。如果需要创建已经存在的表,我们必须先将原来的表删除,再重新创建。
在已有的表中添加、修改或删除列:ALTER TABLE
表中添加列:ALTER TABLE (表) ADD (列)
表中删除列:ALTER TABLE (表) DROP COLUMN (列)
注:一些数据库系统不允许这样删除数据库表中的列。
表中更改列的数据类型:ALTER TABLE (表) ALTER COLUMN (更改的数据类型)
SP_RENAME '原始名','重命名'
DROP TABLE 表
SQL Server 允许为每个数据库服务创建多个数据库。在 MS-SQL 中,使用 CREATE DATABASE 语句创建数据库的完整语法:
注:数据库文件的后缀名为".mdf",而事务处理日志文件的后缀名为".ldf"。
与表的删除类似,数据库的删除是通过 DROP DATABASE 语句来实现的,语法如下:
索引是一个单独的、物理的数据库结构,是数据库的一个表中所包含的值的列表,其中 注明了表的各个值所在的存储位置。索引是依赖于表建立的,提供了编排表中数据的方法。打个比方,把数据库看作一本书,把索引看作书的目录,通过目录查找书 中的信息。显然,与没有目录的书相比,这显得方便和快捷。
按存储结构的不同将索引分为两类,簇索引 (ClusteredIndex)和非簇索引(Nonclustered Index)。
CLUSTERED/ NONCLUSTERED:聚集和非聚集索引,若为 CLUSTERED,则为聚 集索引,即表中元组按索引项的值排序,并聚集在一起。一个基本表上只能建一个 聚集索引。NONCLUSTERED 表示创建的索引为非聚集索引。缺省时,创建的索引 为非聚集索引。
ASC/DESC:索引表中索引值的排序次序,缺省为 ASC(正序排列)。
惟一索引是指不允许在两行中存在相同的索引值。惟一索引可以拥有一行或者多行。当创建惟一索引时,我们应确保被索引的列不允许 NULL 值。例如,SQL Server 将 NULL 也看作是一个值,如果创建惟一索引的列允许 NULL 值,假定原先该列不存在 NULL 值,那么向其中插入 NULL 值时,第一个是合法的,第二个就会失败。因为两个 NULL 值被视为违背惟一性原则
使用簇集索引主要有三点优势:
使用簇集索引的表将占用最小的磁盘空间。因为 DBMS 在插入新行时,会自动地重用以前分配给删除行的空间。
对基于簇集索引的列值进行查询时,会有更快的执行速度,因为所有值在物理磁盘 上相互靠近。
基于簇集索引的列以升序显示数据查询,不再需要 ORDER BY 子句,因为表的数据 本身已经按所要求的输出顺序排列。
注:一个表中只能创建一个簇索引。因为表行必须以簇集索引的顺序排列,而单个表再磁盘上只能有一个物理记录排列方式。
在 SQL 中,无论是簇集索引还是非簇索引,都可以通过 DROP INDEX 关键字销毁。语法如下:
在 SQL Server 中,用 DROP INDEX 语句销毁索引时,我们一定要指明索引所在表 的名字。
对小的数据表来说,使用索引并不能提高检索效率,因此不需对其创建索引。
当用户要检索的字段的数据包含有很多数值或很多空值(NULL)时,为该字段创建 索引,会大大提高检索效率。
当用户查询表中的数据时,如果查询结果包含的数据(行)较少,一般少于数据总 数的 25%时,使用索引会显著提高查询效率。反之,如果用户的查询操作返回结果 总是包含大量数据,那么索引的用处不大。
索引列在 WHERE 子句中应频繁使用。
我们要先装数据,后建索引。对于大多数的表,总有一批初始数据需要装入。该原 则是说,建立表后,我们要先将这些初始数据装入表,然后再建索引,这样可以加 快初始数据的录入。如果建表后就建索引,那么在输入初始数据时,每插入一个记 录都要维护一次索引;当然,对于索引来说,早建和晚建都是允许的。
索引提高了数据检索的速度,但也降低了数据更新的速度。如果要对表中的数 据进行大量更新,我们最好先销毁索引,等数据更新完毕再创建索引,这样会 提高效率。
索引要占用数据库空间。在设计数据库时,我们要把需要的索引空间考虑在内。
我们要尽量把表和它的索引存放在不同的磁盘上,这样会提高查询速度。
视图是从一个或多个表中导出的表,其结构和数据是建立在对表的查询基础上的。和表 一样,视图也是包括几个被定义的数据列和多个数据行,但就本质而言,这些数据列和数据 行来源于它所引用的表。所以视图不是真实存在的基础表,而是一张虚表。
视图的创建主要由 CREATE VIEW 关键字实现,其数据则由 SELECT 语句定义。语法:
在 SQL 中,我们可以通过 DROP VIEW 关键字销毁创建的视图。语法如下:
销毁视图,只需在 DROP VIEW 关键字后写入视图的名称即可。
和表一样,视图必须有唯一的名字。并且视图与表不允许拥有相同的名字。
视图的创建个数不受限制,用户可以创建任意多个视图。
用户要创建视图,必须从数据库管理员那里得到创建权限。
视图可以嵌套,即可以创建视图的视图。
SQL Server禁止用户在查询语句中使用 ORDER BY 子句。
SELECT语句的完整语法如下:
DISTINCT:删除查询结果中相同的行。
ALL:返回查询结果中的所有行。如果没有指定任何一个关键字,那么关键字 ALL 就是默认的关键字。
WHERE:列出搜索标准,用于选择要显示的数据行。
GROUP BY :分组查询结果。
HAVING:列出另外的行选择标准。
ORDER BY : 对 查询结果进行排列。
ASC:升序排列结果。
DESC:降序排列结果。
在 SQL 中,查询表中某一列(字段)信息的语法可表示如下:
注:在 SQL 语言中,SQL 关键词对大小写不敏感,所以对 SELECT 关键词来说, SELECT、select 或者 Select 都是一样的;然而对于表名或者列名来说,可能对大小写 敏感,这取决于数据库的 DBMS。
在 SELECT 子句中,我们通过指明 DISTINCT 关键字,可以去除列中的重复信息。语法如下:
注:DISTINCT 关键字去除的是 SELECT 子句查询的列,即 column 的重复信息。如果 SELECT 子句查询的列为多列,那么只有这些列的信息同时重复的记录才能被去除。
多列查询只是在 SELECT 关键词后罗列出所要查询的列名并以逗号相互间隔,注意一点,列出的最后一列的名字后面不能加逗号,否则会造成语法错误。语法如下:
使用“*”通配符,查询结果将列出表中所有列的元素,而不必指明各列的列名,这在用户不清楚表中各列的列名时非常有用。语法如下:
按照某一列的顺序(升序)进行排列显示的,即 ORDER BY 子句后面只有一个字段。语法如下:
注:ORDER BY 子句一定要放在所有子句的最后(无论包含多少子句)。
根据 ORDER BY 子句后面列名的顺序确定优先级的, 即查询结果首先按照列 col1 的顺序进行排列,而只有当列 col1 出现相同的信息时,这些相同 的信息再按照列 col2 的顺序进行排列,以此类推。语法如下:
根据列的相对位置(即序号)进行排序。语法如下:
要实现反向(降序)排序,我们必须使用关键字“DESC”。语法如下:
WHERE 子句中定义的搜索条件可以是简单的单值比较条件,也可以使用各种运算符、组合子句条件。