1、SQL Server语言功能概述
SQL功能 | 动词 |
---|---|
数据定义 | CREATE、DROP、ALTER |
数据查询 | SELECT |
数据操纵 | INSERT、UPDATE、DELETE |
数据控制 | GRANT、REVOKE、DENY |
2、SQL Server提供的数据类型类别
数据类型 | 类别名 |
---|---|
精确数字类型 | Unicode字符串类型 |
近似数字类型 | 二进制字符串类型 |
日期和时间类型 | 其他数据类型 |
字符串类型 |
-
2.1 数字类型
-
2.1.1 精确数字类型
数据类型 范围 存储 bit bit数据类型是整型,其值只能是0、1或NULL。这种数据类型用于存储只有两种可能值的数据,如Yes 或No、True 或False 、On 或Off. (很省空间的一种数据类型,如果能够满足需求应该尽量多用)。SQL Server 数据库引擎可优化bit列的存储。如果表中有不多于8个列是bit类型,则这些列公用1字节存储。如果bit 类型的列为9~16个,则这些列作为2字节存储,以此类推,字符申值TRUE和FALSE可转换为bit值: TRUE将转换为1. FALSE将转换为0 1字节 tinyint tinyint 数据类型能存储从0到255 之间的整数。它在你只打算存储有限数目的数值时很有用。 1字节 smallint 存储从- 215(-32768)到215-1(32767)之间的整数。这种数据类型对存储一些常限定在特定范围内的数值型数据非常有用。 (如果tinyint类型太单调不能满足您的需求,您可以考虑用smallint类型,因为这个类型相对也是比较安全的,不接受恶意脚本内容的嵌入) 2字节 int 存储从- 2的31次幂(-2147483648)到2的31次幂 (2147483 647)之间的整数。存储到数据库的几乎所有数值型的数据都可以用这种数据类型 4字节 bigint 存储从-263( -9 223 372 036 854 775 808)到263-1 (9 223 372 036854 775 807 )范围的整数 8字节 decimal[(p[,s])]或numeric[(p[,s])] 使用最大精度时,有效值的范围为-1038+1到+1038- 1。decimal 的ISO同义词为dec和dec(p, s)。numeric 在功能上等价于decimal。 p:精度最多可以存储的十进制数字的总位数,包括小数点左边的和右边的位数。该精度必须是1-38之间的值。默认精度是18,s:小数点右边的数字位数 至多17个字节 定点小数类型
精度 存储字节数 1~9 5 10~19 9 20~28 13 29~38 17 -
2.1.2近似数字类型
数据类型 说明 存储 Float[(n)] -1.79E十308 ~ - 2.23E- 308、 0,以及2.23E- 308 ~ 1.79E+ 308 取决于n的值 real -3.40E+38 ~-1.18E- 38、0,以及1.18E- 38 ~ 3.40E+ 38 4字节 float[(n)]中的n为用于存储float数值尾数的位数(以科学计数法表示),因此可以确定精度和存储大小。n的值介于1~53,默认值为53。下表列出了n的值对应的精度和存储空间。 Float[(n)]中n的值对应的精度和存储空间
n值 精度 存储 1~24 7位数 4字节 25~53 15位数 8字节
说明: SQL Server将n视为下列两个可能值之一。如果1≤n≤24,则将n视为24。如 果25≤n≤53,则将n视为53
-
2.2字符串类型
目前字符的编码方式有两种:非Unicode和Unicode编码。非Unicode编码指的是不同国家或者地区的编码长度不一样;Unicode编码:指不管对哪个地区、哪个语言均采用双字节(16字节)编码,即将世界上所有的字符进行统一的编码。
-
2.2.1非Unicode字符串类型
非Unicode字符串类型
数据类型 说明 存储 Char[(n)] 固定长度,非Unicode字符串数据。n用于定义字符串长度,取值范围为1~8000。char 的ISO同义词为character(若实际字符串控件小于n,系统自动在后面补空格),char(2)才可以放一个汉字 n字节 Varcahr[(n、max)] 可变长度,非Unicode字符串数据。n用于定义字符串长度,取值范围为1~ 8000。max指示最大存储大小是231-1字节( 2GB)。varchar的ISO同义词为char varying或character varying n+2字节 text 可存储231-1(2 147 483 647)个长度可变的非Unicode字符数据 一个字符一个字节
说明: 如果没有在数据定义或变量声明语句中指定n,则默认长度为1.
n值比较小(小于4),用char类型更好些。
-
2.2.2 统一编码字符串类型(Unicode)
Unicode字符串类型
数据类型 说明 存储 nchar[(n)] 固定长度的Unicode字符串数据。n用于定义字符串长度,取值范围为1~4000。nchar 的ISO同义词为national char和national character,nchar(1)就可以放一个汉字。 2n字节 nvarchar[(n、max)] 可变长度的Unicode字符串数据。n用于定义字符串长度,取值范围为1~4000。max指示最大存储大小是231-1字节(2GB)。nvarchar 的ISO同义词为national char varying和national character varying 2n+2字节 ntext 长度可变的Unicode字符串数据,字符串最大长度为230- 1(1 073 741 823)字节。ntext的ISO同义词为national text 所输入字符串长度的2倍
说明: 如果没有在n数据定义或变量声明语句中指定n,则默认长度为1.
前缀var,是可变长的意思,nchar/char,如果长度没有占满,会补空格,nvarchar/varchar是变长的,长度占不满也不补空格
Unicode和非Unicode使用建议
数据类型 使用建议 char、nchar 列数据项的大小-致 varchar、nvarchar 列数据项的大小差异相当大 varchar(max) 、nvarchar(max) 列数据项大小相差很大,而且大小可能超过8000字节 nchar、nvarchar 希望支持多语言,最大限度地消除字符转换问题 -
2.3二进制字符串类型
-
2.3.1
二进制字符串类型
数据类型 说明 存储 binary(m)] 固定长度为n字节的二进制数据,n的取值从1到8000 n字节 varbinary[(n、max)] 可变长度二进制数据。n的取值从1到8000,max指示最大存储大小为231-1字节。varbinary 的ANSI SQL同义词为binary varying 所输入数据的实际长度+2字节 image 长度可变的二进制数据,二进制数据最大长度为231-1(2 147 483 647)字节 0~231-1字节
说明: 如果没有在数据定义或变量声明语句中指定n,则默认长度为1.
注意:在Microsoft SQL Server的未来版本中将删除ntext、text 和image数据类型。请避免在新开发工作中使用这些数据类型,并考虑修改当前已使用这些数据类型的应用程序。请改用nvarchar(max)、 varchar (max)和varbinary (max)。
数据类型 | 说明 | 范围 | 存储 |
---|---|---|---|
date | 定义一个日期,格式:YYYY-MM-DD | 0001-01-01~9999-12-31 | 3字节 |
time | 定义一天中的时间,格式:hh:mm:ss[.n*],n*是0到7位的数字,范围为0到9999999,表示秒的小数部分 | 00:00:00.0000000~23:59:59.9999999 | 5字节 |
datetime2 | 定义结合了24小时制时间的日期。可将datetime2视作现有datetime 类型的扩展,其数据范围更大,默认的小数精度更高,并具有可选的用户定义的精度,格式::YYYY-MM-DD hh:mm:ss[.n*]n*代表0到7位的数字,范围从0到9999999,表示秒的小数部分。准确度为100ns,默认精度为7位数 | 0001-01-01~9999-12-31 | 精度小于3时为6字节;精度为3和4时为7字节。所有其他精度则需要8字节 |
datetimeoffset | 用于定义一个与采用24小时制并可识别时区的一日内时间相组合的日期YYYY-MM-DD hh:mm:ss[.nnnnnn] [{±}hh:mm]n*是0到7位的数字,范围为0到999999,表示秒的小数部分hh是两位数,范围为- 14到+ 14mm是两位数,范围为00到59 | 0001-01-01~9999-12-31 | 10字节 |
SQL Server中的字符串常量要用单引号括起来,比如'计算机系'。
日期和时间类型的数据常量要用单引号括起来,比如'2015-8- 20'、'2015-8-22 10:23:50'。