T-SQL中的数据类型(较全)
- 格式:doc
- 大小:48.00 KB
- 文档页数:3
第1章数据库系统与数据库概念设计数据库应用技术(SQL Server 2005)人民邮电出版社课后习题思考与练习一、选择题1.数据库(DB)、数据库系统(DBS)和数据库管理系统(DBMS)之间的关系是(A )。
A.DBS包括DB和DBMSB.DBMS包括DB和DBSC.DB包括DBS和DBMSD.DBS就是DB,也就是DBMS2.下面列出的数据库管理技术发展的3个阶段中,没有专门的软件对数据进行管理的阶段是(D)。
I.人工管理阶段II.文件系统阶段III.数据库阶段A.I 和IIB.只有IIC.II 和IIID.只有I3.描述数据库全体数据的全局逻辑结构和特性的是(A )。
A.模式B.内模式C.外模式4.要保证数据库的数据独立性,需要修改的是(C )。
A.模式与外模式B.模式与内模式C.三级模式之间的两层映射D.三级模式5.E-R方法的三要素是(C)。
A.实体、属性、实体集B.实体、键、联系C.实体、属性、联系D.实体、域、候选区6.概念设计的结果是(B )。
A.一个与DBMS相关的要领模型B.一个与DBMS无关的概念模型数据库应用技术(SQL Server 2005)C.数据库系统的公用视图D.数据库系统的数据字典7.下列四项中,不属于数据库系统特点的是(C )。
A.数据共享B.数据完整性C.数据冗余度高D.数据独立性高第2章关系模型与数据库逻辑设计思考与练习一、选择题1.关系数据模型是目前最重要的一种数据模型,它的三个要素是(A )。
A.实体完整性、参照完整性、用户自定义完整性B.数据结构、关系操作、完整性约束C.数据增加、数据修改、数据查询D.外模式、模式、内模式2.一个关系中,能唯一标识元组的属性集称为关系的(B)。
A.副键B.关键字C.从键D.参数3.现有如下关系:患者(患者编号,患者姓名,性别,出生日期,所在单位)、医疗(患者编号,医生编号,医生姓名,诊断日期,诊断结果),其中,医疗关系中的外码是(A )。
第七课T-SQL语言基础课前导读基础知识重点知识基础知识SQL语言概述。
重点知识数据类型、常量、运算符和常用函数,读者应结合上机实战熟练相关操作。
课堂讲解在SQL Server 2000中,企业管理器是一个功能强大、操作方便的图形化管理工具,几乎所有的操作都可以在其中完成,但它仍不能完全取代SQL语句。
无论是SQL Server 2000,还是在其他的数据库中,SQL都扮演了重要的角色,要成为一名突出的数据库开发人员,首先就应该掌握SQL语言。
本课将介绍SQL语言的基本概况、数据类型、常量、运算符和常用函数等内容。
SQL语言概述数据类型常量运算符常用函数SQL语言概述SQL是Structured Query Language(结构化查询语言)的缩写,是关系数据库使用的标准数据库查询语言。
SQL在20世纪70年代由IBM开发出来,随着关系数据库管理系统的不断推出,SQL语言被广泛应用。
由于关系数据库供应商都根据需要定义了自己的SQL语法规则,例如,Microsoft使用的SQL为Transact-SQL(简称T-SQL),Oracle使用的SQL为SQL-Plus。
为了统一各种数据库产品中SQL语法,ANSI(American National Standard Institute,美国国家标准局)制定了SQL语言标准。
最早的ANSI标准于1986年完成,它也被叫做SQL-86,目前新的SQL标准是1992年制定的SQL-92。
很显然,各个数据库供应商不可能抛弃自己的专长来适应ANSI标准,所以业界使用的SQL语言基本上是以SQL-92为基础,在加上各供应商自己的特有语法。
所以,SQL语言标准有“业界标准”和“ANSI标准”之分。
SQL语言具有“非过程性”的特点,使用SQL编写的程序不能独立运行,必须在特定的数据库管理系统中使用,这与“过程性”的高级程序设计语言,如VB、VC等不同。
SQL语言中的语言可从功能上分为3类:数据定义语言DDL(Data Definition Language)、数据处理语言DML(Data Manipulation Language)和数据控制语言DCL(Data Control Language)。
数据库T-SQL语⾔操作(T-SQL语句、数据库、表、视图、索引)T-SQL语⾔按⽤途分四部分1. 数据定义语⾔(CREATE,DROP,ALTER)2. 数据操作语⾔(INSERT,DELETE,UPDATE)3. 数据查询语⾔(SELECT)4. 数据控制语⾔(GRANT,REVOKE,DENY)数据类型1. 系统数据类型2. ⽤户⾃定义数据类型(建⽴⽅式:a.图形化⽅式 b.命令⽅式)1use TEST2EXEC sp_addtype sno,'varchar(10)','nonull'3EXEC sp_droptype sno变量命名规则:字母、下划线、@或#开头,但不能全为下划线、@或#不能为“关键字”,不能嵌⼊空格及其他特殊字符,如需使⽤则需要双引号或⽅括号括起1.局部变量:由⽤户声明,必须以@开头,只在定义该变量的过程中有效,局部变量必须先声明后使⽤注意:第⼀次声明变量时,其值设置为NULL。
局部变量不能使⽤“变量=变量值”的格式进⾏初始化,必须使⽤SELECT或SET语句来设置其初始值。
如果声明字符型的局部变量,⼀定要在变量类型中指明其最⼤长度,否则系统默认其长度为1。
若要声明多个局部变量,请在定义的第⼀个局部变量后使⽤⼀个逗号,然后指定下⼀个局部变量名称和数据类型。
1USE student2DECLARE@var1char(10),@var2int3SET@var1='number'4select@var2=cgrade5from sc6where sno='201810010'78print@var1+"s"2.全局变量:由系统定义,供SQL server系统内部使⽤的变量,任何程序任何时间都可以调⽤。
通常以“@@”开头。
T-SQL语句1.注释语句(1) --(2) /*……*/2.批处理--GO3.控制流程语句(1) begin...end语句(相当于C语⾔中的{} )(2) if...else语句(可嵌套)(3)case语句(多条件选择语句)(4)print语句(屏幕输出语句)(5)while语句(有条件的循环语句)(6)goto语句(⽆条件跳转语句)(7)break语句(8)continue语句4.常⽤函数(系统函数、⽤户⾃定义函数)⼀些系统函数:(1)字符串函数(2)数学函数(3)⽇期和时间函数(4)聚合函数注意:⽤户⾃定义函数:1.分类:标量值函数:返回单个值内联表值函数:返回可更新的表多语句表值函数:返回不可更新的表2.标量值函数命令⽅式创建1CREATE FUNCTION f2(@a real,@b real) 2RETURNS real3AS4BEGIN5IF@a>=@b6RETURN@a7RETURN@b8END910PRINT'最⼤值为'11PRINT dbo.f2(77,56)1CREATE FUNCTION f3(@n real)2RETURNS real3AS4BEGIN5DECLARE@i real,@sum real6SET@i=07SET@sum=08WHILE@i<@n9BEGIN10SET@i=@i+111SET@sum=@sum+@i12END13RETURN@sum14END1516PRINT dbo.f3(10)3.⾃定义函数的调⽤(1)标量值函数可以使⽤select、print、exec调⽤(2)表值函数只能⽤select调⽤4.删除⽅式drop function 函数名数据库数据库概述1.数据库常⽤对象:表、数据类型、视图、索引、存储过程、触发器系统数据库:master、model、tempdb、msdb2.数据库存储结构(数据库⽂件、数据库⽂件组):数据库⽂件:存放数据库数据和数据库对象的⽂件。
sqlite3中的数据类型大多数的数据库引擎(到现在据我们所知的除了sqlite的每个sql数据库引擎)都使用静态的、刚性的类型,使用静态类型,数据的类型就由它的容器决定,这个容器是这个指被存放的特定列。
Sqlite使用一个更一般的动态类型系统,sqlite中,值的数据类型跟值本身相关,而不是与它的容器相关。
Sqlite的动态类型系统和其他数据库的更为一般的静态类型系统相兼容,但同时,sqlite中的动态类型允许它能做到一些传统刚性类型数据库所不可能做到的事。
1.存储类和数据类型每个存放在sqlite数据库中(或者由这个数据库引擎操作)的值都有下面中的一个存储类:●NULL,值是NULL●INTEGER,值是有符号整形,根据值的大小以1,2,3,4,6或8字节存放●REAL,值是浮点型值,以8字节IEEE浮点数存放●TEXT,值是文本字符串,使用数据库编码(UTF-8,UTF-16BE或者UTF-16LE)存放●BLOB,只是一个数据块,完全按照输入存放(即没有准换)从上可以看出存储类比数据类型更一般化。
比如INTEGER存储类,包括6中不同长度的不同整形数据类型,这在磁盘上造成了差异。
但是只要INTEGER值被从磁盘读出进入到内存进行处理,它们被转换成最一般的数据类型(8-字节有符号整形)。
Sqlite v3数据库中的任何列,除了整形主键列,可以用于存储任何一个存储列的值。
sql语句中的中所有值,不管它们是嵌入在sql文本中或者是作为参数绑定到一个预编译的sql语句,它们的存储类型都是未定的。
在下面描述的情况中,数据库引擎会在查询执行过程中在数值(numeric)存储类型(INTEGER和REAL)和TEXT 之间转换值。
1.1布尔类型Sqlite没有单独的布尔存储类型,它使用INTEGER作为存储类型,0为false,1为true1.2 Date和Time DatatypeSqlite没有另外为存储日期和时间设定一个存储类集,内置的sqlite日期和时间函数能够将日期和时间以TEXT,REAL或INTEGER形式存放●TEXT 作为IS08601字符串("YYYY-MM-DD HH:MM:SS.SSS")●REAL 从格林威治时间11月24日,4174 B.C中午以来的天数●INTEGER 从 1970-01-01 00:00:00 UTC以来的秒数程序可以任意选择这几个存储类型去存储日期和时间,并且能够使用内置的日期和时间函数在这些格式间自由转换2.0 类型近似为了使sqlite和其他数据库间的兼容性最大化,sqlite支持列上“类型近似”的观点,列的类型近似指的是存储在列上数据的推荐类型。
《数据库应用与安全管理》课程标准一、课程概述1.课程性质《数据库应用与安全管理》是信息安全与管理专业针对网络安全测评、网络安全规划实施、安全产品技术支持、网络安全运维和数据安全等关键岗位,经过对企业岗位典型工作任务的调研和分析后,归纳总结出来的为适应信息安全管理员、信息安全工程师、渗透测试工程师和网络安全运维工程师等岗位能力需求而设置的一门专业核心课程。
2.课程任务《数据库应用与安全管理》课程通过与信息安全管理相关的实际项目学习,增强学生对专业知识运用的认识,让他们熟练掌握SQLServer的安装,掌握数据库的创建与管理,表的创建与管理,数据查询,视图操作,存储过程和触发器,数据库的安全,数据库的管理等相关知识和技能,使学生能基本胜任信息安全管理员、信息安全工程师和网络安全运维工程师等岗位的工作。
3.课程要求通过本课程的学习,培养学生具有信息安全管理岗位所需的信息安全风险评估、信息系统保障、信息安全管理、信息安全工程实施等方面的能力,以及分析问题、解决问题的能力,并养成良好的职业道德,为后续课程学习打下坚实的基础。
二、教学目标1.知识目标(1)了解数据库的形成与发展;(2)掌握T-SQL和图形界面的操作方法;(3)了解表、库的概念和建立方法;(4)熟悉数据库表的查询方法;55)了解视图、触发器、存储过程等相关概念及建立方法;66)了解数据库备份、登录管理、用户管理、权限管理和架构管理。
7.能力目标(1)能进行SQLServer的安装与配置;(2)能应用T-SQL或图形界面进行数据库、表和记录的操作;(3)能应用T-SQL或图形界面进行数据查询操作;(4)能使用视图和索引优化数据查询;(5)能使用存储过程、触发器和游标操作;(6)能应用T-SQL或图形界面进行数据库安全性设置;(7)能应用T-SQL或图形界面进行数据库的备份与恢复操作;(8)能够实现登录管理、用户管理、权限管理和架构管理。
8.素质目标(1)培养学生谦虚、好学的能力;(2)培养学生勤于思考、做事认真的良好作风;(3)培养学生良好的质量意识、安全意识;(4)培养学生根据实际应用需求完成分析问题、解决问题的能力(5)培养学生理论联系实际的能力和严谨的工作作风;(6)细致、耐心与吃苦耐劳的意识(工作中要细致、耐心,要有较好的观察与判断能力并且要有吃苦耐劳的精神)。
⾃动初始化第⼀次写⼊数据时把时间设为当前时间tiims1 TIMESTAMP DEFAULT CURRENT_TIMESTAMP ⾃动更新每⼀次写⼊数据时把时间设为当前时间ON UPDATE CURRENT_TIMESTAMP timestamp 两种结合系统默认 ⾃动初始化以及⾃动更新TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATECURRENT_TIMESTAMP ⾃动初始化以及⾃动更新timestamp 字段的数据默认就是此⾏为ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP只做初始化,更新时不⾃动更新ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP 只做⾃动更新,不做初始化ts TIMESTAMP DEFAULT 0 ON UPDATE CURRENT_TIMESTAMP 什么都不做datetimesqlite 数据类型(时间⽇期)timestamp 使⽤timestamp 使⽤timestamp 两种属性:⾃动初始化: 此⾏为只在第⼀次写⼊数据时,怎么把时间设为当前时间. (DEFAULT CURRENT_TIMESTAMP)⾃动更新: 此⾏为在修改资料时,会⾃动帮你把值修改为当前时间. (ON UPDATE CURRENT_TIMESTAMP)四种状态:由上⾯两种属性延伸出四种状态下⾯这些语句是等效的:CREATE TABLE t (ts TIMESTAMP );CREATE TABLE t (ts TIMESTAMP DEFAULT CURRENT_TIMESTAMPON UPDATE CURRENT_TIMESTAMP );CREATE TABLE t (ts TIMESTAMP ON UPDATE CURRENT_TIMESTAMPDEFAULT CURRENT_TIMESTAMP );ts TIMESTAMP DEFAULT 0 //只是给⼀个常量(注:0000-00-00 00:00:00)可以在TIMESTAMP 列的定义中包括NULL 属性以允许列包含NULL 值。
sql 0和1 字段类型在SQL中,字段类型通常由数据的大小和格式决定。
例如,整数类型通常包括 `TINYINT`, `SMALLINT`, `MEDIUMINT`, `INT` 和 `BIGINT`。
这些类型用于存储整数,其中 `TINYINT` 只能存储从 0 到 255 的值,而 `BIGINT` 可以存储非常大的整数。
如果你想存储0和1这两个值,你可以选择以下几种方法:1. 使用 TINYINT:`TINYINT` 是一个非常小的整数,可以存储从0到255的值。
所以,你可以将0和1存储为`TINYINT`类型。
2. 使用 BOOLEAN 类型 (如果数据库支持):一些数据库系统(如 MySQL)支持 `BOOLEAN` 类型,它实际上是一个 `TINYINT(1)`。
这意味着它可以存储0或1。
3. 使用 CHAR(1) 或 VARCHAR(1):你可以使用字符类型来存储单个字符'0'或'1'。
但是这种方法可能不太直观,因为'0'和'1'在字符上看起来一样,除非你使用单引号来区分它们。
例如,在MySQL中,你可能会这样定义一个表:```sqlCREATE TABLE example (id INT AUTO_INCREMENT PRIMARY KEY,flag TINYINT(1) NOT NULL, -- 使用 TINYINT 存储 0 和 1-- 或者-- flag BOOLEAN NOT NULL -- 使用 BOOLEAN 类型 (实际上是TINYINT(1)));```在选择字段类型时,请考虑你的具体需求、数据库的性能和可读性。
如果你经常需要查询基于这些值的条件,那么使用整数类型(如 `TINYINT` 或`BOOLEAN`)可能会更高效。
如果你需要存储更多的信息或文本,那么字符类型可能更适合。
SQL中的五种数据类型:字符型,文本型,数值型,逻辑型和日期型字符型VARCHAR VS CHARVARCHAR型和CHAR型数据的这个差别是细微的,但是非常重要。
他们都是用来储存字符串长度小于255的字符。
假如你向一个长度为四十个字符的VARCHAR型字段中输入数据BIll GAtES。
当你以后从这个字段中取出此数据时,你取出的数据其长度为十个字符——字符串Bill Gates的长度。
现在假如你把字符串输入一个长度为四十个字符的CHAR型字段中,那么当你取出数据时,所取出的数据长度将是四十个字符。
字符串的后面会被附加多余的空格。
当你建立自己的站点时,你会发现使用VARCHAR型字段要比CHAR型字段方便的多。
使用VARCHAR型字段时,你不需要为剪掉你数据中多余的空格而操心。
VARCHAR型字段的另一个突出的好处是它可以比CHAR型字段占用更少的内存和硬盘空间。
当你的数据库很大时,这种内存和磁盘空间的节省会变得非常重要文本型TEXT使用文本型数据,你可以存放超过二十亿个字符的字符串。
当你需要存储大串的字符时,应该使用文本型数据。
注意文本型数据没有长度,而上一节中所讲的字符型数据是有长度的。
一个文本型字段中的数据通常要么为空,要么很大。
当你从HTML fORM的多行文本编辑框(TEXTAREA)中收集数据时,你应该把收集的信息存储于文本型字段中。
但是,无论何时,只要你能避免使用文本型字段,你就应该不适用它。
文本型字段既大且慢,滥用文本型字段会使服务器速度变慢。
文本型字段还会吃掉大量的磁盘空间。
一旦你向文本型字段中输入了任何数据(甚至是空值),就会有2K的空间被自动分配给该数据。
除非删除该记录,否则你无法收回这部分存储空间。
数值型SQL支持许多种不同的数值型数据。
你可以存储整数 INT 、小数 NUMERIC、和钱数 MONEY。
INT VS SMALLINT VS TINYINT他们的区别只是字符长度:INT型数据的表数范围是从-2,147,483,647到2,147,483,647的整数SMALLINT 型数据可以存储从-32768到32768的整数TINYINT 型的字段只能存储从0到255的整数,不能用来储存负数通常,为了节省空间,应该尽可能的使用最小的整型数据。
实验四⽤T-SQL语句操作数据表中的数据实验四⽤T-SQL语句操作数据表中的数据⼀、实验⽬的掌握⽤T-SQL向表中插⼊、修改、删除数据的基本操作。
⼆、实验内容1.从FTP中把上次实验创建的数据库“Student”复制到本地磁盘。
2.在企业管理器中把数据库“附加”进来。
3.使⽤insert命令对表中的数据进⾏操作(具体要求见后⾯操作步骤)。
4.使⽤Update命令对表中的数据进⾏更新操作(具体要求见后⾯操作步骤)。
5.使⽤delete命令对表中的数据进⾏更新操作(具体要求见后⾯操作步骤)。
6.分离数据库“Student”并复制FTP上,以备在以后实训中使⽤。
三、仪器、设备、材料微机、SQLServer2005四、实验准备1.理论知识预习及要求①掌握数据库的结构;②掌握数据表的组成;③掌握T-SQL语句操作数据表的格式;2.实验指导书预习及要求上机前先复习第四章的内容,掌握⽤T-SQL语句操作数据表数据。
3.其他准备⽆五、实验原理或操作要点简介利⽤T-SQL语句对表中的数据进⾏操作。
六、注意事项要养成为结果⽂件取有意义名称的习惯。
要及时保存⽂件,避免死机或断电造成的⽂件丢失。
创建过程中,出现问题时,请保存,请⽼师解答。
创建过程中,若出现找不到相应的问题时,要看联机丛书,逐步学会⾃学。
七、实验过程与指导1.进⼊SQL Server2005的界⾯。
2.启动服务。
3.打开查询分析器,新建查询。
提⽰:每做完⼀题,就新建⼀个查询。
使⽤insert命令对表中的数据进⾏操作,具体要求:T-SQL命令insert语法如下:insert[into]<表名>[<列名列表>]values(数据列表)使⽤values关键字的insert命令⼀次仅能插⼊⼀条记录,所以每插⼊⼀⾏,都要使⽤insert关键字,并且必须提供表名及相关的列、数据等。
注意:(1)将数据添加到⼀⾏的所有列时,Insert语句中⽆需给出表中的列名,只要有Values关键字给出添加的数据即可。
第1章数据库概述1.与文件管理相比,数据库管理有哪些优点?答:(1)相互关联的数据集合;(2)较少的数据冗余;(3)程序与数据相互独立;(4)保证数据的安全可靠;(5)最大限度地保证数据的正确性;(6)数据可以共享并能保证数据的一致性。
2.比较文件管理和数据库管理数据的主要区别。
答:文件系统不能提供数据的独立性,也不能提供数据共享、安全性等功能,这些需要客户端编程实现。
而数据库管理系统可以很方便地提供这些功能。
3.在数据库管理方式中,应用程序是否需要关心数据的存储位置和结构?为什么?答:不需要。
因为这些都由数据库管理系统来维护。
4.在数据库系统中,数据库的作用是什么?答:数据库是存储数据的仓库,其作用是存储数据。
5.在数据库系统中,应用程序可以不通过数据库管理系统而直接访问数据库文件吗?答:不可以。
6.数据独立性指的是什么?它能带来哪些好处?答:数据独立性包括逻辑独立性和物理独立性两部分。
物理独立性是指当数据的存储结构发生变化时,不影响应用程序的特性;逻辑独立性是指当表达现实世界的信息内容发生变化时,不影响应用程序的特性。
这两个独立性使用户只需关心逻辑层即可,同时增强了应用程序的可维护性。
7.数据库系统由哪几部分组成,每一部分在数据库系统中的作用大致是什么?答:数据库系统一般包括3个主要部分:数据库、数据库管理系统和应用程序。
数据库是数据的汇集,它以一定的组织形式保存在存储介质上;数据库管理系统是管理数据库的系统软件,它可以实现数据库系统的各种功能;应用程序专指以数据库数据为基础的程序8.在文件服务器结构和客户/服务器结构中,对数据的处理有什么区别?答:在文件服务器结构中,数据的处理是在客户端完成的,而在客户/服务器结构中,对数据的处理是在服务器端完成的,服务器返回给客户端的是处理后的结果。
第2章数据模型与数据库系统结构1.解释数据模型的概念,为什么要将数据模型分成两个层次?答:数据模型实际上是模型化数据和信息的工具,在数据库中,数据模型要满足三个要求:第一,要能够比较真实地模拟现实世界;第二,要容易被人们理解;第三,要能够很方便地在计算机上实现。
SQL中的五种数据类型:字符型,文本型,数值型,逻辑型和日期型字符型VARCHAR VS CHARVARCHAR型和CHAR型数据的这个差别是细微的,但是非常重要。
他们都是用来储存字符串长度小于255的字符。
假如你向一个长度为四十个字符的VARCHAR型字段中输入数据BIll GAtES。
当你以后从这个字段中取出此数据时,你取出的数据其长度为十个字符——字符串Bill Gates的长度。
现在假如你把字符串输入一个长度为四十个字符的CHAR型字段中,那么当你取出数据时,所取出的数据长度将是四十个字符。
字符串的后面会被附加多余的空格。
当你建立自己的站点时,你会发现使用VARCHAR型字段要比CHAR型字段方便的多。
使用VARCHAR型字段时,你不需要为剪掉你数据中多余的空格而操心。
VARCHAR型字段的另一个突出的好处是它可以比CHAR型字段占用更少的内存和硬盘空间。
当你的数据库很大时,这种内存和磁盘空间的节省会变得非常重要文本型TEXT使用文本型数据,你可以存放超过二十亿个字符的字符串。
当你需要存储大串的字符时,应该使用文本型数据。
注意文本型数据没有长度,而上一节中所讲的字符型数据是有长度的。
一个文本型字段中的数据通常要么为空,要么很大。
当你从HTML fORM的多行文本编辑框(TEXTAREA)中收集数据时,你应该把收集的信息存储于文本型字段中。
但是,无论何时,只要你能避免使用文本型字段,你就应该不适用它。
文本型字段既大且慢,滥用文本型字段会使服务器速度变慢。
文本型字段还会吃掉大量的磁盘空间。
一旦你向文本型字段中输入了任何数据(甚至是空值),就会有2K的空间被自动分配给该数据。
除非删除该记录,否则你无法收回这部分存储空间。
数值型SQL支持许多种不同的数值型数据。
你可以存储整数 INT 、小数 NUMERIC、和钱数 MONEY。
INT VS SMALLINT VS TINYINT他们的区别只是字符长度:INT型数据的表数范围是从-2,147,483,647到2,147,483,647的整数SMALLINT 型数据可以存储从-32768到32768的整数TINYINT 型的字段只能存储从0到255的整数,不能用来储存负数通常,为了节省空间,应该尽可能的使用最小的整型数据。
T-SQL中的数据类型
主要学习T-SQL的数据类型:数值型数据类型,字符型数据类型,临时数据类型,混合型数据类型,附带有VARDECIMAL的DECIMAL存储类型。
1、数值数据类型
2、字符型数据类型
字符型数据类型用两种普通形式。
它们可以是单字节的字符串,还可以使Unicode字符串。
此外,字符串有固定或可变长度。
具体看下表:
注:VARCHAR数据类型和CHAR数据类型基本一样,只有一点不同,如果一个CHAR(n)字符串比n个字符要短,那么其余的字符串就会用空格来填充。
VARCHAR数据类型经常用数据长度存储。
3、临时数据类型
T-SQL支持的临时数据类型有:DATETIME、SMALLDATETIME、DATE、TIME、DATETIME2和DETETINEOFFSET。
DATETIME和SMALLDATETIME数据类型指定日期和时间,每个值都为整数并分别用4个字节或2个字节保存。
DATETIME和SMALLDATETIME的值是作为两个单独的数值保存的。
DATETIME日期值的范围为01/01/1900至12/31/9999。
SMALLDATETIME相应的值为01/01/1900至06/06/2079。
时间部分能够再用4个字节或2个字节保存。
它表示午夜过后的一秒的三百分之一(DATETIME)或分钟(SMALLDATETIME)。
如果只想保存日期或时间部分,那么使用DATETIME和SMALLDATETIME非常不方便。
SQL SERVER 2008新增新的数据类型:DATE和TIME,这两种数据类型只能分别保存DATATIME数据的DATA或TIME部分。
DATE数据类型用3个字节的保存并且范围为01/01/0001至12/31/9999。
TIME数据类型用3-5个字节保存,且精确到100ns。
DATETIME2数据类型也是一种新的数据类型,用于保存精度度很高的日期和时间数据。
这种数据类型能够根据要求定义可变长度。
存储大小为6-8个字节。
时间部分的精确度为100ns。
4、混合型数据类型
T-SQL的混合数据类型有:Binary,BIT,大对象数据类型,CURSOR,UNIQUEIDENTIFIER,SQL_VARTANT,TABLE,XML,Spatial,HIERARCHYID,TIMESTAMP和自定义数据类型。
4.1 BINARY和BIT
BINARY和VARBINARY数据类型是两种二进制的数据类型。
它们表示系统内部格式的数据对象。
它们用来存储位串,因此这些值都是十六进制的数字。
4.2 大对象数据类型
大对象就是最大长度为2GB的数据对象。
这些数据对象一般用来存储大型的文本数据、加载模块和音频/视频文件。
T-SQL支持两种不同的指定和访问方式:使用VARCHAR(MAX),NVARCHAR(MAX)和VARBINARY(MAX)的数据类型;使用所谓的文本和图像数据类型。
TEXT、NTEXT和IMAGE数据类型组成了所谓的文本/图像数据类型。
IMAGE类型的数据对象包含所有的数据(下载模块、音频/视频),而TEXT和NTEXT数据类型的数据对象包含文本数据。
文本/图像数据类型和数据库的其他值区别保存默认值,存储方式为使用指向该数据字段的B-树型结构。
而对于含有文本/图像数据类型的列来说,在数据行中存储了16字节的指示器,指定能找到数据的地方。
如果文本/图像数据小于32KB,指示器就指向了B-树型结构中的根部节点,该节点长度约为84字节。
根部节点指向数据的物理模块。
如果数据总量大于32KB,Database Engine就会在数据模块和根部节点建立中间节点。
由于每个表都包含一个以上的有这种数据的列,列中的所有值都存储在一起。
然而,一个物理页面能只包含单个表中的文本/图像数据。
文本/图像数据类型有很多局限性。
不能把他们当作本地变量。
它们也不能作为索引的一部分,不能用在WHERE、ORDER BY和GROUP BY的子句中。
有些时候可以使用VARCHAR(MAX),NVARCHAR(MAX)和VARBINARY(MAX)来代替文本/图像数据类型。
4.3 CURSOR
4.4 UNIQUEIDENTIFIER
UNIQUEIDENTIFIER数据类型值是唯一辨别数字,它是用16个字节存储的二机制字符串,和全球唯一识别码密切相关,保证了在世界范围内的唯一性。
因此,通过运用数据类型,可以在分布式的计算机中识别数据和对象。
使用NEWID和NEWSEQUUENTIALID函数可以进行列或UNIQUEIDENTIFIER类型的变量初始化,并且字符串常量是用十六进制数字和连字符这种特殊格式书写的。
4.5 SQL_VARTANT
SQL_VARIANT数据类型用于同时存储各种数据类型,如数值、字符串已经日期值等。
只有TIMESTAMP类型值不能存储。
SQL_VARIANT列中的每个值都有两个部分:日期值和描述值的信息。
这些信息包含数据类型的所有属性,如长度、范围和精确度。
4.6 TABLE
4.7 XML
4.8 Spatial
4.9 HIERARCHYID
UNIQUEIDENTIFIER数据类型用于保存整个层面,它是作为CLR自定义数据安装的,包括一些层级节点上的创建和操作的系统函数:GetAncestor(),GetDescendant(),Read()和Wriite().
4.10 TIMESTAMP
TIMESTAMP数据类型指定其中的一栏为VARBINARY(8)和BINARY(8),这是由列中的无效值决定的。
系统包含每个数据库的当前值(不是日期或时间),这样在插入或更新含有TIMESTAMP列这样的行就会自动增加。
4.11 自定义数据类型
5 附带有VARDECIMAL的DECIMAL存储类型
Vardecimal 是一种存储格式,而不是数据类型。
vardecimal 存储格式可以大大减少数据的存储大小,但确实增加了少量CPU 开销。
vardecimal 存储格式应用于表级别。
也就是说,不能只将表中的某些decimal 列存储为vardecimal 存储格式而不将其他列存储为该格式。
decimal 数据将保持为本身的数据类型。