网络数据库情景3Word文件下载.docx
《网络数据库情景3Word文件下载.docx》由会员分享,可在线阅读,更多相关《网络数据库情景3Word文件下载.docx(33页珍藏版)》请在冰豆网上搜索。
(一)数据类型
SQLServer2005具有丰富的数据类型,数据表中每一列必须声明相应的数据类型。
表3-2列出了常用的数据类型。
表3-2SQLServer字段的数据类型
包含
整数数据类型
int或integer﹑smallint﹑tinyint﹑bigint
浮点数据类型
real﹑float﹑decimal﹑numeric
二进制数据类型
binary﹑varbinary
逻辑数据类型
bit
字符数据类型
char﹑nchar﹑varchar﹑nvarchar
文本和图形数据类型
text﹑ntext﹑image
日期和时间数据类型
datetime﹑smalldatetime
货币数据类型
money﹑smallmoney
特定数据类型
timestamp﹑uniqueidentifier
用户自定义数据类型
sysname
新数据类型
sql_variant﹑table
下面分类讲述各种数据类型:
1.整数数据类型
整数数据类型是最常用的数据类型之一。
(1)int/integer:
表示从-231(-2,147,483,648)到231-1(2,147,483,647)之间的整型数据(所有数字),存储大小为4B。
(2)smallint:
表示从-215(-32,768)到215-1(32,767)之间的所有整型数据,每个smallint类型的数据存储大小为2B。
(3)tinyint:
表示从0到255之间的所有正整数,每个tinyint类型的数据存储大小为1B。
(4)bigint:
表示从-263(-9223372036854775808)到263-1(9223372036854775807)之间的所有正负整数每个bigint类型的数据占用8个字节的存储空间。
2.浮点数据类型
浮点数据类型用于存储十进制小数。
浮点数值的数据在SQLServer中采用上舍入方式进行存储,所谓上舍入是指当且仅当要舍入的数是一个非零数时,对其保留数字部分的最低有效位上的数值加1,并进行必要的进位,若一个数是上舍入数其绝对值不会减少。
(1)real:
可精确到第7位小数,其范围为从-3.40E+38到3.40E+38的浮点数字数据,存储大小4B。
(2)float:
可精确到第15位小数其范围为从-1.79E+308到1.79E+308,存储大小8B。
(3)decimal:
可以提供小数所需要的实际存储空间,但也有一定的限制您可以用2到17个字节来存储从-1038-1到1038-1之间的数值,可将其写为decimal[(p[,s])]的形式,p和s确定了精确的比例和数位,其中表示可供存储的值的总位数,不包括小数点,缺省值为18,s表示小数点后的位数,缺省值为0。
例如:
decimal(10,5),表示共有10位数,其中整数5位,小数5位。
(4)numeric:
与decimal数据类型完全相同。
3.二进制数据类型
(1)binary:
用于存储二进制数据,其定义形式为binary[(n)],n表示数据的长度取值为1到8000,存储空间为n+4B。
(2)varbinary:
定义形式为varbinary[(n)],它与binary类型相似,n的取值也为1到8000,若输入的数据过长将会截掉其超出部分,不同的是varbinary数据类型具有变动长度的特性,因为varbinary数据类型的存储长度为实际数值长度n+4个字节,当binary数据类型允许NULL值时将被视为varbinary数据类型,一般情况下,由于binary数据类型长度固定,因此它比varbinary类型的处理速度快。
(3)image:
用于存储大量的二进制数据,其理论容量为2,147,483,647个字节,其存储数据的模式与text数据类型相同,它通常用来存储图形等对象连接和嵌入对象,在Image数据类型中,存储的数据是以位字符串存储的,不是由SQLServer解释的,必须由应用程序来解释。
例如,应用程序可以使用BMP、TIEF、GIF和JPEG格式把数据存储在Image数据类型中。
4.逻辑数据类型bit
bit数据类型占用1个字节的存储空间,其值为0或1,如果输入0或1以外的值将被视为1,bit类型不能定义为NULL值,所谓NULL值是指空值或无意义的值。
5.字符数据类型
字符数据类型是使用最多的数据类型,可以用来存储各种字母﹑数字符号﹑特殊符号,一般情况下使用字符类型数据时,须在其前后加上单引号'
或双引号”。
(1)char:
用来定义固定长度的非unicode标准字符数据。
定义形式为char[(n)],n表示所有字符所占的存储空间,n的取值为1到8000,即可容纳8000个ANSI字符。
若不指定n值则系统默认值为1。
(2)nchar:
定义形式为nchar[(n)],它与char类型相似,不同的是nchar数据类型n的取值为1到4000。
(3)varchar:
用来定义可变长度的非unicode标准字符数据。
v定义形式为varchar[(n)],它与char类型相似n的取值也为1到8000,若输入的数据过长将会截掉其超出部分,不同的是varchar数据类型具有变动长度的特性,因为varchar数据类型的存储长度为实际数值长度,若输入数据的字符数小于n,则系统不会在其后添加空格来填满设定好的空间。
(3)nvarchar:
定义形式为nvarchar[(n)],与varchar类型相似。
6.文本数据类型
这类数据类型用于存储大量的字符
(1)text:
用来定义可变长度的非unicode数据,其最大长度为230-1个字节,用于存储大量文本数据。
(2)ntext:
与text类型相似,不同的是ntext类型采用unicode标准字符集,其最大长度为231-1个字节。
7.日期和时间数据类型
(1)datetime:
可以存储从公元1753年1月1日零时起到公元9999年12月31日23时59分59秒之间的所有日期和时间,其精确度可达三百分之一秒即3.33毫秒。
(2)smalldatetime:
与datetime数据类型相似,但其日期时间范围较小,为从1900年1月1日到2079年6月6日,精度较低,只能精确到分钟。
8.货币数据类型
货币数据类型用于存储货币值。
(1)MONEY:
有4位小数的DECIMAL值,其取值从-263到263-1,数据精度为万分之一货币单位,MONEY数据类型使用8个字节存储。
(2)smallmoney:
类似于money类型,但其存储的货币值范围比money数据类型小,其取值从-214,748.3648到214,748.3647存储空间为4个字节
9.用户自定义数据类型
用户定义的数据类型基于在MicrosoftSQLServer中提供的数据类型。
当几个表中必须存储同一种数据类型时,并且为保证这些列有相同的数据类型、长度和可空性时,可以使用用户定义的数据类型。
当创建用户定义的数据类型时,必须提供三个数:
数据类型的名称、所基于的系统数据类型和数据类型的可空性。
(1)创建用户定义的数据类型
创建用户定义的数据类型可以使用Transact-SQL语句。
系统存储过程sp_addtype可以来创建用户定义的数据类型。
其语法形式如下:
sp_addtype,[,system_data_bype][,'
null_type'
]
其中,type是用户定义的数据类型的名称。
system_data_type是系统提供的数据类型,例如decimal、int、char等等。
null_type表示该数据类型是如何处理空值的,必须使用单引号引起来,例如'
NULL'
、'
NOTNULL'
或者'
NONULL'
。
【例3.1】创建一个用户定义的数据类型ssn,其基于的系统数据类型是变长为11的字符,不允许空。
命令如下:
Execsp_addtypessn,'
varchar(11)'
'
NotNull'
【例3.2】创建一个用户定义的数据类型birthday,其基于的系统数据类型是datetime,允许空。
命令如下:
Execsp_addtypebirthday,datetime,'
Null'
(2)删除用户定义的数据类型
当用户定义的数据类型不需要时,可删除。
删除用户定义的数据类型的命令是sp_droptype。
【例3.3】假定用户已定义了一个数据类型ssn,则删除该数据类型的命令为:
Execsp_droptype'
ssn'
注意:
当表中的列还正在使用用户定义的数据类型时,或者在其上面还绑定有默认或者规则时,这种用户定义的数据类型不能删除。
(二)表的概念
表是数据存储的地方,在SQLServer中所有的数据存储都基于表,表是数据库中最重要的部分。
表由行和列组成。
表中的一行称为一条记录,表中的一列称为一个字段。
每个SQLServer数据库可容纳多达20亿个表,每个表中至多可以有1024列,每一行最多允许有8086个字节。
行数和表的大小只受服务器中可用存储空间的限制。
SQLServer2005的数据表可分为用户表和系统表两种类型。
用户表是数据库用户根据自己的设计创建的表,用于存放用户的数据,系统表则是SQLServer2005为实现数据库维护而创建的表,任何用户都不应该直接修改系统表,否则会导致数据库无法使用。
(三)数据表的创建
1.使用企业管理器创建表
在企业管理器中,可在表设计器中创建数据表,基本步骤包括打开表设计器、定义字段、定义主关键字和保存等。
在要创建表的数据库中选择“表”对象后,单击右键,从快捷菜单中选择“新建表”选项;
或在工具栏中选择图标,即会出现定义列对话框。
表设计器窗口分为上下两部分,上半部分用于定义字段的主要属性,包括列名、数据类型(将在后面具体介绍)、长度和允许空等,下半部分用于定义字段的特殊属性。
在此可以设定表的列名、数据类型、精度、缺省等属性。
在该对话框中可以定义字段。
下面列出了字段的各种属性的含义。
●列名:
定义字段名称,一个表中列名不能重复。
●数据类型:
指定字段的数据类型。
可以是系统数据类型或用户定义数据类型。
●长度:
定义字段可存放的数据的长度,单位为字节。
●允许空:
定义该字段值是否可以为NULL,也就是该字段是否可以不输入数据。
单击允许空单元格,出现一个选中标记,表示字段值允许为NULL,如果没有选中标记,则不允许为NULL。
表设计器的下半部分是特定列的详细属性,包括是否是标识列、是否使用默认值等。
●描述:
定义字段的说明信息。
●默认值:
定义字段的默认值。
如果在输入记录时没有指定该字段的值,便将该字段设置为默认值。
●精度:
定义decimal和numeric类型字段的最大数字个数。
其他数值类型的精度都是固定的。
●小数位数:
定义decimal和numeric类型字段的小数位数。
●标识:
定义是否允许字段自动编号,其值可以为“否”、或“是(不用于复制)”。
都表示允许字段自动编号,只是后者在通过复制方法添加数据时不自动编号。
●标识种子:
定义字段自动编号的初值,默认值为1。
●标识递增量:
定义字段自动编号的递增量,默认值为1。
●RowGuid:
设置uniqueidentifier类型字段是否由SQLServer自动产生一个全局惟一字段值。
如果该属性设置为“是”,则默认值自动设置为(newid())。
●公式:
定义计算字段的表达式。
在定义表达式时,字段名称应使用[]括起来,例如,[a]+[b]+10,其中a,b分别为字段名称。
●排序规则:
定义字段的排序规则。
●说明:
上述属性并不是对每一个字段都适用,不同数据类型的字段具有不同的属性。
如果该属性不适用于该字段,设计器将以灰色显示该属性,并且不允许用户修改。
2.使用Transact-SQL语句创建数据表
用CREATETABLE命令可以创建表。
其语法如下:
CREATETABLE[database_name.[owner].|owner.]table_name
(
{<
column_definition>
/*列的定义*/
|column_nameAScomputed_column_expression/*定义计算列*/
|<
table_constraint>
}/*指定表的约束*/
[ON{filegroup|DEFAULT}]/*指定存储表的文件组*/
[TEXTIMAGE_ON{filegroup|DEFAULT}]
/*指定存储text,ntext和image类型数据的文件组*/
})
说明:
<
:
:
=
{column_namedata_type}/*指定列明、类型*/
[COLLATE<
collation_name>
]/*指定排序规则*/
[[DEFAULTconstant_expression]/*指定默认值*/
|[IDENTITY[(seed,increment)[NOTFORREPLICATION]]]]
/*指定默认值*/
[ROWGUIDCOL]/*指定列为全局标识符列*/
[<
column_constraint>
][...n]/*指定列的约束*/
其中个别参数说明如下:
●databasename:
指定新建的表属于哪个数据库。
如果不指定数据库,databasename默认为当前数据库。
●owner:
指定数据库所有者的用户名。
默认为数据表创建者在数据库中的名称。
指定的数据表所有者必须在数据库中具有创建表权限,否则不能创建数据表。
●tablename:
指定新建的表的名称,最长不超过128个字符。
●columnname:
指定列的名称。
●computedcolumnexpression:
指定计算列(Computedcolumn)的列值的表达式
●ON{filegroup|DEFAULT}:
指定存储表的文件组名。
如果使用了DEFAULT选项或省略了ON子句,则新建的表会存储在默认文件组中。
●TEXTIMAGE_ON:
指定TEXT,NTEXT、和IMAGE列的数据存储的文件组。
如果无此子句,这些类型的数据就和表一起存储在相同的文件组中。
●data_type:
定义字段数据类型和长度,长度需要使用括号()括起来。
●constantexpression:
列缺省值的常量表达式,可以为一个常量或系统函数或NULL。
●IDENTITY:
定义字段标识属性,允许字段自动编号。
一个表中只能有一个IDENTITY列。
●Seed:
指定IDENTITY列的初始值。
●Increment:
指定IDENTITY列的增量。
●NOTFORREPLICATION:
指定列的IDENTITY属性在把从其已表中复制的数据插入到表中时不发生作用,即不足的生成列值,使得复制的数据行保持原来的列值。
一个表至少有一列,但最多不超过1024个列;
每个数据库中最多可以创建200万个表;
表在存储时使用的计量单位是盘区(Extent)。
一个盘区分为8个数据页,每页8KB字节。
在创建新表时,会分配给它一个初始只为一个盘区的存储空间。
当增加表的存储空间时,以盘区为单位增加。
(一)按照任务要求创建product(产品信息)表
方法一:
利用企业管理器实现
其操作步骤如下:
1.打开SQLServer企业管理器。
2.展开companyinfo数据库节点,用鼠标右击“表”对象,在打开的快捷菜单中执行【新建表】命令。
3.在打开的“表设计器”对话框中,依次设定表的列名、数据类型、精度、缺省等属性,本任务中,将“产品ID”字段设置为主键,其方法是选中“产品ID”,单击工具栏上的钥匙型的“设置主键”按钮。
4.定义完成各字段后,单击工具栏中的保存按钮,即出现的对话框。
输入表名“product”后,单击“确定”按钮。
当创建表时,必须指定表名、列名以及数据类型。
同一个表中,列名不能重复,但是,同一个数据库中不同表的列名称可以相同。
并必须为每个列都指定数据类型。
5.在企业管理器中,选种companyinfo数据库的“表”节点,可看到有product表存在。
方法二:
利用Transact-SQL语句创建实现
操作步骤:
1.在打开的“SQLServer企业管理器”窗口中,执行【工具】|【查询分析器】命令,打开“查询分析器”窗口。
2.连接数据库:
在“查询分析器”窗口的工具栏的下拉列表中,选中companyinfo数据库。
3.在查询分析器的查询窗口中输入如下:
CREATETABLEproduct(
产品IDintprimarykey,
产品名char(10)notnull,
类别IDint,
单价money
库存量int
)
4.单击工具栏的“”按钮,将显示“命令已成功完成”。
5.检查表是否已创建表。
在查询分析器的查询窗口中输入如下命令:
EXECsp_helpproduct
(二)按照任务2要求创建companyinfo数据库的其它数据表。
按照任务2要求,本任务中的四个表均利用Transact-SQL语句创建,其操作步骤同任务1中方法二,这里只给出相应的命令。
1.创建表名为“p_order”的产品订单表的命令如下:
CREATETABLEp_order(
订单IDintprimarykey,
产品IDint,
数量int,
雇员IDint,
客户IDint,
订货日期datetime
GO
2.创建表名为“employee”的产品信息表的命令如下:
CREATETABLEemployee(
雇员IDintprimarykey,
姓名varchar(8),
性别char
(2),
出生日期datetime,
雇佣日期datetime,
特长varchar(20),
薪水money
3.创建名为“customer”的客户表和名为“category”的类别表的命令如下:
CREATETABLEcustomer(/*创建客户表customer*/
客户IDintprimarykey,
公司名称varchar(30),
联系人姓名varchar(8),
联系方式varchar(12),
地址varchar(30),
邮编char(6)
CREATETABLEcategory(/*创建类别表category*/
类别IDintprimarykey,
类别名varchar(10),
说明varchar(16)
(三)按照任务3的要求,创建名称为DIAGRAM_p_order_product的数据库关系图,从而实现p-order表和product表间的关联。
利用企业管理器实现
操作步骤如下:
1.打开企业管理器,展开companyinfo数据库。
2.用鼠标右击companyinfo数据库的“关系图”节点,在打开的快捷菜单中,执行【新建数据库关系图】命令。
此时出现创建数据库关系图向导窗口,这个向导有助于选择主键表和外键表。
3.关闭创建数据库关系图向导,进入数据库关系图创建窗口。
4.在数据库关系图创建窗口的工具拦中,单击“在关系图上添加表”按钮。
将打开“添加表”对话框。
5.在“添加表”对话框中,选择主键表product表,并单击“添加”按钮,再选择外键表p_oreder表,并单击“添加”按钮。
然后关闭“添加表”对话框。
此时,在数据库关系图创建窗口中出现了这两个表。
6.将鼠标移动到product表中的“产品ID”左边的选择栏,单击左键,并将鼠标指针拖动到p_oreder表中的“产品ID”字段上。
7.松开鼠标左键,此时弹出“创建关系”对话框。
根据需要决定是否选择对话框中的如下选项。
其含义如下:
●创建中检查现存数据:
在创建关联时,检查外键表与主键表关联字段的数据是否一致。
如果外键表关联字段的数据在主键表关联字段中找不到,则不能创建关系。
●对复制强制关系:
设置在将数据复制到外键表中时,是否使用该关联来检查数据的有效性。
●对INSERT和UPDATE强制关系:
设置对在外键表中插入、删除或更新的数据是否检查关联字段数据的有效性。
如果外键表中存在匹配行,还将禁止删除主表的行。
●级联更新相关的字段:
设置在修改主键值时,是否自动更新该关系的外键值。
●级联删除相关的记录:
设置在删除主键表中记录时,是否自动删除外键表中关联记录。
8.设置完这些选项后,单击“确定”按钮,关闭“创建关系”对话框。
此时创建数据库关系图窗口