数据库数据类型设置

上传人:新** 文档编号:592809491 上传时间:2024-09-22 格式:PPT 页数:162 大小:1.14MB
返回 下载 相关 举报
数据库数据类型设置_第1页
第1页 / 共162页
数据库数据类型设置_第2页
第2页 / 共162页
数据库数据类型设置_第3页
第3页 / 共162页
数据库数据类型设置_第4页
第4页 / 共162页
数据库数据类型设置_第5页
第5页 / 共162页
点击查看更多>>
资源描述

《数据库数据类型设置》由会员分享,可在线阅读,更多相关《数据库数据类型设置(162页珍藏版)》请在金锄头文库上搜索。

1、第第4章章数据表的创立与操作数据表的创立与操作4.1数据类型数据类型4.2运算符与表达式运算符与表达式4.3系统内置函数系统内置函数4.4用企业管理器创立数据表及约束对象用企业管理器创立数据表及约束对象4.5用用T-SQL语句创立数据表及约束对象语句创立数据表及约束对象4.6查看表信息、输入数据、编辑和删除记录查看表信息、输入数据、编辑和删除记录4.7数据表及约束对象的删除数据表及约束对象的删除4.8数据库应用实例数据库应用实例?电脑器材销售管理电脑器材销售管理?的数据表的数据表4.9实训要求与习题实训要求与习题第第4章章数据表的创立与操作数据表的创立与操作学习目的与要求数据表是数据库中最重要

2、的对象,数据库的全部数据都存储在不同的数据表中,因而数据表的设计成功与否是数据库设计的关键,将直接影响到数据库使用的合理有效。了解SQLServer数据库系统,掌握数据表的数据类型、运算符与表达式、常用系统函数是创立数据库必备的根底知识。数据表及约束对象的创立以及数据的输入更新是创立数据库的重要环节。通过本章学习,读者应熟悉并掌握SQLServer数据库的数据类型、表达式和常用内置函数,掌握数据表及约束对象的创立、修改、删除以及数据的输入、更新、删除等操作,独立创立?电脑器材销售管理?diannaoxs数据库的各个数据表。4.1数据类型数据类型数据类型决定了数据的存储格式、长度、精度等属性。数

3、据类型决定了数据的存储格式、长度、精度等属性。SQLServer为我们提供了多达为我们提供了多达26种的丰富数据类型,用户还可以自种的丰富数据类型,用户还可以自己定义数据类型见第己定义数据类型见第7章。章。4.1.1、二进制数据、二进制数据SQLServer用用binary、varbinary和和image三种数据类型来存三种数据类型来存储二进制数据。二进制类型可用于存储声音图像等数字类型的储二进制数据。二进制类型可用于存储声音图像等数字类型的数据。数据。1、定长二进制、定长二进制binary(n)按按n个字节的固定长度存放二进制数据,最大长度为个字节的固定长度存放二进制数据,最大长度为8K字

4、节,字节,即即1n8000。假设实际数据缺乏假设实际数据缺乏n个字节,那么在数据尾部加个字节,那么在数据尾部加0补足补足n个字节。个字节。2、变长二进制、变长二进制varbinary(n)按不超过按不超过n个字节的实际长度存放二进制数据,最大长度个字节的实际长度存放二进制数据,最大长度8K字节,即字节,即1n8000。假设实际数据缺乏假设实际数据缺乏n个字节,按实际长度存储数据,不补充加个字节,按实际长度存储数据,不补充加0;3、图像二进制、图像二进制Image图图像像二二进进制制可可存存储储不不超超过过231-1个个字字节节的的二二进进制制数数据据,比比方方文文本本文文档档、Excel图图表

5、表以以及及图图像像数数据据包包括括.GIF、.BMP、.JPEG文件等。文件等。注意:注意:l二二进进制制数数据据常常量量不不允允许许加加引引号号,默默认认用用十十进进制制书书写写,如如1234、1011均均视视为为十十进进制制常常量量,如如果果使使用用十十六六进进制制那那么么必须加必须加0x前缀。输出显示默认采用十六进制。前缀。输出显示默认采用十六进制。l假假设设实实际际数数据据二二进进制制长长度度超超过过指指定定的的n个个字字节节,用用局局部部变变量量存存储储时时只只截截取取二二进进制制的的前前n个个字字节节,其其余余二二进进制制位位舍舍掉。掉。l数数据据库库中中二二进进制制字字段段的的数

6、数据据不不能能在在数数据据表表中中直直接接输输入入,即即“无法编辑该单元。无法编辑该单元。l在在用用INSERT或或UPDATE为为数数据据表表二二进进制制字字段段输输入入、更更新新数数据据时时,如如果果超超过过n字字节节,那那么么系系统统提提示示“将将截截断断字字符符串或二进制数据并终止命令执行,不能保存该数据。串或二进制数据并终止命令执行,不能保存该数据。【例4-1】二进制数据1aa2bb3cc4共40位5个字节,可表示为0x1aa2bb3cc4假设定义数据类型为binary(6)那么数据后加0按6字节存储为:0x1aa2bb3cc400假设定义数据类型为varbinary(6)那么按实际

7、数据存储为:0x1aa2bb3cc4假设定义数据类型为binary(4)或varbinary(4),那么在局部变量中存储为:0x1aa2bb3c。存储到数据表字段中时,系统提示“将截断字符串或二进制数据不能保存该数据。、数值型数据、数值型数据 SQLServer数值型数据共数值型数据共8种,整型种,整型4种,实型种,实型4种。种。1字节型整数字节型整数TinyInt占占1个字节固定长度内存,可存储个字节固定长度内存,可存储0-255范围内的任意无符号整数。范围内的任意无符号整数。2短整型整数短整型整数smallInt占占2字节固定长度内存,最高位为符号位,可存储字节固定长度内存,最高位为符号位

8、,可存储-3276832767-215215-1的任意整数。的任意整数。3根本整型整数根本整型整数Int或或Integer占占4字节固定长度内存,高位为符号位,可存储字节固定长度内存,高位为符号位,可存储-2147483648-2147483647-231-231-1范围内的任意整数。范围内的任意整数。4长整型整数长整型整数Bigint占占8字节固定长度内存,高位为符号位,可存储字节固定长度内存,高位为符号位,可存储-263到到263-1范围内的范围内的任意整据。任意整据。注意:整型数据可以在较少字节里存储精确的整型数字,存储效率高,注意:整型数据可以在较少字节里存储精确的整型数字,存储效率高

9、,不可能出现小数的数据应尽量选用整数类型。不可能出现小数的数据应尽量选用整数类型。5 5近似值实型浮点数近似值实型浮点数 real real 占占4 4字字节节固固定定长长度度内内存存,最最多多7 7位位有有效效数数字字,范范围围从从- -3.40E+383.40E+38到到1.79E+381.79E+38。6 6可变精度实型浮点数可变精度实型浮点数 float(n) float(n)l l当当n n的的取取值值为为1-241-24时时,数数据据精精度度是是7 7位位有有效效数数字字,范范围围从从-3.40E+38-3.40E+38到到1.79E+381.79E+38,占,占4 4字节内存。字

10、节内存。l l当当n n的的取取值值为为25-5325-53时时,精精度度是是1515位位有有效效数数字字,范范围围从从-1.79E+308-1.79E+308到到1.79E+3081.79E+308,占,占8 8字节内存。字节内存。l l实实型型浮浮点点数数常常量量可可以以直直接接使使用用科科学学记记数数法法的的指指数数形形式式书写。书写。7 7精确小数型数据精确小数型数据 Numeric(p,s) Numeric(p,s)l l pp指指定定总位位数数不不含含小小数数点点,pp的的取取值范范围1p38。即即最最多多可可达达3838位位有有效效数数字字,不不使使用用指指数数的的科科学学记数数

11、法法表表示示,但取但取值范范围必必须在在-1038-1038到到1038-11038-1之之间。l l s s指定其中的小数位数,指定其中的小数位数,s s的取的取值范范围0sp。l l numericnumeric型型数数据据在在数数据据表表里里可可带identityidentity关关键字自字自动增增长字段。字段。l l numericnumeric型型数数据据所所占占的的存存储空空间随随精精度度的的不不同同而而不不同,一般同,一般说来来对应关系关系为: pp的的取取值范范围 数数据据所所占占内内存存字字节数数 1 1 - - 9 9 5 5 10-19 10-19 99 20-28 20

12、-28 1313 29-38 29-38 171788精精确确小小数数型型数数据据 Decimal(p,s) Decimal(p,s) 或或 Dec(p,s)Dec(p,s)该类型型数数据据与与Numeric(p,s)Numeric(p,s)类型型用用法法相相同同,所所不不同同 的的 是是 Decimal(p,s)Decimal(p,s)不不 能能 用用 于于 数数 据据 表表 的的identityidentity字段。字段。 8 8精确小数型数据精确小数型数据 Decimal(p,s) Decimal(p,s) 或或 Dec(p,s)Dec(p,s) 该类型数据与该类型数据与Numeric(

13、p,s)Numeric(p,s)类型用法相同,所不同的是类型用法相同,所不同的是Decimal(p,s)Decimal(p,s)不能用于数据表的不能用于数据表的identityidentity字段。字段。字符型数据字符型数据 SQLServer提供了Char(n)、Varchar(n)和Text三种ASC码字符型数据。1定长字符型Char(n)按n个字节的固定长度存放字符串,每个字符占用一个字节,长度范围1n8000;假设实际字符串长度小于n,那么尾部填充空格按n个字节的字符串存储。2变长字符型Varchar(n)按不超过n个字节的实际长度存放字符串,可指定最大长度为1n8000;假设实际字符

14、串长度小于n,那么按字串实际长度存储,不填充空格。当存储的字符串长度不固定时,使用Varchar数据类型可以有效地节省空间。3 3文本类型文本类型 Text Text TextText类类型型存存储储的的是是可可变变长长度度的的字字符符数数据据类类型型,最最大大长长度度为为231-1231-1字字节节2GB2GB的的数数据据。当当存存储储超超过过80008000字字节节时时,可可选选择择TextText数据类型。数据类型。ll字字符符型型数数据据采采用用ASCASC码码字字符符集集,英英文文符符号号占占1 1个个字字节节,汉汉字占字占2 2个字节。个字节。ll字符型字符串常量必须使用单引号括起

15、来。字符型字符串常量必须使用单引号括起来。lCharlChar、VarcharVarchar数据类型假设不指定长度,默认为数据类型假设不指定长度,默认为1 1字节。字节。ll假假设设实实际际字字符符串串长长度度超超过过指指定定的的n n个个字字节节,用用局局部部变变量量存储时只截取字符串前存储时只截取字符串前n n个字节,其余字符舍掉。个字节,其余字符舍掉。ll字字符符型型字字符符串串数数据据可可以以在在企企业业管管理理器器中中直直接接输输入入到到数数据据表表中中,但但输输入入的的字字符符串串长长度度超超过过字字段段指指定定长长度度时时系系统统不不接接受,也不会自动截取。受,也不会自动截取。l

16、l在在用用INSERTINSERT或或UPDATEUPDATE为为数数据据表表字字符符型型字字段段输输入入、更更新新字字符符串串时时,如如果果超超过过n n字字节节那那么么系系统统提提示示“将将截截断断字字符符串串或或二二进制数据并终止命令执行,不能保存该数据。进制数据并终止命令执行,不能保存该数据。【例4-2】字符型字符串abcdABCD我们学习共12个字符占16字节。假设定义数据类型为char(20)那么存储为:abcdABCD我们学习假设定义数据类型为varchar(20)那么按实际长度存储为:abcdABCD我们学习假设定义数据类型为char(10)或varchar(10),那么在局部

17、变量中存储为:abcdABCD我存储到数据表字段中时,系统提示“将截断字符串或二进制数据不能保存该数据。统一字符型数据 统统一一字字符符型型也也称称为为宽宽字字符符型型,采采用用UnicodeUnicode字字符符集集,包包括括了了世世界界上上所所有有语语言言符符号号,一一个个英英文文符符号号或或一一个个汉汉字字都都占用占用2 2个字节的内存。前个字节的内存。前127127个字符为个字符为ASCASC码字符。码字符。 SQL SQL ServerServer提提供供了了Nchar(n)Nchar(n)、Nvarchar(n)Nvarchar(n)和和NtextNtext三三种统一字符型数据。种

18、统一字符型数据。1 1定长统一字符型定长统一字符型 Nchar(n) Nchar(n) 按按n n个个字字符符的的固固定定长长度度存存放放字字符符串串,每每个个字字符符占占用用2 2个个字节,长度范围字节,长度范围1n40001n4000; 假假设设实实际际字字符符个个数数小小于于最最大大长长度度n n,那那么么尾尾部部填填充充空空格格按按n n个字符存储。个字符存储。2 2变长统一字符型变长统一字符型 Nvarchar(n) Nvarchar(n) 按按不不超超过过n n个个字字符符的的实实际际长长度度存存放放字字符符串串,可可指指定定最最大大字符数为字符数为1n40001n4000; 假假

19、设设实实际际字字符符个个数数小小于于n n,那那么么按按字字符符串串实实际际长长度度占占用用存储空间,不填充空格。存储空间,不填充空格。3 3统一字符文本类型统一字符文本类型 Ntext Ntext NtextNtext存存储储的的是是可可变变长长度度的的双双字字节节字字符符数数据据类类型型,最最多多可可以以存存储储230-1230-1/2/2个字符。个字符。ll统一字符型数据长度统一字符型数据长度n n为为“字符个数,所占字节数为字符个数,所占字节数为2*n2*n。ll统一字符型字符串常量必须使用单引号括起来。统一字符型字符串常量必须使用单引号括起来。lNcharlNchar、Nvarcha

20、rNvarchar数数据据类类型型假假设设不不指指定定长长度度n n,默默认认为为1 1个个字字符符2 2个字节。个字节。ll假假设设实实际际字字符符串串长长度度超超过过指指定定的的n n个个字字符符,用用局局部部变变量量存存储储时时只只截取字符串前截取字符串前n n个字符,其余字符舍掉。个字符,其余字符舍掉。ll统统一一字字符符型型数数据据可可以以在在企企业业管管理理器器中中直直接接输输入入到到数数据据表表中中,但但输入的字符个数超过字段长度时那么系统不接受。输入的字符个数超过字段长度时那么系统不接受。ll在在用用INSERTINSERT或或UPDATEUPDATE为为数数据据表表统统一一字

21、字符符型型字字段段输输入入、更更新新字字符符串串时时,假假设设超超过过n n个个字字符符那那么么系系统统提提示示“将将截截断断字字符符串串或或二二进进制制数数据并终止命令执行,不能保存该数据。据并终止命令执行,不能保存该数据。【例4-3】字符串abcdABCD我们学习作为统一字符型共12个字符占24字节。假设定义数据类型为Nchar(14)那么存储为:abcdABCD我们学习假设定义数据类型为Nvarchar(14)那么按实际字符数存储为:abcdABCD我们学习假设定义数据类型为Nchar(10)或Nvarchar(10),那么在局部变量中存储为:abcdABCD我们存储到数据表字段中时,系

22、统提示“将截断字符串或二进制数据不能保存该数据。日期日期/ /时间型数据时间型数据SQLServer提供的日期/时间数据类型可存储日期和时间的组合数据。以日期/时间类型存储日期或时间数据比字符型更简单,因为SQLServer提供了一系列专门处理日期和时间的函数来处理这类数据。假设使用字符型存储日期和时间,计算机不能识别,也不能自动对这些数据按照日期和时间进行处理。SQLServer提供了Smalldatetime和Datetime两种日期/时间的数据类型。1短日期/时间型Smalldatetime占4个字节固定长度的内存,存放1900年1月1日到2079年6月6日的日期时间,可以精确到分。2

23、2根本日期根本日期/ /时间型时间型 Datetime Datetime 占占8 8个个字字节节固固定定长长度度的的内内存存,存存放放17531753年年1 1月月1 1日日到到99999999年年1212月月3131日的日期时间,可以精确到千分之一秒,即日的日期时间,可以精确到千分之一秒,即0.001s0.001s。 注意:注意:ll日日期期时时间间型型常常量量与与字字符符串串常常量量相相同同必必须须使使用用单单引引号号括括起起来。来。lSQL lSQL ServerServer在在用用户户没没有有指指定定小小时时以以下下精精确确的的时时间间数数据据时时,自动设置自动设置DatetimeDa

24、tetime或或SmalldatetimeSmalldatetime数据的时间为数据的时间为00:00:0000:00:00。ll数数据据库库中中默默认认的的日日期期格格式式为为“年年- -月月- -日日,输输入入时时可可使使用用年年/ /月月/ /日日或或年年- -月月- -日日,也也可可以以使使用用月月/ /日日/ /年年、月月- -日日- -年年、日日/ /月月/ /年年或或日日- -月月- -年年。ll如如果果使使用用日日/ /月月/ /年年或或日日- -月月- -年年,系系统统不不能能区区分分时默认按时默认按“月月- -日日- -年处理。年处理。货币型数据货币型数据SQLServer

25、提供了提供了Smallmoney和和Money两种货币型数据。两种货币型数据。1短货币型短货币型Smallmoney该类型占该类型占4个字节固定长度的内存,实际是由个字节固定长度的内存,实际是由2个个2字节的整数构成,前字节的整数构成,前2个字节为货币值的整数局部,后个字节为货币值的整数局部,后2个字节为货币值的小数局部。货币值的个字节为货币值的小数局部。货币值的范围从范围从-214748.3648到到+214748.3647,可以精确到万分之一货币单位。,可以精确到万分之一货币单位。2根本货币型根本货币型Money该类型占该类型占8个字节固定长度的内存,由个字节固定长度的内存,由2个个4字节

26、的整数构成,前字节的整数构成,前4个字节个字节为货币值的整数局部,后为货币值的整数局部,后4个字节表示货币值的小数局部。货币值的范围个字节表示货币值的小数局部。货币值的范围从从-263到到263-1,可精确到万分之一货币单位。,可精确到万分之一货币单位。Money或或Smallmoney类型的数值常量,应加货币符号类型的数值常量,应加货币符号$前缀,负数时加前缀,负数时加后缀后缀$。如:如:$222.222,-333.333$位类型数据位类型数据 bit bit l l 位位类型只能存放型只能存放00、11和和NULL(NULL(空空值),一般用于,一般用于逻辑判断。判断。l l 位位类型数据

27、占型数据占11位二位二进制内存,如果一个数据表中有制内存,如果一个数据表中有88个以下的位个以下的位类型字段,系型字段,系统用一个字用一个字节存存储所有所有这些字段,些字段,超超过88个缺乏个缺乏1616个用个用2 2个字个字节存放。存放。l l 位位类型数据型数据输入任意的非入任意的非00值时,都按,都按11处理。理。 SQL Server SQL Server 常用数据常用数据类型型见表表4.14.1。其他特殊数据类型其他特殊数据类型1 1、TimestampTimestamp: 也称为时间戳数据类型,它提供数据库范围内的惟一值,也称为时间戳数据类型,它提供数据库范围内的惟一值,反响数据库

28、中数据修改的相对顺序,相当于一个单调上升反响数据库中数据修改的相对顺序,相当于一个单调上升的计数器。的计数器。 2 2、UniqueidentifierUniqueidentifier: 用于存储用于存储1616字节长度的二进制数据类型,是字节长度的二进制数据类型,是SQL ServerSQL Server根据计算机网络适配器地址和根据计算机网络适配器地址和CPUCPU时钟而产生的全局惟一标时钟而产生的全局惟一标识符代码识符代码Globally Unique IdentifierGlobally Unique Identifier,简写为,简写为GUIDGUID。3 3、sql_variant

29、sql_variant: 用于存储除文本、图形数据和用于存储除文本、图形数据和timestamptimestamp类型数据外的其类型数据外的其它任何合法的它任何合法的SQL ServerSQL Server数据。数据。4 4、tabletable: 用于存储对表或者视图处理后的结果集。这种新的数据用于存储对表或者视图处理后的结果集。这种新的数据类型使得用一个变量可以存储一个表,从而使函数或过程类型使得用一个变量可以存储一个表,从而使函数或过程返回查询结果更加方便、快捷。返回查询结果更加方便、快捷。图像、文本型数据的存储方式图像、文本型数据的存储方式 存存储储文文本本、图图像像等等大大型型数数据

30、据时时,可可使使用用TextText、NtextNtext和和ImageImage三三种种数数据据类类型型,这这三三种种数数据据类类型型的的数数据据量量往往往往比比较较大大,在在SQL SQL Server Server 7.07.0以以前前的的版版本本中中,文文本本和和图图像像数数据据被被存存储储在在专专门门的的页页中中,在在数数据据行行的的相相应应位位置置只只保存指向这些数据的指针。保存指向这些数据的指针。 SQL SQL Server Server 20002000提提供供了了将将小小型型文文本本或或图图像像数数据据直直接接在在行行中中存存储储的的功功能能,不不需需要要到到另另外外的的页

31、页中中访访问问这这些些数数据据,使使得得读读写写文文本本和和图图像像数数据据可可以以与读写普通字符串一样快。与读写普通字符串一样快。 使使用用系系统统存存储储过过程程sp_tableoptionsp_tableoption可可以以指指定定文文本本或或图图像像数数据据是是否否在在表表的行中存储。的行中存储。 语法格式:语法格式: sp_tableoption sp_tableoption 表名表名,text in row,TRUE|FALSE,text in row,TRUE|FALSE图像、文本型数据的存储方式图像、文本型数据的存储方式说明:说明:l l 当当指指定定“TRUE“TRUE选选项

32、项时时,允允许许小小型型文文本本或或图图像像数数据据直直接接在在该该表表的的行行中中存存储储,而而且且还还可可以以指指定定文文本本或或图图像像数数据据大大小小的上限值的上限值24-700024-7000字节,默认上限字节,默认上限256256字节。字节。ll当当数数据据的的大大小小不不超超过过上上限限值值而而且且同同时时数数据据行行有有足足够够空空间间时,文本和图像数据就会直接存储在行中。时,文本和图像数据就会直接存储在行中。ll假假设设以以上上两两个个条条件件有有一一个个不不满满足足时时,行行中中仍仍只只存存放放指指向向数据存储位置的指针。数据存储位置的指针。【例例4-44-4】在在当当前前

33、数数据据库库中中创创立立数数据据表表exampleexample,字字段段bin_1bin_1存存放放TEXTTEXT类类型型数数据据,bin_2bin_2存存放放NTEXTNTEXT类类型型数数据据,bin_3bin_3存存放放ImageImage类型数据。类型数据。CREATE CREATE TABLE TABLE example(bin_1 example(bin_1 text,bin_2 text,bin_2 ntext,bin_3 ntext,bin_3 ntext Image)ntext Image)GoGo /* /* 以以下下语语句句指指定定不不大大于于10001000字字节节

34、的的文文本本或或图图像像数数据据在在行行中存储中存储 */ */sp_tableoption example, text in row, TRUEsp_tableoption example, text in row, TRUEsp_tableoption example ,text in row, 1000sp_tableoption example ,text in row, 1000 /* /* 以以下下语语句句指指定定MytableMytable表表不不在在行行中中存存储储文文本本和和图图像像数数据据 */ */sp_tableoption Mytable , text in row,

35、 FALSEsp_tableoption Mytable , text in row, FALSE、局部变量的定义与输出、局部变量的定义与输出 本本书书在在第第7 7、8 8章章将将专专门门详详细细介介绍绍T-SQLT-SQL的的程程序序设设计计、批批处处理理、局局部部变变量量、自自定定义义类类型型和和函函数数、游游标标、存存储储过过程程与与触触发发器器,但但在在前前几几章章也也许许会会用用到到批批处处理理及及局局部部变变量量的的概念,为此我们先简单介绍一下有关的知识。概念,为此我们先简单介绍一下有关的知识。1 1、批处理、批处理 批批处处理理是是一一个个或或多多个个SQLSQL语语句句的的集

36、集合合,构构成成一一个个独独立立的的程程序序模模块块,以以GOGO语语句句为为结结束束标标志志。从从程程序序开开头头或或从从某某一一个个GOGO语句开始到下一个语句开始到下一个GOGO语句或程序结束为一个批处理。语句或程序结束为一个批处理。2 2、局部变量、局部变量 局局部部变变量量是是用用户户自自定定义义的的变变量量,用用于于临临时时存存储储各各种种类类型的数据。型的数据。3 3、定义局部变量、定义局部变量 语法格式:语法格式: DECLARE DECLARE 变量名变量名 数据类型数据类型(长度长度) ) ,n n 例如:例如:DECLARE x int , s decimal(8.4)D

37、ECLARE x int , s decimal(8.4) 注意:注意:l l局局部部变变量量必必须须以以 开开头头以以区区别别字字段段名名变变量量。固固定定长长度度的的类类型不需要指定长度。型不需要指定长度。l l局局部部变变量量只只在在一一个个批批处处理理内内有有效效,其其生生命命周周期期从从定定义义开开始到它遇到的第一个始到它遇到的第一个GOGO语句或者到程序结束。语句或者到程序结束。4 4、局部变量的赋值、局部变量的赋值 语法格式:语法格式: SET SET 局部变量局部变量= =表达式表达式5 5、显示输出局部变量、显示输出局部变量 语法格式:语法格式: PRINT PRINT 局部

38、变量或表达式局部变量或表达式4.2 4.2 运算符与表达式运算符与表达式、算术运算符与表达式、算术运算符与表达式 算术运算符:算术运算符: +( +(加加) )、-(-(减减) )、*(*(乘乘) )、/(/(除除) )、%(%(取模求余取模求余) )。、逻辑类运算符与逻辑值表达式、逻辑类运算符与逻辑值表达式SQL逻辑值表达式都是作为判断条件使用的,取值为:lTRUE:真,条件成立lFALSE:假,条件不成立lUNKNOWN:不确定,是某个数据与NULL比较的结果在数据库中,NULL是一个不知道或不能确定的专用数据值,它不等于数值0和字符的空格。某个数据与NULL进行比较运算的逻辑值就是UNK

39、NOWN,因为大家对使用UNKNOWN都不习惯,所以大多数SQL版本都提供了专门的空值运算符“ISNULL,用于判断是否是空值NULL。例如:假设“职称的内容为NULL,假设有条件表达式:职称=讲师那么该表达式的值不是true或false而是unknown。SQLServer2000提供了由7类运算符组成的逻辑值条件表达式。1 1、比较运算符、比较运算符 ( (大于大于) )、=(=(大于等于大于等于) )、 ( (小于小于) )、= (= (小于等于小于等于) ) =( =(等于等于) )、或或!=(!=(不等于不等于) )、!(!(不大于不大于) )、!(! 500 500 那那么么单单价

40、价大大于于500500条条件件为为TRUETRUE,单单价价不不大大于于500500条条件件为为FALSEFALSE 销售单价销售单价- -进价进价=销售单价销售单价/2 /2 那么毛利润大于等于一半时条件为真那么毛利润大于等于一半时条件为真2 2、逻辑运算符、逻辑运算符 not ( not (逻辑非逻辑非) )、 and ( and (逻辑与逻辑与) )、 or ( or (逻辑或逻辑或) ) 逻辑条件表达式:逻辑条件表达式: not not 逻辑值表达式逻辑值表达式 逻辑值表达式逻辑值表达式1 and 1 and 逻辑值表达式逻辑值表达式2 2 逻辑值表达式逻辑值表达式1 or 1 or

41、逻辑值表达式逻辑值表达式2 2 如如:notnot单单价价 500 500 那那么么单单价价不不大大于于500500条条件件为为真真,等等价于:单价价于:单价 = 500 =1000=1000 那那么么只只有有孙孙立立华华收收到到的的商商品品中中进进价价大大于于等等于于10001000时时条条件件才为真才为真 如:单价如:单价=500 or =500 or 单价单价=1000 =1000 那那么么单单价价等等于于500500或或者者等等于于10001000,只只要要满满足足一一个个条条件件就就为为真真2 2、逻辑运算符、逻辑运算符 在在逻逻辑辑运运算算中中,逻逻辑辑值值UNKNOWN(UNKN

42、OWN(不不确确定定) )可可以以看看成成是是介介于于真真假假之之间间的的中立值,既不是真也不是假,不真不假就是不确定。中立值,既不是真也不是假,不真不假就是不确定。 如如果果把把TRUE TRUE UNKNOWN UNKNOWN FALSEFALSE这这三三者者的的关关系系理理解解为为由由高高级级低低级,就比较好理解三者的逻辑运算结果了。级,就比较好理解三者的逻辑运算结果了。ANDAND运算:结果取低级的运算:结果取低级的 TRUE AND UNKOWN TRUE AND UNKOWN 结果结果UNKOWNUNKOWN UNKOWN AND UNKOWN UNKOWN AND UNKOWN

43、结果结果UNKOWNUNKOWN FALSE AND UNKOWN FALSE AND UNKOWN 结果结果FALSEFALSEOROR运算:结果取高级的运算:结果取高级的 TRUE OR UNKOWN TRUE OR UNKOWN 结果结果TRUETRUE UNKOWN OR UNKOWN UNKOWN OR UNKOWN 结果结果UNKOWNUNKOWN FALSE OR UNKOWN FALSE OR UNKOWN 结果结果UNKOWNUNKOWNNOTNOT运算:结果取相反的运算:结果取相反的 NOT TRUE NOT TRUE 结果结果FALSE FALSE NOT UNKOWN

44、NOT UNKOWN 结果结果UNKOWNUNKOWN NOT FALSE NOT FALSE 结果结果TRUETRUE3 3、范围运算符、范围运算符 not between and not between and 条条件件表表达达式式:表表达达式式 not not between between 起起始始值值 and and 终终止止值值 between between andand用用于于判判断断表表达达式式的的值值是是否否在在某某个个范范围围内内,假假设设在在指指定定范范围围内内条条件件为为真真,不不在在指指定定范范围围内内条条件件为为假。等价于:假。等价于: 表达式表达式=起始值起始值

45、 and and 表达式表达式=终止值终止值 即:起始值即:起始值=表达式表达式=终止值终止值 not not between between andand判判断断表表达达式式的的值值是是否否不不在在某某个个范范围围内,假设不在指定范围内条件为真,否那么为假。等价于:内,假设不在指定范围内条件为真,否那么为假。等价于: 表达式表达式 终止值终止值 即:表达式小于起始值或大于终止值条件为真即:表达式小于起始值或大于终止值条件为真 如:如:X between 5 and 10 X between 5 and 10 那么那么X=5X=5且且X=10X=10条件为真,条件为真,X5X10X10为假。为

46、假。 X not between 5 and 10 X not between 5 and 10 那么那么X5X10X10条件为真,条件为真,X=5X=5且且X=10X=10为假。为假。 注注意意:betweenbetween所所选选取取的的数数据据范范围围包包括括边边界界值值,not not betweenbetween那么不包括边界值,那么不包括边界值,notnot实际上就是逻辑非运算符。实际上就是逻辑非运算符。 4 4、多值列表运算符、多值列表运算符 notin()条件表达式:条件表达式:not表达式表达式in(值值1,值值2,值值n)in()用于判断表达式的值是否等于所给出的值之一,用

47、于判断表达式的值是否等于所给出的值之一,只要与其中任何一个值相等条件就为真,全部都不相等只要与其中任何一个值相等条件就为真,全部都不相等为假。为假。Notin()表示判断表达式的值是否全部不等于所给表示判断表达式的值是否全部不等于所给出的值,所有的值一个也不相等条件为真,只要有一个出的值,所有的值一个也不相等条件为真,只要有一个相等为假。相等为假。如:如:Xin(1,3,5)那么相当于逻辑表达式:那么相当于逻辑表达式:X=1orX=3orX=5。如:如:notXin(1,3,5)那么相当于逻辑表达式:那么相当于逻辑表达式:X1andX3andX5。5 5、用于子查询的运算符、用于子查询的运算符

48、1列表比较运算符列表比较运算符ANY|ALL列表运算符列表运算符ANY与包含运算符与包含运算符in功能大致相同,但功能大致相同,但IN可以独立使用,可以独立使用,而而ANY必须与比较运算符配合使用;必须与比较运算符配合使用;in只是比较相等包含,只是比较相等包含,ANY可可进行任何比较。进行任何比较。列表比较的条件表达式格式:列表比较的条件表达式格式:表达式表达式比较运算符比较运算符ANY(子查询的一列值子查询的一列值)表达式表达式比较运算符比较运算符ALL(子查询的一列值子查询的一列值)该条件将表达式与子查询返回的一整列值按给定的比较运算符逐一比较:该条件将表达式与子查询返回的一整列值按给定

49、的比较运算符逐一比较:只要有一个比较成立:只要有一个比较成立:ANY的结果为真的结果为真(相当于或运算相当于或运算)。只有全部比较都成立:只有全部比较都成立:ALL的结果为真的结果为真(相当于与运算相当于与运算)。在在SQL-92标准中还可使用标准中还可使用SOME运算符,运算符,SOME运算符与运算符与ANY等效。等效。2记录存在逻辑运算符记录存在逻辑运算符notexists逻辑运算符逻辑运算符notexists可以检查子查询返回的结果集中是否包含有记可以检查子查询返回的结果集中是否包含有记录。假设子查询结果集中包含记录,那么录。假设子查询结果集中包含记录,那么exists为真,否那么为假。

50、为真,否那么为假。ANY|ALL与与notexists的详细用法见第的详细用法见第5章子查询。章子查询。6 6、空值运算符、空值运算符 not is null not is null 条件表达式:表达式条件表达式:表达式 not is null not is null is is nullnull表表示示判判断断表表达达式式的的值值是是否否等等于于空空值值,如如果果是是空空值值NULLNULL那么条件为真,否那么为假。那么条件为真,否那么为假。 not not is is nullnull表表示示判判断断表表达达式式的的值值是是否否不不等等于于空空值值,如如果表达式的值不是空值果表达式的值不是

51、空值NULLNULL那么条件为真。那么条件为真。 例如:假设例如:假设“职称的内容为职称的内容为NULLNULL,那么:,那么: 职称职称=讲师讲师 = UNKNOWN= UNKNOWN 或:或:“ “ 职称职称 IS NULL IS NULL 的值为真。的值为真。 7 7、字符模糊匹配运算符、字符模糊匹配运算符 not like not like 条件表达式:字符串表达式条件表达式:字符串表达式 not like not like 通配符通配符 其中通配符可以使用:其中通配符可以使用:1 1%:代表:代表0 0个或多个字符的任意字符串个或多个字符的任意字符串 如:字符串表达式如:字符串表达式

52、 like A% like A% 那那么么不不管管字字符符串串有有多多少少个个字字符符,只只要要第第一一个个字字符符开开头是头是“A“A,条件为真。,条件为真。 如:字符串表达式如:字符串表达式 like %AB like %AB 那那么么不不管管字字符符串串多多少少个个字字符符,只只要要最最后后两两个个字字符符末末尾是尾是“AB“AB,条件为真。,条件为真。 如:字符串表达式如:字符串表达式 like %ABC% like %ABC% 那那么么不不管管字字符符串串多多少少字字符符,只只要要任任意意位位置置上上有有字字符符串串“ABC“ABC,条件为真。,条件为真。7 7、字符模糊匹配运算符、

53、字符模糊匹配运算符2 2_:代表单个任意字符:代表单个任意字符 如:字符串表达式如:字符串表达式 like _ _A_ like _ _A_ 那那么么必必须须是是只只有有四四个个字字符符的的字字符符串串中中第第3 3个个字字符符是是“A“A,条件为真。,条件为真。 如:字符串表达式如:字符串表达式 like A_BC like A_BC 那那么么必必须须是是只只有有四四个个字字符符的的字字符符串串中中第第一一个个是是“A“A,第第三三、四四个个是是“BC“BC,第第二二个个不不管管是是任任意意的的单单个个字字符符,条件为真。条件为真。 如:字符串表达式如:字符串表达式 like _AB% li

54、ke _AB% 那那么么不不管管字字符符串串有有多多少少个个字字符符,只只要要第第二二、三三个个字字符符是是“AB“AB,条件为真。,条件为真。 如:字符串表达式如:字符串表达式 like %ABC_ like %ABC_ 那那么么不不管管字字符符串串有有多多少少个个字字符符,只只要要最最后后一一个个字字符符前前是是“ABC“ABC,条件为真。,条件为真。7 7、字符模糊匹配运算符、字符模糊匹配运算符3 3abcdabcd:代代表表指指定定字字符符中中的的任任何何一一个个单单字字符符取取所所列列字字符符之一之一 如:字符串表达式如:字符串表达式 like AABC% like AABC% 那那

55、么么只只要要第第一一个个是是A A,第第二二个个是是ABCABC三三个个字字符符其其中中的的任任意意一一个个字字符符,条件都为真。条件都为真。 如:字符串表达式如:字符串表达式 like A_a-h like A_a-h 那那么么必必须须是是只只有有三三个个字字符符的的字字符符串串中中,只只要要第第一一个个是是A A,第第三三个个是是a-ha-h即即abcdefghabcdefgh八个字符中的任意一个,条件都为真。八个字符中的任意一个,条件都为真。4 4abcabc:代表不在指定字符中的任何一个单字符:代表不在指定字符中的任何一个单字符 如如:字字符符串串表表达达式式 like like AA

56、BC%AABC%,那那么么不不管管字字符符串串有有多多少少字字符符,只只要要第第一一个个是是A A,第第二二个个不不是是ABCABC中中的的任任意意一一个个ABCABC以以外外的的任任意一个单字符,条件都为真。意一个单字符,条件都为真。 如如:字字符符串串表表达达式式 like like A_a-hA_a-h,那那么么必必须须是是只只有有三三个个字字符符的的字字符符串串中中,只只要要第第一一个个是是A A,第第三三个个不不是是abcdefghabcdefgh八八个个字字符符中中的的任意一个任意一个abcdefghabcdefgh以外的,条件都为真。以外的,条件都为真。7 7、字符模糊匹配运算符

57、、字符模糊匹配运算符5 5转义字符转义字符 由由于于% %、_ _、 都都被被作作为为了了通通配配符符,如如果果字字符符串串数数据据中中有有这这些些字字符符,那那么么如如何何匹匹配配这这些些字字符符呢呢?假假设设有有一一个个表表X X,其其中中字字段段abcabc中中的的值值为为:xyzxyz、%xyz%xyz、x_yzx_yz、xyzwxyzw,我我们们要要查查找找以以% %开开头头的的字符应该如何写出表达式呢?字符应该如何写出表达式呢?like %like %能不能行?能不能行? 在在SQLSQL语语句句中中,条条件件表表达达式式一一般般用用于于wherewhere子子句句,我我们们可可以

58、以在在wherewhere子子句句之之后后用用escapeescape子子句句指指定定一一个个转转义义字字符符,把把这这个个字字符符放放在在通通配配符符前面,该通配符就可以作为原来的普通字符使用了。前面,该通配符就可以作为原来的普通字符使用了。 例如:例如:where abc like t% where abc like t% escape t escape t 其其中中t%t%表表示示匹匹配配第第一一个个字字符符为为% %,之之后后为为任任意意多多个个任任意意字字符符% %的的字字符符串串,这这样样就就可可以以找找到到字字符符串串%xyz%xyz,转转义义字字符符tt只只表表示示它它后后面面

59、的第一个的第一个% %字符已被转义,第二个字符已被转义,第二个% %仍是匹配符。仍是匹配符。 注注意意:所所有有通通配配符符都都必必须须在在LIKELIKE子子句句中中使使用用才才有有意意义义,否否那那么么被被当作普通字符处理。当作普通字符处理。 、字符串连接运算符与字符串表达式、字符串连接运算符与字符串表达式 在在T-SQLT-SQL中中,字字符符串串连连接接运运算算符符用用“+“+,而而不不能能用用“|“|或或“&“&。 字符串表达式:字符串表达式字符串表达式:字符串表达式1 + 1 + 字符串表达式字符串表达式2 2 字符串表达式的值仍是字符串。字符串表达式的值仍是字符串。 如:如:AB

60、C+EFGABC+EFG 那么字符串表达式连接后的新字符串是:那么字符串表达式连接后的新字符串是:ABCEFGABCEFG。 如:如:ABC+ABC+,+EFG+EFG 那么连接后的新字符串是那么连接后的新字符串是ABCABC,EFGEFG。4.3 4.3 系统内置函数系统内置函数SQL的函数分为系统函数内置函数和用户自定义函数见第7章。SQL的内置函数中有些是ANSI标准定义的,大多数SQL版本都进行了扩充,不同版本的函数名及功能会略有不同。使用内置函数可以方便快捷地执行某些操作,因此了解并掌握这些函数的用法对数据处理是非常重要的。T-SQL提供了几百个内置函数,可分为以下几类:l数学函数l

61、字符串函数l日期时间函数l类型转换函数l集合函数在第5章数据库查询SELECT语句中介绍4.3.1 4.3.1 数学函数数学函数 常用数学函数见表常用数学函数见表4.24.2。 说明:说明:l l函函数数参参数数x x可可以以是是数数值值常常量量、变变量量、字字段段名名、数数值值函函数数或算术表达式。或算术表达式。l lx x的的数数据据类类型型可可以以是是各各种种数数值值型型或或货货币币型型的的,有有的的函函数数值值类类型型与与x x类类型型相相同同,有有的的需需要要将将x x转转换换成成floatfloat,其其结结果也是果也是floatfloat类型的。类型的。l l功功能能说说明明中中

62、得得到到的的值值是是函函数数返返回回值值,使使用用函函数数后后参参数数x x的值不变。的值不变。 字符串函数字符串函数 常用字符串函数见表常用字符串函数见表4.34.3。ll函数参数函数参数x x一般是整型的数值常量、变量、数值函数或算术表达式。一般是整型的数值常量、变量、数值函数或算术表达式。ll参数参数A A是字符串常量、变量、字段名、字符串函数或字符串表达式。是字符串常量、变量、字段名、字符串函数或字符串表达式。lAlA的的数数据据类类型型可可以以是是各各种种字字符符型型、宽宽字字符符型型或或二二进进制制类类型型的的,大大局局部部只只能能处处理理char(n)char(n)、varcha

63、r(n)varchar(n)、nchar(n)nchar(n)、nvarchar(n)nvarchar(n)类类型型或或者者可可以以转转换换成成这这些些类类型型的的数数据据,只只有有少少局局部部可可以以处处理理binary(n)binary(n)、varbinary(n)varbinary(n)、imageimage、texttext、ntextntext类型的数据。类型的数据。ll功功能能说说明明中中得得到到的的字字符符串串或或子子字字符符串串是是函函数数返返回回值值,原原字字符符串串A A的的内容不变。内容不变。 如:如:len(this is a book)len(this is a b

64、ook)的函数值为的函数值为1414 如如:substring(substring(欢欢送送使使用用SQL SQL Server Server 2000,3,4)2000,3,4),从从字字符符串串的的位位置置3 3第第一一个个字字符符位位置置为为1 1开开始始取取4 4个个字字符符,函函数数返返回回值值为为子子字字符符串串使用使用SQSQ 日期时间函数日期时间函数 常用日期常用日期时间函数函数见表表4.44.4。 说明:明:l l 函数参数函数参数x x一般是整型的数一般是整型的数值常量、常量、变量、数量、数值函数或算函数或算术表达式。表达式。lDlD是日期是日期时间型的常量、型的常量、变量

65、、字段名或日期量、字段名或日期时间函数。函数。lDlD的格式的格式应该符合符合 SET DATEFORMAT() SET DATEFORMAT()命令命令设定的格式。定的格式。ll功能功能说明中得到的明中得到的值是函数返回是函数返回值,原日期,原日期时间D D的内容不的内容不变。 例如:例如: getdate() getdate() 得到当前系得到当前系统的日期的日期时间为:03 16 2006 4:35PM03 16 2006 4:35PM year(getdate() year(getdate() 得到系得到系统当前日期的年份:当前日期的年份:2006 2006 year(2006-01-

66、02) year(2006-01-02) 函数返回函数返回值为数数值或日期型都可以:或日期型都可以:20062006 dateadd(dd,20,2006-3-16) dateadd(dd,20,2006-3-16)表示指定日期加表示指定日期加2020天:天:04 5 2006 04 5 2006 12:00AM12:00AM datediff(yy,1985-3-16,getdate() datediff(yy,1985-3-16,getdate()表示当前日期减指定日期的年表示当前日期减指定日期的年数差:数差:2121 利用利用datediff()datediff()函数,我函数,我们可以

67、根据日期求当前的年可以根据日期求当前的年龄。、类型转换函数、类型转换函数 类型转换函数见表类型转换函数见表4.54.5。 说明:说明:l l函函数数中中的的表表达达式式可可以以是是任任何何有有效效的的SQL SQL ServerServer表表达达式式,所所指指定定的的数数据据类型必须是系统的根本数据类型而不能是用户自定义的类型。类型必须是系统的根本数据类型而不能是用户自定义的类型。l l长长度度用用于于需需要要指指定定长长度度的的数数据据类类型型,不不需需要要指指定定长长度度的的类类型型可可以以省略。省略。lCast()lCast()函函数数只只适适用用于于转转换换后后不不需需要要指指定定格

68、格式式的的数数据据类类型型,如如整整数数、普通字符串。普通字符串。lConvert()lConvert()函数可适合于任何类型,其中函数可适合于任何类型,其中StyleStyle可设置转换后的格式:可设置转换后的格式: 将将datetimedatetime或或smalldatetimesmalldatetime型日期时间转换为字符串的日期格式;型日期时间转换为字符串的日期格式; 将将RealReal或或float(p)float(p)型浮点数转换为字符串的小数或指数格式;型浮点数转换为字符串的小数或指数格式; 将将SmallmoneySmallmoney或或moneymoney货币型转换为字符

69、串的货币格式。货币型转换为字符串的货币格式。 style style参数见表参数见表4.64.6。不需要指定格式的类型。不需要指定格式的类型StyleStyle可以省略。可以省略。 【例例4-54-5】根根据据出出生生日日期期,求求出出年年龄龄并并输输出出。假假设设将将出出生生年年份份及及年年龄龄作作为为一一个个字字符符串串整整体体输输出出,需需要要将将年年份份和和年年龄龄转换为字符串再用字符串表达式连接成一个字符串。转换为字符串再用字符串表达式连接成一个字符串。 Print cast( year(1980-3-7) as char(4) ) Print cast( year(1980-3-7

70、) as char(4) ) + + 年出生的人年龄是年出生的人年龄是 + cast( datediff(yy,1980-3-7,getdate() + cast( datediff(yy,1980-3-7,getdate() as char(2) ) + as char(2) ) + 岁岁 输出结果为:输出结果为:19801980年出生的人年龄是年出生的人年龄是2525岁岁 【例【例4-64-6】convertconvert函数的用法。函数的用法。set dateformat mdy -set dateformat mdy -设置日期格式采用月日年设置日期格式采用月日年declare d d

71、atetime,r real,m money -declare d datetime,r real,m money -定义局部变量定义局部变量set d=11/20/2002 10:10:36 AMset d=11/20/2002 10:10:36 AMset r=268886set r=268886set m=9635225.3685set m=9635225.3685print convert(varchar(30),d,108) - print convert(varchar(30),d,108) - 结果为:结果为:10:10:3610:10:36print convert(varch

72、ar(30),d,111) - print convert(varchar(30),d,111) - 结果为:结果为:2002/11/202002/11/20print convert(varchar(30),d,120) - print convert(varchar(30),d,120) - 结果:结果:2002-11-20 10:10:362002-11-20 10:10:36print convert(varchar(20),r, 0) - print convert(varchar(20),r, 0) - 结果为:结果为:268886268886print convert(varch

73、ar(20),r, 1) - print convert(varchar(20),r, 1) - 结果为:结果为:2.6888600e+0052.6888600e+005print convert(varchar(22),r, 2) -print convert(varchar(22),r, 2) -结果:结果:2.688860000000000e+005 2.688860000000000e+005 print convert(varchar(25),m, 0) - print convert(varchar(25),m, 0) - 结果为:结果为:9635225.379635225.37p

74、rint convert(varchar(25),m, 1) - print convert(varchar(25),m, 1) - 结果为:结果为:9,635,225.379,635,225.37print convert(varchar(25),m, 2) - print convert(varchar(25),m, 2) - 结果为:结果为:9635225.36859635225.3685gogo4.4 4.4 用企用企业管理器管理器创立数据表及立数据表及约束束对象象 、数据表的根本概念、数据表的根本概念 数数据据表表就就是是相相关关联联的的行行列列数数据据集集合合,是是数数据据库库中中

75、最最重重要要的的对对象象,整整个个数数据据库库中中的的全全部部数数据据都都是是物物理理存存储储在在各各个个数数据据表表中中的的。例例如如? ?电电脑脑器器材材销销售售管管理理?diannaoxs?diannaoxs数数据据库库的的? ?员员工工表表? ?中中存存放放着着该该公司员工的数据。见表公司员工的数据。见表4.74.7。 1 1、字段、字段 l l 数数据据表表中中的的一一列列称称为一一个个字字段段FieldField,?员工工表表?共共有有88个个字字段。段。l l 每每个个字字段段的的标题名名称称称称为列列名名或或字字段段名名,如如“ “姓姓名名就就是是该列列的的字字段段名,一个数据

76、表中的字段名必名,一个数据表中的字段名必须是惟一的是惟一的满足足1NF1NF没有相同的列。没有相同的列。l l 一一个个字字段段中中存存放放着着同同一一类型型的的数数据据,不不同同字字段段存存放放的的数数据据类型型可可以以不不同同。如如“ “员工工IDID字字段段存存放放各各个个员工工的的编号号,而而“ “部部门字字段段存存放放的的是各个是各个员工所在的部工所在的部门名称。名称。l l 一一个个字字段段中中所所存存放放的的数数据据类型型、数数值大大小小及及字字段段长度度等等称称为该字字段段的属性的属性值。 如如“ “姓姓名名字字段段存存放放的的员工工姓姓名名是是字字符符类型型的的数数据据,假假

77、定定存存储44个个汉 字字 , 那那 么么 可可 设 置置 为 char(8)char(8)、 varchar(8)varchar(8)或或Nchar(4)Nchar(4)、Nvarchar(4)Nvarchar(4)。而而“ “出出生生日日期期字字段段存存放放着着 员 工工 的的 出出 生生 日日 期期 是是 日日 期期 /时 间 类 型型 的的 数数 据据 , 如如 果果 设 置置 为DatetimeDatetime类 型型 将将 占占 据据 88个个 字字 节 的的 固固 定定 空空 间 , 如如 果果 设 置置 为SmalldatetimeSmalldatetime类型那么占据型那么占

78、据44个字个字节的固定空的固定空间。 2 2记录记录 l l 数数据据表表中中的的一一行行称称为一一条条记录,由由表表中中各各个个字字段段的的数数据据项组成成,是是一一组相相关关数数据据的的集集合合。如如?员工工表表?中中的的一一条条记录是一个是一个员工相关数据的集合。工相关数据的集合。l l 每每个个表表都都有有一一个个主主键,主主键字字段段的的数数据据可可以以惟惟一一的的标识表表中中的的一一条条记录。如如各各个个员工工的的编号号是是惟惟一一的的,可可将将“ “员工工IDID字段指定字段指定为主主键, l l 设置置了了主主键的的数数据据表表中中,各各条条记录是是惟惟一一的的满足足2NF2N

79、F,没有相同的行。,没有相同的行。、数据表的结构、数据表的结构 人工绘制数据表的方法步骤:人工绘制数据表的方法步骤:第第一一:按按表表的的列列数数行行数数及及每每列列存存放放数数据据的的大大小小绘绘制制一一个个合合理理的的空表格框架。空表格框架。第二:在表中填入数据。第二:在表中填入数据。 比比照照人人工工绘绘制制数数据据表表的的方方法法,在在数数据据库库中中把把数数据据表表分分成成“表表结结构构和和“数数据据两两局局部部,所所绘绘制制的的空空表表格格就就是是需需要要设设计计的的“表表结结构构框架。见表框架。见表4.84.8。 同同样样,在在数数据据库库中中创创立立数数据据表表也也必必须须先先

80、设设计计出出表表的的“结结构构再再输输入入“数据。那么在数据库中如何设计数据表的结构框架呢?数据。那么在数据库中如何设计数据表的结构框架呢? 在在数数据据库库中中设设计计表表的的结结构构就就是是告告诉诉数数据据库库系系统统该该表表中中各各列列的的属属性性,包包括括各各列列的的列列标标题题字字段段名名称称、每每列列中中所所要要存存放放数数据据的的类类型型字字段段类类型型、存存放放数数据据的的大大小小或或字字符符个个数数字字段段长长度度以以及及其其他他必必要要的说明其他属性。的说明其他属性。 按按照照SQL SQL ServerServer数数据据库库创创立立表表的的要要求求我我们们可可以以也也用

81、用一一个个表表格格来来描描述数据表的结构,见表述数据表的结构,见表4.94.9。 、用企业管理器创立表结构、用企业管理器创立表结构 在在SQL Server 2000SQL Server 2000中:中:l l 每个数据库里最多有每个数据库里最多有2020亿个表。亿个表。l l 每个表最多可以设置每个表最多可以设置10241024个字段列。个字段列。l l每每条条记记录录最最多多占占 80608060个个字字节节,不不包包括括texttext、NtextNtext和和imageimage字段。字段。【实例例练习4-14-1】 在在企企业业管管理理器器中中按按表表4.94.9的的结结构构创创立立

82、? ?电电脑脑器器材材销销售售管管理理?diannaoxs?diannaoxs数据库的数据库的? ?员工表员工表? ?。1 1、翻开企业管理器、翻开企业管理器 展展开开企企业业管管理理器器控控制制台台根根目目录录,找找到到diannaoxsdiannaoxs数数据据库库,右右击击该该数数据据库库中中的的表表结结点点在在快快捷捷菜菜单单中中单单击击“新新建建表表命令,如图命令,如图4-14-1所示,随即翻开所示,随即翻开“表设计器窗口。表设计器窗口。 【实例例练习4-14-1】 2 2、在、在“表设计器窗口中创立表设计器窗口中创立? ?员工表员工表? ?结构结构已已输输入入表表结结构构字字段段属

83、属性性的的? ?员员工工表表?“?“表表设设计计器器如如图图4-24-2所示。所示。 【实例例练习4-14-1】 1 1表表设设计计器器上上半半局局部部的的表表格格,用用于于描描述述表表的的结结构构,与与我我们们描描述述表表结结构构的的表表4.94.9中中前前四四列列完完全全对对应应:设设计计器器表表格格的的每每一一行行描描述述数数据据表表的的一一个个字字段段,四四列列参参数数分分别别描描述述该该字字段的段的“列名列名“数据类型数据类型“长度长度“允许空。允许空。ll列列名名( (字字段段名名) ):同同一一表表中中的的字字段段名名必必须须惟惟一一。可可以以由由字字母母、汉汉字字、数数字字和和

84、下下划划线线组组成成,不不能能以以数数字字开开头头,不不能能是关键字,长度不超过是关键字,长度不超过128128个字符。个字符。l l 数数据据类类型型:是是一一个个下下拉拉列列表表框框,其其中中包包括括了了当当前前数数据据库库的的全全部部类类型型,也也包包括括用用户户自自定定义义的的数数据据类类型型,可可直直接接从从中中选择即可。选择即可。ll长长度度:对对需需要要设设置置数数据据类类型型长长度度的的字字段段输输入入长长度度值值,默认长度的类型系统自动取固定长度,不允许用户设置。默认长度的类型系统自动取固定长度,不允许用户设置。ll允允许许空空:用用对对钩钩表表示示允允许许为为空空值值,取取

85、消消对对钩钩表表示示不不允允许许为为空空值值。默默认认状状态态勾勾选选允允许许为为空空,单单击击鼠鼠标标可可以以切切换换,使允许为空的字段去除复选对钩标记。使允许为空的字段去除复选对钩标记。【实例例练习4-14-1】 2 2“表表设设计计器器下下半半局局部部是是描描述述字字段段的的附附加加属属性性,当当鼠鼠标标选选中中哪哪个字段标志块中有三角标志,即可为该字段设置附加属性:个字段标志块中有三角标志,即可为该字段设置附加属性:ll描述:输入该字段的说明性文字描述:输入该字段的说明性文字ll默默认认值值:当当输输入入记记录录时时如如果果该该字字段段没没有有输输入入数数据据那那么么自自动动使使用用该

86、该默默认认值值。默默认认值值可可以以在在此此直直接接输输入入,也也可可事事先先单单独独设设置置默默认认约约束束对对象,在这个下拉列表中选取已定义好的默认值约束对象。象,在这个下拉列表中选取已定义好的默认值约束对象。ll精精度度、小小数数位位数数:对对Numeric(p,s)Numeric(p,s)和和Decimal(p,s)Decimal(p,s)类类型型需需在在此此处处设置精度设置精度p p和小数位数和小数位数s s的值。的值。l l 标标识识( (是是/ /否否) ):选选择择是是否否将将该该字字段段设设置置为为自自动动编编号号字字段段(identity(identity,输输入入记记录录

87、时时系系统统根根据据“标标识识种种子子和和“递递增增量量自自动动产产生生该该字字段段的的值值) )。只只有有bigint, bigint, int, int, smallintsmallint等等整整数数类类型型的的字字段段,先先去去除除“允许空的对钩后才可以设置为该项。允许空的对钩后才可以设置为该项。ll标标识识种种子子( (初初始始值值) ):为为数数据据表表第第一一条条记记录录的的自自动动编编号号设设置置初初始始值值,只只有有“标标识识设设为为“是是才才允允许许设设置置该该项项。如如班班级级的的“学学号号设设为为自自动动编编号号字字段段标标识识列列,假假设设第第一一个个学学生生的的学学号

88、号是是200603001200603001那那么么可可将该值设置为将该值设置为“标识种子。标识种子。ll标标识识递递增增量量:设设置置自自动动编编号号字字段段每每增增加加一一条条记记录录时时编编号号的的增增长长量量。默认为默认为1 1。【实例例练习4-14-1】 3 3、保存空数据表、保存空数据表 ? ?员员工工表表? ?结结构构输输入入完完毕毕后后必必须须进进行行保保存存,单单击击文文件件菜菜单单的的“保保存存或或工工具具栏栏第第一一个个“保保存存按按钮钮,在在弹弹出出的的“选选择择名名称称对对话话框框中中输输入入表表名名“员员工工表表默默认认为为TABLE1TABLE1,单单击击“确确定定

89、关关闭闭表表设设计计器器,“员员工工表表的的结结构构即即设设计计创创立立完完成成,在在数数据据库库中中创创立立了了一一个个没没有有数数据据的空的空? ?员工表员工表? ?。如图。如图4-34-3所示。所示。 、在企业管理器中修改表结构、在企业管理器中修改表结构 假假设设没没有有关关闭闭“表表设设计计器器可可直直接接在在设设计计器器中中反反复复设设置置修修改改各各个个字字段段,为为各各个个字字段段设设置置约约束束。假假设设已已经经关关闭闭创创立立完完成成那那么么可可随随时时再再翻翻开开要要修修改改表表的的“表表设设计计器器,对对表表结结构构进进行行修修改改并并设设置置各各种种约约束束,也也可可以

90、以使使用用SQLSQL语句修改表的结构和创立约束。语句修改表的结构和创立约束。1 1、翻开已有表的、翻开已有表的“表设计器表设计器 翻翻开开企企业业管管理理器器,依依次次展展开开到到要要修修改改的的数数据据库库单单击击“表表对对象象展展开开数数据据表表选选择择要要修修改改的的数数据据表表,右右键键单单击击,在在弹弹出出的的快快捷捷菜菜单单中中选选择择“设设计计表表命命令令,即即可可翻翻开该表的开该表的“表设计器。如图表设计器。如图4-44-4所示。所示。 、在企业管理器中修改表结构、在企业管理器中修改表结构 2 2、修改字段属性、修改字段属性 在在设设计计器器中中可可以以自自由由的的修修改改各

91、各字字段段的的“列列名名“数数据据类类型型“字字段段长长度度“允允许许空空以以及及其其他他附加属性。附加属性。3 3、添加新字段、添加新字段 如如果果在在最最后后追追加加一一个个新新字字段段,可可将将光光标标移移到到或或用用鼠鼠标标单单击击最最下下面面的的空空白白行行中中,即即可可输输入入一一个新行。个新行。如如果果要要在在某某个个字字段段前前插插入入一一个个新新字字段段,可可右右击击插插入入位位置置的的字字段段,在在弹弹出出的的快快捷捷菜菜单单中中选选择择“插插入入列列,那那么么会会在在该该列列之之前前出出现现一一行行空空白白,即即可可插插入一个字段。如图入一个字段。如图4-54-5所示。所

92、示。 、在企业管理器中修改表结构、在企业管理器中修改表结构 4 4、删除字段、删除字段 右右击击要要删删除除的的字字段段,在在弹弹出出的的快快捷捷菜菜单单中中选选择择“删删除除列列命令即可删除该字段。命令即可删除该字段。5 5、移动字段顺序、移动字段顺序 单单击击要要移移动动字字段段左左方方最最前前端端的的标标志志块块,那那么么出出现现一一个个“三三角角标标志志,左左键键按按下下不不松松开开,然然后后拖拖动动该该字字段段到到所所需要的位置再松开即可。需要的位置再松开即可。6 6、修改字段约束、修改字段约束 右右击击要要修修改改约约束束的的字字段段,在在弹弹出出的的快快捷捷菜菜单单中中选选择择“

93、属属性性,即即可可在在弹弹出出的的“属属性性对对话话框框中中设设置置或或修修改改该该字字段段的约束,具体方法在下一节介绍。的约束,具体方法在下一节介绍。7 7、关闭表设计器、关闭表设计器 修修改改完完毕毕,单单击击“保保存存工工具具按按钮钮,保保存存修修改改后后的的表表结结构并关闭构并关闭“表设计器。表设计器。 、在企业管理器中创立表的各种约束对象、在企业管理器中创立表的各种约束对象 我我们们为为表表中中各各个个字字段段设设置置的的每每个个约约束束除除了了主主键键约约束束外外,在在数数据据库库中中都都对对应应一一个个约约束束对对象象,每每个个约约束束对对象象都都有有自自己己惟惟一一的的名名称称

94、可可以以自自己己设设定定,也也可可以以使使用用系系统统默默认认的的名名称称,在在查查看看、修修改改、删删除除约约束束对对象象时时必必须须指指明约束的名称。明约束的名称。 字字段段的的约约束束可可以以在在企企业业管管理理器器中中创创立立表表结结构构的的同同时时进进行行设设置置,也也可可以以在在表表结结构构创创立立完完成成后后单单独独添添加加或或修修改改,还可以使用还可以使用T-SQLT-SQL语句进行设置或修改。语句进行设置或修改。 在在企企业业管管理理器器中中设设置置表表的的字字段段约约束束必必须须在在“表表设设计计器器中中进进行行,可可以以使使用用工工具具栏栏的的主主键键按按钮钮、关关系系按

95、按钮钮、索索引引/ /键键按按钮钮、约约束束按按钮钮,也也可可以以单单击击鼠鼠标标右右键键使使用用快快捷捷菜菜单单中中的的设设置置主主键键、索索引引/ /键键、关关系系、CHECKCHECK约约束束命命令令,最最终都要进入终都要进入“属性对话框进行设置。如图属性对话框进行设置。如图4-64-6所示。所示。、在企业管理器中创立表的各种约束对象、在企业管理器中创立表的各种约束对象 1 1、字段、字段“属性对话框属性对话框 单单击击工工具具栏栏“表表和和索索引引属属性性按按钮钮,或或右右键键快快捷捷菜菜单单项项选选择择“属属性性命令,都会弹出表的命令,都会弹出表的“属性对话框。如图属性对话框。如图4

96、-74-7所示。所示。 表表的的“属属性性对对话话框框有有“表表“关关系系“索索引引/ /键键“CHECK“CHECK约约束束四四个个选选项项卡卡。实实际际上上单单击击工工具具栏栏“关关系系、“索索引引/ /键键、“约约束束按按钮钮,或或在在右右键键快快捷捷菜菜单单中中选选择择“关关系系、“索索引引/ /键键、“CHECK“CHECK约约束束命命令令也也都都是是直直接接进进入入“属属性性对对话话框框中中对对应应的的选选项项卡卡。他他们们的的作作用是:用是:l l 主键按钮:用于设置关键字段的主键约束。主键按钮:用于设置关键字段的主键约束。l“l“表表选选项项卡卡:在在“选选定定的的表表下下拉拉

97、列列表表中中选选择择设设置置约约束束的的数数据据表。表。ll关关系系按按钮钮、关关系系命命令令都都会会翻翻开开“关关系系选选项项卡卡:用用于于设设置置外外键键约约束。束。ll索索引引/ /键键按按钮钮、索索引引/ /键键命命令令都都会会翻翻开开“索索引引/ /键键选选项项卡卡:用用于于设设置惟一约束。置惟一约束。ll约约束束按按钮钮、约约束束命命令令都都会会翻翻开开“CHECK“CHECK约约束束选选项项卡卡:用用于于设设置置检检查约束。查约束。【实例例练习4-24-2】 在在企企业业管管理理器器中中为为? ?电电脑脑器器材材销销售售管管理理?diannaoxs?diannaoxs数数据据库的

98、库的? ?员工表员工表? ?设置约束。设置约束。n n “员员工工IDID设设置置主主键键约约束束、只只允允许许5 5位位数数字字的的检检查查约约束。束。n“n“姓姓名名设设置置惟惟一一约约束束以以满满足足? ?进进货货表表?销销售售表表? ?中中“收货人和收货人和“销售员字段的外键约束。销售员字段的外键约束。n“n“性性别别设设置置检检查查约约束束只只允允许许输输入入1 1和和0 0表表示示“男男和和“女。女。n n “部部门门可可将将人人数数最最多多的的部部门门设设为为默默认认值值,如如“销销售科。售科。 假假设设输输入入? ?员员工工表表? ?结结构构时时没没有有关关闭闭“表表设设计计器

99、器可可直直接接设设置置各各个个字字段段的的约约束束,假假设设已已经经关关闭闭可可重重新新翻翻开开? ?员员工工表表? ?的的“表表设设计计器器,修修改改表表结结构构并并设设置置约约束束也也可可用用SQLSQL语句修改表结构和创立约束。语句修改表结构和创立约束。 2 2、设置主键约束、设置主键约束 选选中中设设置置主主键键的的“员员工工IDID字字段段,直直接接单单击击工工具具栏栏“主主键键按按钮钮,或或者者在在“员员工工IDID字字段段上上右右键键单单击击,在在快快捷捷菜菜单单中中选选“设设置置主主键键命命令令,此此时时在在“员员工工IDID字字段段最最前前端端的的标标志志块块中中出出现现一一

100、个个“钥钥匙匙图图标标,主主键键设设置置完完毕。如图毕。如图4-64-6所示。所示。 3 3、设置惟一约束、设置惟一约束 选选中中设设置置约约束束的的“姓姓名名字字段段,直直接接单单击击工工具具栏栏“属属性性按按钮钮,或或在在右右键键快快捷捷菜菜单单中中选选“属属性性命命令令,最最后后在弹出的在弹出的“属性对话框中选择属性对话框中选择“索引索引/ /键选项卡。键选项卡。3 3、设置惟一约束、设置惟一约束 假假设设单单击击工工具具栏栏“索索引引/ /键键按按钮钮,或或在在右右键键快快捷捷菜菜单单中中选选择择“索索引引/ /键键命命令令,那那么么直直接接进进入入“属属性性对对话话框框中的中的“索引

101、索引/ /键选项卡。如图键选项卡。如图4-84-8所示。所示。 1 1单击单击“新建按钮;新建按钮;2 2在在“列列名名的的下下拉拉列列表表中中选选择择设设置置惟惟一一约约束束的的“姓姓名字段;名字段;3 3选中选中“创立创立UNIQUEUNIQUE复选框和复选框和“约束单项选择框;约束单项选择框;4 4在在“索索引引名名中中出出现现该该约约束束的的默默认认名名称称“IX_“IX_员员工工表表,可可在在此此输输入入自自己己的的约约束束名名称称,以以便便以以后后查查阅阅、修修改改、删除时使用。删除时使用。 最最后后单单击击“关关闭闭,即即完完成成了了“姓姓名名字字段段的的惟惟一一约约束束设置。设

102、置。 4 4、设置外键约束、设置外键约束 外外键键约约束束在在“属属性性对对话话框框的的“关关系系选选项项卡卡中中设设置置,如图如图4-94-9所示。所示。 4 4、设置外键约束、设置外键约束 1 1单击单击“新建按钮;新建按钮;2 2在在“外外键键表表的的下下拉拉列列表表中中选选择择创创立立外外键键约约束束的的子子表表,并并在在下下面的列表框中选择要创立外键约束的字段;面的列表框中选择要创立外键约束的字段;3 3在在“主主键键表表的的下下拉拉列列表表中中选选择择该该外外键键所所引引用用的的父父表表,并并在在下下面面的的列列表表框框中中选选择择该该外外键键所所要要引引用用的的字字段段。注注意意

103、:外外键键所所要要引引用用的的列必须是父表中已经设置了主键约束或惟一约束的列。列必须是父表中已经设置了主键约束或惟一约束的列。4 4在在“关关系系名名中中出出现现该该外外键键约约束束的的默默认认名名称称,可可在在此此输输入入自自己己的约束名。的约束名。5 5在在“关关系系选选项项卡卡下下部部的的复复选选框框中中根根据据需需要要可可进进行行相相应应的的附附加加选择设置:选择设置:uu创创立立中中检检查查现现存存数数据据:表表示示先先对对子子表表已已有有数数据据进进行行检检查查,假假设设不不符符合合“外外键键列列值值必必须须是是引引用用列列的的列列值值之之一一 ,那那么么不不允允许许定定义义外外键

104、键约约束束;不不选选择择该该项项那那么么不不对对已已经经存存在在的的数数据据进进行行检检查查,只只对对以以后后数数据有效。据有效。uu级级联联删删除除相相关关的的记记录录:表表示示可可以以实实现现级级联联删删除除,即即主主表表被被引引用用列列的的某某个个值值删删除除时时,子子表表中中与与该该值值相相关关的的记记录录同同时时被被删删除除。不不选选择择该该项那么父表中数据删除时,子表记录不受影响。项那么父表中数据删除时,子表记录不受影响。uu级级联联更更新新相相关关的的字字段段:表表示示可可以以实实现现级级联联修修改改更更新新,即即主主表表中中被被引用的字段值更新时子表中相关记录的字段值同时更新。

105、引用的字段值更新时子表中相关记录的字段值同时更新。6 6单击单击“关闭,即可完成外键约束设置。关闭,即可完成外键约束设置。5 5、设置、设置CHECKCHECK检查约束检查约束 为为“性性别别字字段段设设置置CHECKCHECK检检查查约约束束只只允允许许输输入入1 1和和0 0表表示示“男男“女。女。 检检查查约约束束就就是是用用指指定定的的条条件件逻逻辑辑表表达达式式检检查查限限制制输输入入数数据据的的取取值值范范围围,用用于于保保证证数数据据的的参参照照完完整整性性和和域域完整性性。完整性性。 选选择择“性性别别字字段段,翻翻开开“属属性性对对话话框框并并选选择择“CHECK“CHECK

106、约束选项卡。如图约束选项卡。如图4-104-10所示。所示。 5 5、设置、设置CHECKCHECK检查约束检查约束 1 1单击单击“新建按钮。新建按钮。2 2在在“约约束束表表达达式式中中为为设设置置检检查查约约束束的的列列输输入入约约束束条条件件表表达达式式。如如“姓姓别别字字段段设设计计为为bitbit位位数数据据类类型型,用用1 1表表示示“男男用用0 0表表示示“女女,那那么么该该字字段段只只允允许许输输入入0 0和和1 1注注意意:bitbit字字段段如如果果输输入入0 0和和1 1以以外外的值,都默认为的值,都默认为1 1,那么相应的条件表达式为:,那么相应的条件表达式为: 性别

107、性别=0 or =0 or 性别性别=1=13 3在在“约束名中出现默认的约束名称,可输入自己的约束名称。约束名中出现默认的约束名称,可输入自己的约束名称。4 4在在“CHECK“CHECK约束选项卡下部的复选框中进行相应的附加设置。约束选项卡下部的复选框中进行相应的附加设置。5 5单击单击“关闭,即完成了关闭,即完成了“性别字段的检查约束设置。性别字段的检查约束设置。 注注意意:在在创创立立数数据据表表时时直直接接为为某某个个字字段段设设置置的的CHECKCHECK约约束束,只只对对该该字字段段有有效效,如如果果一一个个检检查查约约束束需需要要在在不不同同表表不不同同字字段段上上使使用用,那

108、那么么应应该该单单独独创创立立“规规那那么么对对象象,再再将将该该对对象象绑绑定定到到需需要要约约束束的的各各个个字字段段上。上。对对“性性别别的的CHECKCHECK约约束束也也可可以以创创立立为为规规那那么么对对象象,再再绑绑定定到到性性别别字字段上。段上。 6 6、在企业管理器中创立、在企业管理器中创立“规那么对象规那么对象 “规规那那么么对对象象也也是是用用于于字字段段的的检检查查约约束束,限限制制该该字字段段输输入入数数据据的的范范围围。其其区区别别在在于于CHECKCHECK约约束束只只对对一一个个字字段段有有效效,而而规规那那么么对对象象属属于整个数据库,所有数据表中的字段都可以

109、使用。于整个数据库,所有数据表中的字段都可以使用。ll规规那那么么是是数数据据库库对对象象之之一一,创创立立规规那那么么对对象象后后还还必必须须绑绑定定到到需需要要的字段上才有效。的字段上才有效。ll一一个个规规那那么么对对象象可可以以绑绑定定到到多多个个表表的的多多个个字字段段,还还可可以以绑绑定定到到用用户自定义的数据类型上。户自定义的数据类型上。ll一一个个字字段段只只能能绑绑定定一一个个规规那那么么对对象象,但但可可直直接接设设置置多多个个CHECKCHECK约约束。束。 注意:注意:uCHECKuCHECK约约束束的的表表达达式式中中可可直直接接使使用用自自己己表表中中的的字字段段,

110、规规那那么么对对象象那那么么不不允允许许使使用用表表中中的的字字段段,可可用用“局局部部变变量量代代表表自自己己表表中中的的任任意字段。意字段。u u CHECKCHECK约约束束或或规规那那么么对对象象都都不不允允许许使使用用其其他他数数据据表表中中的的字字段段,如如果果需需要要参参照照其其他他表表中中的的数数据据设设置置复复杂杂约约束束,那那么么必必须须使使用用触触发发器器见见第第8 8章章。例例如如? ?销销售售表表2006?2006?的的“销销售售单单价价只只能能限限制制在在? ?商商品品一一览览表表? ?中中“参参考考价价格格的的5%5%范范围围内内浮浮动动,那那么么不不能能设设置置

111、检检查查约约束束或或规规那那么对象,必须使用触发器。么对象,必须使用触发器。【实例例练习4-34-3】 为为? ?员员工工表表?“?“员员工工IDID字字段段创创立立只只允允许许5 5位位数数字字的的“规规那么对象。那么对象。 展展开开数数据据库库diannaoxsdiannaoxs,右右键键单单击击“规规那那么么对对象象图图标标,或或选选中中“规规那那么么对对象象图图标标单单击击“操操作作菜菜单单项项选选择择择择“新新建建规规那那么么命命令令,弹弹出出“规规那那么么属属性性对对话话框框。如如图图4-114-11所示。所示。 【实例例练习4-34-3】 n n 在在“ “名名称称文文本本框框中

112、中为规那那么么对象象指指定定一一个个符符合合命命名名规那么的惟一名称那么的惟一名称“ “职工工编号。号。n n 在在“ “文文本本文文本本框框中中输入入只只允允许5 5位位数数字字字字符符的的条条件件表表达式:达式: x x like like 0-90-0-90-90-90-90-990-90-90-9 n n 单击“ “确确定定,即即完完成成了了规那那么么对象象“ “职工工编号号的的创立。立。 注意:注意:u u 规那那么么的的条条件件表表达达式式必必须是是以以开开头的的局局部部变量量,用来表示某个字段中的数据。用来表示某个字段中的数据。uu 规 那那 么么 表表 达达 式式 x x li

113、ke like 0-0-90-90-90-90-990-90-90-90-9 限限制制输入入的的数数据据必必须是是数数字字字字符符,而而且且必必须是是5 5位位,否否那那么么即即违反反该检查约束的束的规那么。那么。【实例例练习4-44-4】 为为? ?商商品品一一览览表表? ?的的“平平均均进进价价“参参考考价价格格“库库存存量量字字段段、? ?销销售售表表2006?2006?的的“金金额额字字段段创创立立输输入入数数值值必必须须大大于于等等于于0“0“不不能能为为负的规那么对象。负的规那么对象。 右右键键单单击击数数据据库库diannaoxsdiannaoxs中中的的“规规那那么么对对象象图

114、图标标,在在弹弹出出的的快快捷捷菜菜单单中中选选择择“新新建建规规那那么么命命令令,弹弹出出“规规那那么么属属性性对对话话框框。如图如图4-124-12所示。所示。 nn在在“名称文本框中为规那么对象指定名称名称文本框中为规那么对象指定名称“不能为负。不能为负。nn在在“文本文本框中输入规那么的条件表达式:文本文本框中输入规那么的条件表达式:x = 0x = 0nn单击单击“确定,即完成了规那么对象确定,即完成了规那么对象“不能为负的创立。不能为负的创立。7 7、在企业管理器中绑定和解除规那么对象、在企业管理器中绑定和解除规那么对象 可可以以将将“规规那那么么对对象象绑绑定定到到某某个个字字段

115、段上上,也也可可以以绑绑定定到到自自定定义义数据类型上。数据类型上。 例例如如将将【实实例例练练习习4-34-3】创创立立的的“职职工工编编号号规规那那么么绑绑定定到到? ?员员工工表表?“?“员工员工IDID字段:字段: 展展开开数数据据库库diannaoxsdiannaoxs,单单击击“规规那那么么图图标标,在在右右边边的的“规规那那么么对对象象列列表表中中右右键键单单击击要要绑绑定定或或解解除除的的“职职工工编编号号规规那那么么对对象象,在在快快捷捷菜菜单单中中选选择择“属属性性命命令令,翻翻开开“规规那那么么属属性性对对话话框框。如如图图4-134-13所示。所示。 7 7、在企业管理

116、器中绑定和解除规那么对象、在企业管理器中绑定和解除规那么对象 l l 假假设要要将将规那那么么绑定定到到自自定定义数数据据类型型上上,单击“ “绑定定UDTUDT按按钮,在在弹出出的的下下一一个个对话框框中中选择“ “自自定定义类型型,在在“ “绑定定复复选框框打打对勾勾选中中假假设还选择“ “仅将将来来那那么么表表示示对原原来来已已经使使用用的的类型型不不做做检查,仅对以以后后使使用用有有效效。假假设要要解解除除可可将将“ “绑定定复复选框框中的中的对勾取消。勾取消。l l 假假设要要将将规那那么么绑定定到到字字段段上上,单击“ “绑定定列列按按钮,弹出出“ “绑定定列列对话框,如框,如图4

117、-144-14所示。所示。7 7、在企业管理器中绑定和解除规那么对象、在企业管理器中绑定和解除规那么对象 n n 在在“ “表的下拉列表中表的下拉列表中选择“ “员工表;工表;n n 在在左左边该表表“ “未未绑定定列列中中选择需需要要绑定定规那那么么的的字字段段“ “员工工IDID。n n 单击中中间的的“ “添添加加按按钮,那那么么被被绑定定字字段段出出现在在右右边“ “绑定定列列中中假假设选错了了可可以以选中中后后单击“ “按钮。按钮。n n 单单击击“ “应应用用“ “确确定定,完完成成在在某某列列绑绑定定默默认认值值的的操操作作。之之后后可可在在“ “表表中中选选择择其其他他数数据据

118、表表或或自自定定义义数数据据类类型型,将默认值对象同时绑定到多个字段或自定义类型上。将默认值对象同时绑定到多个字段或自定义类型上。【实例例练习4-74-7】 根据表根据表1.22在企业管理器中创立在企业管理器中创立?电脑器材销售管理电脑器材销售管理?diannaoxs数数据库的据库的?商品一览表商品一览表?表结构及其约束。表结构及其约束。1设计设计?商品一览表商品一览表?的表结构。如表的表结构。如表4.10所示。所示。l“货号字段为关键字;设置只允许货号字段为关键字;设置只允许4位数字的检查约束。位数字的检查约束。l“货名货名“规格规格“单位设置空值约束单位设置空值约束“否,不允许为空。否,不

119、允许为空。l“货名设置默认值货名设置默认值“计算机。计算机。l“平均进价平均进价“参考价格参考价格“库存量在确定经营某种产品初期可库存量在确定经营某种产品初期可以暂时没有数据,允许为空;检查约束以暂时没有数据,允许为空;检查约束“不能为负,即大于等于不能为负,即大于等于0。l“库存量可设置默认值为库存量可设置默认值为0。2?商品一览表商品一览表?的初步设计结果如图的初步设计结果如图4-20所示。所示。【实例例练习4-74-7】 3直接设置直接设置“货号字段只允许货号字段只允许4位数字的检查约束位数字的检查约束n在在?商商品品一一览览表表?的的设设计计器器中中假假设设已已关关闭闭,那那么么右右键

120、键单单击击?商商品品一一览览表表?,选选“设设计计表表重重新新进进入入,翻翻开开“货货号号字字段段“属属性性对对话话框框选择选择“CHECK约束选项卡。约束选项卡。n单单击击“新新建建,在在“约约束束表表达达式式文文本本框框中中输输入入:货货号号like0-90-90-90-9n单击关闭,完成检查约束的设置。单击关闭,完成检查约束的设置。注意:设置了检查约束后,输入货号时必须是数字而且必须是注意:设置了检查约束后,输入货号时必须是数字而且必须是4位。位。4将将【实实例例练练习习4-4】创创立立的的规规那那么么对对象象“不不能能为为负负绑绑定定到到“平平均进价均进价“参考价格参考价格“库存量字段

121、上。库存量字段上。n单单击击“规规那那么么节节点点,展展开开规规那那么么,选选中中“不不能能为为负负右右键键单单击击选选择择“属性。属性。n在在“规那么属性对话框中单击规那么属性对话框中单击“绑定列。绑定列。n在在“表的下拉列表中选择表的下拉列表中选择?商品一览表商品一览表?n在在左左边边的的“未未绑绑定定的的列列中中分分别别选选择择“平平均均进进价价“参参考考价价格格“库存量字段,单击库存量字段,单击“添加按钮,将它们移到右边的添加按钮,将它们移到右边的“绑定列中。绑定列中。n单击单击“应用应用“确定完成规那么的绑定。确定完成规那么的绑定。【实例例练习4-84-8】 根根据据表表1.25在在

122、企企业业管管理理器器中中创创立立?电电脑脑器器材材销销售售管管理理?diannaoxs数数据据库的库的?销售表销售表2006?。1设计设计?销售表销售表2006?的表结构,如表的表结构,如表4.11所示。所示。l“序序号号字字段段设设置置主主键键约约束束;并并设设置置为为自自动动编编号号的的“标标识识列列为为“是是,标识种子初值为,标识种子初值为1,增量为,增量为1。l“销售日期设置系统销售日期设置系统“当前日期为默认值约束。当前日期为默认值约束。l“货号设置外键约束引用货号设置外键约束引用?商品一览表商品一览表?的的“货号字段。货号字段。l“货名货名“金额可允许为空,其余字段不允许为空。金额

123、可允许为空,其余字段不允许为空。l“单价单价“数量设置检查约束必须大于数量设置检查约束必须大于0。l“金额可直接设置默认值金额可直接设置默认值0,检查约束,检查约束“不能为负大于等于不能为负大于等于0。l“销售员设置外键约束引用销售员设置外键约束引用?员工表员工表?的的“姓名字段。姓名字段。【实例例练习4-84-8】 2?销售表销售表2006?的初步设计结果如图的初步设计结果如图4-21所示。所示。注注意意:“序序号号字字段段设设置置主主键键,并并设设置置“标标识识列列为为“是自动编号,标识种子初值为是自动编号,标识种子初值为1,增量为,增量为1。【实例例练习4-84-8】 3“货货号号设设置

124、置外外键键约约束束引引用用?商商品品一一览览表表?的的“货货号号字字段段;“销销售售员员设设置置外外键键约约束束引引用用?员员工工表表?的的“姓姓名名字字段。段。n选选择择“货货号号字字段段,翻翻开开“属属性性对对话话框框选选择择“关关系系选选项卡。项卡。n单单击击“新新建建按按钮钮:在在“主主键键表表中中选选择择?商商品品一一览览表表?的的“货货号号字字段段;在在“外外键键表表中中选选择择?销销售售表表2006?“货货号号字段;字段;n在在“关关系系选选项项卡卡下下部部取取默默认认设设置置,选选择择级级联联更更新新相相关关记记录。录。n再再单单击击“新新建建按按钮钮:在在“主主键键表表中中选

125、选择择?员员工工表表?的的“姓姓名名字字段段;在在“外外键键表表中中选选择择?销销售售表表2006?“销销售售员员字段;字段;n在在“关关系系选选项项卡卡下下部部取取默默认认设设置置,选选择择级级联联更更新新相相关关记记录。录。n单击单击“关闭,即可完成外键约束设置。关闭,即可完成外键约束设置。【实例例练习4-84-8】 4“金金额额字字段段绑绑定定【实实例例练练习习4-4】创创立立的的规规那那么么对对象象“不能为负。不能为负。n在在根根目目录录中中单单击击diannaoxs数数据据库库“规规那那么么节节点点,右右键键单单击击“不不能能为为负负规规那那么么对对象象,在在快快捷捷菜菜单单中中选选

126、择择“属属性性命令,翻开命令,翻开“规那么属性对话框。规那么属性对话框。n单单击击“绑绑定定列列按按钮钮,弹弹出出“绑绑定定列列对对话话框框。在在“表表中中选选择择“销销售售表表2006;选选择择“金金额额字字段段并并将将其其“添添加加到到“绑定列中。绑定列中。n单单击击“应应用用“确确定定,完完成成绑绑定定“不不能能为为负负规规那那么么的操作。的操作。【实例例练习4-84-8】 5创创立立“大大于于0的的规规那那么么对对象象,绑绑定定到到“单单价价“数数量字段作为必须大于量字段作为必须大于0的检查约束。的检查约束。n右右键键单单击击“规规那那么么图图标标选选择择“新新建建规规那那么么命命令令

127、,弹弹出出“规那么属性对话框。规那么属性对话框。n在在“名名称称中中输输入入规规那那么么名名称称“大大于于0。在在“文文本本中中输入条件表达式:输入条件表达式:x0n单击单击“确定,即完成了规那么对象确定,即完成了规那么对象“大于大于0的创立。的创立。n再再在在“规规那那么么对对象象列列表表中中右右键键单单击击“大大于于0规规那那么么对对象选择象选择“属性命令,翻开属性命令,翻开“规那么属性对话框。规那么属性对话框。n单单击击“绑绑定定列列按按钮钮,弹弹出出“绑绑定定列列对对话话框框,将将“单单价价“数量移动到被绑定列。数量移动到被绑定列。n单击关闭,完成检查约束的设置。单击关闭,完成检查约束

128、的设置。【实例例练习4-84-8】 6“销销售售日日期期设设置置系系统统当当前前日日期期为为默默认认值值,可可将将【实实例例练练习习4-7】创创立立的的“当当前前日日期期默默认认对对象象绑绑定定到到“销销售售日日期字段。期字段。n右右键键单单击击“当当前前日日期期默默认认对对象象翻翻开开“默默认认属属性性对对话话框框单击单击“绑定列按钮。绑定列按钮。n在在“表中选择表中选择“销售表销售表2006。n在在“未未绑绑定定列列选选择择“销销售售日日期期,单单击击“添添加加按按钮移到右边钮移到右边“绑定列中。绑定列中。n单击单击“应用应用“确定完成绑定默认值的操作。确定完成绑定默认值的操作。4.5 4

129、.5 用用T-SQLT-SQL语句句创立数据表及立数据表及约束束对象象 、用、用CREATE TABLECREATE TABLE语句创立表结构语句创立表结构CREATE TABLE CREATE TABLE 表名表名(字段名字段名 字段属性字段属性 字段约束字段约束, n) , n) l l 列的定义必须放在圆括号中。列的定义必须放在圆括号中。ll语法中参数顺序不能改动。语法中参数顺序不能改动。ll最多可以设置最多可以设置10241024个字段。个字段。1 1、字段属性、字段属性 数据类型数据类型(长度长度) identity() identity(初始值初始值 , ,步长值步长值) ) nu

130、ll | not null null | not null l l 默认长度的数据类型默认长度的数据类型“(“(长度长度) )不允许指定不允许指定, ,需需要指定长度时圆括号不能省略。要指定长度时圆括号不能省略。l Identityl Identity用于指定该列为自动编号字段标识用于指定该列为自动编号字段标识列;列;lnull|not nulllnull|not null指定该列允许空值指定该列允许空值( (默认默认) )或不允或不允许空值。许空值。、用、用CREATE TABLECREATE TABLE语句创立表结构语句创立表结构2 2、字段约束、字段约束定义格式:定义格式: constr

131、aint constraint 约束名约束名 primary key ( primary key (主键列名主键列名) constraint constraint 约束名约束名 unique ( unique (惟一列名惟一列名) constraint constraint 约束名约束名 foreign key ( foreign key (外键列外键列名名) ) references references 引用表名引用表名( (引引用列名用列名) ) constraint constraint 约束名约束名 check( check(检查表达式检查表达式) ) constraint cons

132、traint 约束名约束名 default default 默认值默认值ll约束名为以后修改管理时使用,省略为系统默约束名为以后修改管理时使用,省略为系统默认的约束名。认的约束名。ll字段约束也可以在创立表结构以后另外单独设字段约束也可以在创立表结构以后另外单独设置。置。ll定义字段时同时定义所绑定的约束时,可以省定义字段时同时定义所绑定的约束时,可以省略列名。略列名。ll不管创立表时或单独创立规那么对象,检查表不管创立表时或单独创立规那么对象,检查表达式中都不能使用任何字段名,需要引用字段的复达式中都不能使用任何字段名,需要引用字段的复杂约束必须用触发器实现。杂约束必须用触发器实现。【实例例

133、练习4-94-9】 根据表根据表1.231.23用用SQLSQL语句创立语句创立? ?电脑器材销售管理电脑器材销售管理?diannaoxs?diannaoxs数据库的数据库的? ?供货商表供货商表? ?。1 1设计设计? ?供货商表供货商表? ?的表结构,如表的表结构,如表4.124.12所示。所示。 l l 除联系人以外其余字段不允许为空。除联系人以外其余字段不允许为空。l“l“供货商供货商IDID为主键,可设置检查约束只允许输入为主键,可设置检查约束只允许输入4 4位英文字母或数字字符。位英文字母或数字字符。l “l “供货商供货商“厂家地址厂家地址“账户设置为惟一约束。账户设置为惟一约束

134、。l “l “账户可设置检查约束只允许输入数字字符和账户可设置检查约束只允许输入数字字符和“-“-号。号。【实例例练习4-94-9】 2 2创立创立? ?供货商表供货商表? ?的的SQLSQL语句语句 Use diannaoxs - Use diannaoxs - 翻开翻开diannaoxs diannaoxs 数据库数据库 CREATE TABLE CREATE TABLE 供货商表供货商表 - - 创立创立“供货商表数据表供货商表数据表 ( ( 供货商供货商ID Char (4) not null primary key ID Char (4) not null primary key c

135、heck( check(供货商供货商ID like a-zA-Z0-9a-zA-Z0-9ID like a-zA-Z0-9a-zA-Z0-9 a-zA-Z0-9a-zA-Z0-9), a-zA-Z0-9a-zA-Z0-9), 供货商供货商 Nvarchar(15) not null , Nvarchar(15) not null , 厂家地址厂家地址 Nvarchar(20) not null unique , Nvarchar(20) not null unique , 账户账户 Char(15) not null unique , Char(15) not null unique , 联系

136、人联系人 Varchar(8) - Varchar(8) - 默认默认nullnull允许空值允许空值 ) )l l “供供货货商商IDID设设置置的的检检查查约约束束未未指指定定约约束束名名,那那么么使使用用系系统统默默认认约约束束名名。检检查查表表达达式式只只允允许许输输入入4 4个个大大小小写写英英文文字字母母或或数数字字,输输入入数数据时必须是据时必须是4 4个字符。个字符。l “l “供货商应该设置惟一约束供货商应该设置惟一约束uniqueunique,我们留待后面单独设置。,我们留待后面单独设置。l l “账账户户应应该该设设置置检检查查约约束束只只允允许许输输入入数数字字字字符符

137、,我我们们留留待待后后面面使用使用SQLSQL语句创立规那么对象,再绑定到该字段。语句创立规那么对象,再绑定到该字段。【实例例练习4-94-9】 3 3在查询分析器中输入在查询分析器中输入SQLSQL语句,按语句,按F5F5或工具栏的或工具栏的“三三角执行按钮,运行结果在窗口中显示角执行按钮,运行结果在窗口中显示“命令已成功完成命令已成功完成,表示,表示“供货商表创立成功,如图供货商表创立成功,如图4-224-22所示。所示。翻开企业管理器的翻开企业管理器的diannaoxs diannaoxs 数据库可以看到该数据表,数据库可以看到该数据表,假设企业管理器已经处于翻开状态,那么应该展开数据表

138、假设企业管理器已经处于翻开状态,那么应该展开数据表窗口单击窗口单击“刷新按钮即可看到。刷新按钮即可看到。在企业管理器中选中在企业管理器中选中? ?供货商表供货商表? ?,在右键快捷菜单中选择,在右键快捷菜单中选择“翻开表翻开表“返回所有行可以看到只有结构框架还没返回所有行可以看到只有结构框架还没有数据的空表。如图有数据的空表。如图4-234-23所示。所示。、用、用ALTER TABLEALTER TABLE语句修改表结构语句修改表结构 SQLSQL修改表结构语句修改表结构语句ALTER TABLEALTER TABLE的语法格式:的语法格式: ALTER TABLE ALTER TABLE

139、表名表名 add add 列名列名 数据类型数据类型(长度长度) null|not null) null|not null default default 默认值默认值 | alter column | alter column 列名列名 数据类型数据类型(长度长度)null|not null)null|not null | drop column | drop column 字段名字段名 , n , n | add constraint | add constraint 约束名约束名 约束类型定义约束类型定义 列约束定义列约束定义 , n FOR , n FOR 列名列名 | drop co

140、nstraint | drop constraint 约束名约束名 , n , n | nocheck constraint | nocheck constraint 约束名约束名 | check constraint | check constraint 约束名约束名 | Disable trigger | Disable trigger 触发器名触发器名 | | Enable trigger Enable trigger 触发器名触发器名 注意:注意:ALTER TABLE ALTER TABLE 语句中只能使用句中只能使用单个子句,即各个子句不能个子句,即各个子句不能组合合使用。使用。

141、1 1、使用、使用addadd子句添加列子句添加列ALTERTABLE表名add字段名数据类型(长度)null|notnulldefault默认值l新增加字段时可以同时设置空值约束、默认值约束。l假设不允许为空时那么必须给新增加的列指定默认值,否那么语句执行错误。【例4-7】向?供货商表?添加一个“联系字段,数据类型为定长字符型char(13),长度13,不允许为空必须设置默认值。代码如下:USEdiannaoxsALTERTABLE供货商表add联系char(13)notnulldefault00000000注意:添加的字段假设不允许为空那么必须设置默认值,如果不允许为空又不需要默认值,可在

142、添加字段时先允许为空,再用altercolumn子句修改为不允许为空,那么没有默认值。2 2、使用、使用alter columnalter column子句修改字段属性子句修改字段属性 使使用用alter alter columncolumn子子句句可可修修改改字字段段的的数数据据类类型型、长长度度、是是否允许为空值等属性,其语法格式为:否允许为空值等属性,其语法格式为: ALTER TABLE ALTER TABLE 表名表名 alter column alter column 字段名字段名 数据类型数据类型(长度长度)null|not null)null|not nullll将将一一个个原

143、原来来允允许许为为空空值值的的列列改改为为不不允允许许为为空空时时,必必须须保保证证表中已有记录中该列没有空值,而且该列没有创立索引。表中已有记录中该列没有空值,而且该列没有创立索引。ll改改变变数数据据类类型型时时,如如果果原原来来设设置置了了默默认认值值约约束束,一一般般应应解解除或删除约束后再修改,否那么很容易发生错误。除或删除约束后再修改,否那么很容易发生错误。 【例例4-84-8】将将? ?供供货货商商表表? ?的的“联联系系 字字段段,数数据据长长度度改改为为2020,允许为空,允许为空nullnull可以省略。代码如下:可以省略。代码如下: USE diannaoxs USE d

144、iannaoxs ALTER TABLE ALTER TABLE 供货商表供货商表 alter column alter column 联系联系 char(20) char(20) 3 3、用、用add constraintadd constraint子句添加列约束子句添加列约束 使使用用add add constraintconstraint子子句句可可一一次次向向表表的的不不同同字字段段添添加加一一个个或或多多个个约约束束,其语法格式:其语法格式: ALTER TABLE ALTER TABLE 表名表名 add constraint add constraint 约束名约束名 约束类型及

145、定义约束类型及定义FOR FOR 列名列名,n ,n l l 该该语语句句添添加加约约束束必必须须指指定定约约束束名名,而而且且必必须须是是惟惟一一的的,不不能能与与数数据据库库已定义的其他规那么对象、默认值等对象同名。已定义的其他规那么对象、默认值等对象同名。ll假假设设约约束束类类型型及及定定义义中中没没有有指指定定列列名名时时,必必须须用用FORFOR指指定定列列名名如如默默认认值值约约束束;假假设设约约束束类类型型及及定定义义中中已已包包含含了了列列名名,那那么么不不允允许许使使用用FORFOR子句。子句。ll如如果果只只允允许许有有一一个个约约束束的的列列已已经经设设置置了了约约束束

146、检检查查约约束束除除外外,那那么原有约束未解除不能添加新的约束。么原有约束未解除不能添加新的约束。ll使用一个约束名可以为不同字段添加多个约束:使用一个约束名可以为不同字段添加多个约束: u u设置主键约束:设置主键约束: primary key( primary key(列名列名) ) u u 设置惟一约束:设置惟一约束: unique( unique(列名列名) ) uu设设置置外外键键约约束束: foreign foreign key(key(列列名名) ) references references 引引用用表表名名( (引引用用列名列名) ) u u设置检查约束:设置检查约束: ch

147、eck( check(检查表达式检查表达式) ) u u设置默认值约束:设置默认值约束: default default 默认值默认值 【实例例练习4-104-10】 为为? ?供供货货商商表表? ?的的“供供货货商商添添加加约约束束“惟惟一一厂厂家家,代码如下:代码如下: USE diannaoxs USE diannaoxs ALTER TABLE ALTER TABLE 供货商表供货商表 add constraint add constraint 惟一厂家惟一厂家 unique( unique(供货商供货商) ) 注注意意:约约束束定定义义中中已已使使用用了了字字段段名名,假假设设再再使

148、使用用“FOR “FOR 供货商会产生错误。供货商会产生错误。 运运行行后后显显示示“命命令令已已成成功功完完成成。,“惟惟一一厂厂家家的的惟一约束添加成功。惟一约束添加成功。 【例例4-94-9】为为? ?供供货货商商表表? ?的的“联联系系 字字段段设设置置名名字字为为“ “ 约约束束的的惟惟一一约约束束,默默认认值值为为“0531-12345678“0531-12345678。代码如下:。代码如下: ALTER TABLE ALTER TABLE 供货商表供货商表 add constraint add constraint 约束约束 unique( unique(联系联系 ), ), d

149、efault 0531-12345678 FOR default 0531-12345678 FOR 联系联系 4 4、用、用nocheck|check constraintnocheck|check constraint子句设置子句设置列约束无效、恢复有效列约束无效、恢复有效 使使用用nocheck nocheck constraintconstraint子子句句可可使使某某个个字字段段的的某某个个约约束束暂暂时时无无效效约约束束仍仍然然存存在在,但但暂暂时时不不起起作作用用,用用check check constraintconstraint子子句句可可使使无无效效的约束恢复有效。其语法格

150、式为:的约束恢复有效。其语法格式为: ALTER TABLE ALTER TABLE 表名表名 nocheck constraint nocheck constraint 约束名约束名 - - 指定约束暂时无效指定约束暂时无效 ALTER TABLE ALTER TABLE 表名表名 check constraint check constraint 约束名约束名 - - 指定约束恢复有效指定约束恢复有效 例例如如我我们们在在? ?销销售售表表? ?中中设设置置了了“数数量量“单单价价“金金额额必必须须大大于于0 0的的约约束束,当当有有客客户户退退货货时时可可以以使使约约束束暂暂时时无无效效

151、,输输入入退退货货记记录录冲冲红红后再恢复有效也可以先解除绑定的规那么,退货后再重新绑定。后再恢复有效也可以先解除绑定的规那么,退货后再重新绑定。 【例例4-104-10】使使? ?供供货货商商表表? ?的的约约束束“惟惟一一厂厂家家暂暂时时无无效效,然然后后再再恢恢复复其有效。代码如下:其有效。代码如下: ALTER TABLE ALTER TABLE 供货商表供货商表 nocheck constraint nocheck constraint 惟一厂家惟一厂家 ALTER TABLE ALTER TABLE 供货商表供货商表 check constraint check constrain

152、t 惟一厂家惟一厂家5 5、用、用drop constraintdrop constraint子句删除列约束子句删除列约束 使使用用drop drop constraintconstraint子子句句可可以以从从指指定定表表中中删删除除一一个个或或多多个个列列约约束束,其语法格式为:其语法格式为: ALTER TABLE ALTER TABLE 表名表名 drop constraint drop constraint 约束名约束名 , n , n 6 6、用、用drop columndrop column子句删除字段子句删除字段 使使用用drop drop columncolumn子子句句可可

153、以以删删除除指指定定表表中中的的一一个个或或多多个个列列,其其语语句句格格式为:式为: ALTER TABLE ALTER TABLE 表名表名 drop column drop column 字段名字段名 , n , n 注注意意:删删除除列列时时必必须须先先删删除除该该字字段段上上创创立立的的索索引引和和约约束束后后,才才能能删删除除该列。该列。 【例【例4-114-11】删除】删除? ?供货商表供货商表? ?的的“联系联系 字段。字段。必须先删除该字段上的默认必须先删除该字段上的默认 、“ “ 约束惟一约束。代码如下:约束惟一约束。代码如下: USE diannaoxs USE dian

154、naoxs ALTER TABLE ALTER TABLE 供货商表供货商表 drop constraint drop constraint 约束约束 - -删除约束删除约束 ALTER TABLE ALTER TABLE 供货商表供货商表 drop column drop column 联系联系 - -删除字段删除字段 运运行行结结果果显显示示“命命令令已已成成功功执执行行,翻翻开开? ?供供货货商商表表? ?那那么么“联联系系 已删除。已删除。 、用、用T-SQLT-SQL语句创立、绑定和解除约束对象语句创立、绑定和解除约束对象1、使用SQL语句创立、绑定或解除规那么对象1用CREATER

155、ULE语句创立规那么对象语法格式:CREATERULE规那么名称AS条件表达式l规那么名称必须符合标识符的构成规那么。l条件表达式中不能包含任何字段名或其他数据库对象名,可以用开头的局部变量代表自己表中被绑定字段。lCREATERULE不能与其他语句组合使用,必须单独作为一个批处理。、用、用T-SQLT-SQL语句创立、绑定和解除约束对象语句创立、绑定和解除约束对象2 2用系统存储过程绑定和解绑规那么用系统存储过程绑定和解绑规那么 在在查查询询分分析析器器中中用用系系统统存存储储过过程程sp_bindrulesp_bindrule绑绑定定规规那那么么的语法格式为:的语法格式为: EXECUTE

156、 sp_bindrule EXECUTE sp_bindrule 规那么名称规那么名称, 表表名名. .字字段段名名|自自定定义义数数据据类类型型名名 使使用用系系统统存存储储过过程程sp_unbindrulesp_unbindrule解解绑绑规规那那么么的的语语法法格格式式为:为: EXECUTE sp_unbindrule EXECUTE sp_unbindrule 表表名名. .字字段段名名|自自定定义义数数据据类类型型名名ll规那么不能绑定在系统的根本数据类型上。规那么不能绑定在系统的根本数据类型上。ll规规那那么么必必须须与与绑绑定定字字段段的的数数据据类类型型相相匹匹配配,不不能能

157、绑绑定定在在texttext、imageimage字段上。字段上。ll假假设设被被绑绑定定字字段段上上已已有有绑绑定定的的规规那那么么对对象象,那那么么绑绑定定新新规那么时原有规那么被自动替换。规那么时原有规那么被自动替换。ll当当一一个个字字段段同同时时绑绑定定规规那那么么和和默默认认值值时时,默默认认值值必必须须满满足规那么的要求。足规那么的要求。【实例例练习4-114-11】 为为? ?供供货货商商表表? ?的的“账账户户字字段段char(15)char(15)创创立立并并绑绑定定前前8 8个个字字符符只只允允许许是是数数字字和和“-“-号号的的规规那那么么对对象象“数数字字帐帐号号。代

158、码如下:。代码如下: USE USE diannaoxs diannaoxs - - 翻翻开开数数据据库库diannaoxsdiannaoxs创创立立规规那那么么 GO GO CREATE CREATE RULE RULE 数数字字帐帐号号 - - 创创立立“数数字字帐帐号号规规那那么么对象对象 AS x like -0-9-0-9-0-9-0-9-0-9 AS x like -0-9-0-9-0-9-0-9-0-9 -0-9-0-9-0-9% -0-9-0-9-0-9% GO GO EXEC sp_bindrule EXEC sp_bindrule 数字帐号数字帐号, , 供货商表供货商表.

159、 .账户账户 注注意意:考考虑虑银银行行帐帐号号长长度度不不一一,该该规规那那么么要要求求至至少少输输入入8 8位位数数且且只只允允许许数数字字和和“-“-,% %表表示示后后面面的的字字符符可可以以任任意,否那么只允许输入意,否那么只允许输入8 8个字符。个字符。 【例例4-124-12】将将在在企企业业管管理理器器中中绑绑定定到到? ?销销售售表表2006?“2006?“单单价价字字段段上上的的“大大于于0 0规规那那么么解解除除,并并用用SQLSQL语语句句重重新绑定。新绑定。 USE diannaoxs - USE diannaoxs - 翻开数据库翻开数据库diannaoxsdian

160、naoxs EXEC sp_unbindrule EXEC sp_unbindrule 销售表销售表2006.2006.单价单价 EXEC sp_bindrule EXEC sp_bindrule 大于大于0 , 0 , 销售表销售表2006.2006.单价单价 运行结果如图运行结果如图4-244-24所示。所示。2 2、使用、使用SQLSQL语句创立、绑定或解除默认值语句创立、绑定或解除默认值对象对象1 1用用CREATE DEFAULT CREATE DEFAULT 语句创立默认值对象语句创立默认值对象 CREATE DEFAULT CREATE DEFAULT 默认值名称默认值名称 AS

161、 AS 常量表达式常量表达式ll默认值名称必须符合标识符的构成规那么;默认值名称必须符合标识符的构成规那么;ll常常量量表表达达式式只只能能包包含含常常量量、内内置置函函数数或或数数学学表表达达式式,不不能包含任何字段名或其他对象名。能包含任何字段名或其他对象名。ll如果默认值长度大于被绑定的字段,那么该值将被截断。如果默认值长度大于被绑定的字段,那么该值将被截断。lCREATE lCREATE DEFAULTDEFAULT不不能能与与其其他他语语句句组组合合使使用用,必必须须单单独独作作为一个批处理。为一个批处理。2 2、使用、使用SQLSQL语句创立、绑定或解除默认值语句创立、绑定或解除默

162、认值对象对象2 2用系统存储过程绑定和解绑默认值用系统存储过程绑定和解绑默认值 在在查查询询分分析析器器中中用用系系统统存存储储过过程程sp_bindefaultsp_bindefault绑绑定定、用用sp_unbindefaultsp_unbindefault解绑默认值,其语法格式为:解绑默认值,其语法格式为: EXECUTE sp_bindefault EXECUTE sp_bindefault 默认值名称默认值名称 , , 表表名名. .字字段段名名 | | 自自定定义义数数据据类类型型名名 EXECUTE sp_unbindefault EXECUTE sp_unbindefault

163、表表名名. .字字段段名名 | | 自自定定义义数数据据类类型型名名ll不不能能将将默默认认值值对对象象绑绑定定到到标标识识列列IDENTITYIDENTITY自自动动编编号号字字段段、不不能能绑绑定定到到在在企企业业管管理理器器创创立立表表时时已已设设置置默默认认值值的的字字段,也不能绑定到根本数据类型上。段,也不能绑定到根本数据类型上。ll假假设设被被绑绑定定字字段段上上原原有有绑绑定定的的默默认认值值对对象象,那那么么绑绑定定新新默认值对象时原有默认值对象被自动替换;默认值对象时原有默认值对象被自动替换;ll假假设设绑绑定定成成功功那那么么sp_bindefaultsp_bindefau

164、lt存存储储过过程程返返回回值值为为0 0,绑定失败返回绑定失败返回1 1。【实例例练习4-124-12】 为为? ?供供货货商商表表? ?的的“账账户户字字段段char(15)char(15)创创立立并并绑绑定定一一个个默认值对象默认值对象“默认账户。语句代码如下:默认账户。语句代码如下: USE diannaoxs USE diannaoxs GO GO CREATE DEFAULT CREATE DEFAULT 默认账户默认账户 AS 0000-0000-0000 AS 0000-0000-0000 GO GO EXEC EXEC sp_bindefault sp_bindefault

165、默默认认账账户户 , , 供供货货商商表表. .账账户户 注注意意:账账户户已已设设置置惟惟一一约约束束,再再设设置置默默认认值值实实际际是是没没有有意意义义的的,这这里里主主要要是是为为了了练练习习语语法法,在在输输入入数数据据时时假假设设只只有一个厂家没有账户,可以使用该默认值。有一个厂家没有账户,可以使用该默认值。 【例例4-134-13】 用用SQLSQL语语句句将将在在企企业业管管理理器器中中创创立立并并绑绑定定到到? ?销销售售表表2006?“2006?“销销售售日日期期字字段段上上的的“当当前前日日期期默默认认值值对象解绑并重新绑定。对象解绑并重新绑定。 USE diannaox

166、s USE diannaoxs EXEC sp_unbindefault EXEC sp_unbindefault 销售表销售表2006.2006.销售日期销售日期 EXEC sp_bindefault EXEC sp_bindefault 当前日期当前日期 , , 销售表销售表2006.2006.销售日期销售日期运行结果如图运行结果如图4-254-25所示。所示。【实例例练习4-134-13】 根根 据据 表表 1.241.24用用 SQLSQL语语 句句 创创 立立 ? ?电电 脑脑 器器 材材 销销 售售 管管 理理?diannaoxs?diannaoxs数据库的数据库的? ?进货表进货

167、表2006?2006?。1 1设计设计? ?进货表进货表2006?2006?的表结构,如表的表结构,如表4.124.12所示。所示。ll所有字段均不允许为空。所有字段均不允许为空。l“l“序序号号字字段段设设置置主主键键约约束束;并并设设置置为为自自动动增增长长的的“标识列。标识列。l “l “进货日期设置系统进货日期设置系统“当前日期为默认值约束。当前日期为默认值约束。l“l“货号设置外键约束与货号设置外键约束与? ?商品一览表商品一览表? ?建立关联。建立关联。l“l“数量数量“进价设置检查约束必须大于进价设置检查约束必须大于0 0。l“l“供货商供货商IDID设置外键约束与设置外键约束与

168、? ?供货商表供货商表? ?进行关联。进行关联。l“l“收货人设置外键约束与收货人设置外键约束与? ?员工表员工表? ?建立关联。建立关联。 【实例例练习4-134-13】 2 2简单创立简单创立? ?进货表进货表2006?2006?的的SQLSQL语句:语句: Use diannaoxs Use diannaoxs CREATE TABLE CREATE TABLE 进货表进货表2006 2006 ( ( 序号序号 BigInt identity(1,1) not null BigInt identity(1,1) not null primary key, primary key, 进货日

169、期进货日期 Smalldatetime not null,- Smalldatetime not null,-未设置默认值未设置默认值 货号货号 Char(4) not null Char(4) not null foreign key references foreign key references 商品一览表商品一览表( (货号货号), ), 数量数量 Int not null check( Int not null check( 数量数量0 ),0 ), 进价进价 Smallmoney not null, - Smallmoney not null, - 未设检查约束未设检查约束 供供

170、货货商商ID ID Char Char not not null null -未未指指定定长长度度未未设设外外键键约约束束 ) )【实例例练习4-134-13】 l l 按按照照该表表结构构的的设计,各各个个字字段段及及其其属属性性可可在在此此全全部部设计完完成成,本本例例简单创立立?进货表表2006?2006?有有意意省省略略了了“ “收收货人字段及其外人字段及其外键约束,以便之后修改添加。束,以便之后修改添加。l l 因因为在在企企业管管理理器器创立立?销售售表表2006?2006?时已已经创立立了了“ “大大于于00的的规那那么么对象象,为了了熟熟悉悉语法法,对“ “数数量量单独独设置了

171、大于置了大于00的的检查约束而没有再指定束而没有再指定约束名称。束名称。l l 另另外外还缺缺少少了了“ “进货日日期期的的默默认值、“ “进价价大大于于00的的检查约束束、以以及及“ “供供货商商IDID的的字字段段长度度省省略略默默认为11,留待之后修改。,留待之后修改。3 3在在查询分分析析器器中中输入入并并执行行上上述述语句句,结果果窗窗口口中中显示示语句句成成功功完完成成信信息息,表表示示建建表表语句句成成功功执行行。运运行行结果如果如图4-264-26所示。所示。【实例例练习4-134-13】 4 4添添加加“收收货货人人字字段段并并设设置置外外键键约约束束引引用用? ?员员工工表

172、表?“?“姓姓名名字字段。段。ll该该字字段段不不允允许许为为空空且且不不需需要要默默认认值值,添添加加字字段段时时可可以以先先指指定定允允许许空,再修改为不允许空,这样可以不必设置默认值。空,再修改为不允许空,这样可以不必设置默认值。ll用用SQLSQL语句设置外键约束,必须指定约束名语句设置外键约束,必须指定约束名“员工姓名。员工姓名。 SQL SQL代码如下:代码如下: USE diannaoxs USE diannaoxs ALTER TABLE ALTER TABLE 进货表进货表2006 2006 add add 收收货货人人 Varchar(8) Varchar(8) -默默认认

173、允允许许为为空空,否否那那么么必必须须设设置置 默认值默认值 ALTER TABLE ALTER TABLE 进货表进货表2006 - 2006 - 修改为不允许为空,类型不能省略修改为不允许为空,类型不能省略 alter column alter column 收货人收货人 Varchar(8) not null Varchar(8) not null ALTER TABLE ALTER TABLE 进货表进货表2006 - 2006 - 添加外键约束添加外键约束 add constraint add constraint 员工姓名员工姓名 foreign key( foreign key(

174、收货人收货人) ) references references 员工表员工表( (姓名姓名) ) 运行结果如图运行结果如图4-274-27所示。所示。【实例例练习4-134-13】 5 5将将“当前日期默认对象绑定到当前日期默认对象绑定到“进货日期字段上。进货日期字段上。 EXEC EXEC sp_bindefault sp_bindefault 当当前前日日期期 , , 进进货货表表2006.2006.进进货货日日期期 运行结果显示:已将默认值绑定到列。运行结果显示:已将默认值绑定到列。6 6将将“大于大于0 0的规那么对象绑定到的规那么对象绑定到“进价字段上。进价字段上。 EXEC sp_

175、bindrule EXEC sp_bindrule 大于大于0, 0, 进货表进货表2006.2006.进价进价 运行结果显示:已将规那么绑定到表的列上。运行结果显示:已将规那么绑定到表的列上。7 7将将“供供货货商商IDID字字段段长长度度改改为为4 4并并添添加加外外键键约约束束“供供货货厂厂家家,引用引用? ?供货商表供货商表? ?的的“供货商供货商IDID字段。字段。SQLSQL代码如下:代码如下: USE diannaoxs USE diannaoxs ALTER ALTER TABLE TABLE 进进货货表表2006 2006 -修修改改字字段段长长度度为为6 6,not not

176、 nullnull不不能能省省略略 alter column alter column 供货商供货商ID Char(4) not nullID Char(4) not null ALTER TABLE ALTER TABLE 进货表进货表2006 - 2006 - 添加外键约束添加外键约束“供货厂家供货厂家 add constraint add constraint 供货厂家供货厂家 foreign key( foreign key(供货商供货商ID) ID) references references 供货商表供货商表( (供货商供货商ID)ID) 运行结果显示:命令已成功完成。运行结果显示

177、:命令已成功完成。4.6 4.6 查看表信息、看表信息、输入数据、入数据、编辑和和删除除记录 、查看表信息、查看表信息1 1、用企业管理器查看表信息、用企业管理器查看表信息1 1查看表结构查看表结构 展开数据库选中表节点,右边窗口会显示这一数据库中展开数据库选中表节点,右边窗口会显示这一数据库中所有的表,对于每个表,都会显示它的所有者、类型和创所有的表,对于每个表,都会显示它的所有者、类型和创立时间,如图立时间,如图4-294-29所示。所示。在列表中选择一个表,单击鼠标右键翻开快捷菜单,选择在列表中选择一个表,单击鼠标右键翻开快捷菜单,选择“属性命令,即可以查看该表每一列的定义,如图属性命令

178、,即可以查看该表每一列的定义,如图4-304-30所示为所示为? ?商品一览表商品一览表? ?的定义信息。的定义信息。4.64.6.1.1 查看表信息看表信息2 2查看表约束查看表约束 如如同同在在企企业业管管理理器器中中设设计计表表结结构构一一样样,选选择择要要查查看看的的表表,右右键键单单击击选选择择“设设计计表表命命令令,进进入入该该表表的的设设计计器器可可查查看或修改主键、默认值、空值约束的信息。看或修改主键、默认值、空值约束的信息。 再再单单击击工工具具栏栏“表表和和索索引引属属性性按按钮钮,或或者者选选中中某某个个字字段段,右右键键快快捷捷菜菜单单项项选选择择择择“属属性性弹弹出出

179、“表表属属性性对对话话框框,在在“表表“关关系系“索索引引/ /键键“CHECK“CHECK约约束束五五个选项卡中,可查看或修改表的相关约束及属性。个选项卡中,可查看或修改表的相关约束及属性。1 1、用企业管理器查看表信息、用企业管理器查看表信息3 3查查看看表表与与表表、以以及及表表与与各各种种约约束束对对象象之之间间的的关关系系相关性相关性选选择择要要查查看看的的表表,单单击击“操操作作菜菜单单或或者者右右键键单单击击要要查查看看的的表表,选选择择“所所有有任任务务“显显示示相相关关性性命命令令,弹弹出出“相相关关性性对对话话框框,即即可可查查看看表表之之间间的的关关系系。如如哪哪些些对对

180、象象是是依依附附于于该该表表的的,该该表表又又依依附附于于哪哪些些对对象象等等等等。如如图图4-314-31所所示。示。在在? ?进进货货表表2006?2006?的的相相关关性性对对话话框框中中可可以以看看到到该该表表所所依依附附的的假假设设干干对对象象和和? ?供供货货商商表表?商商品品一一览览表表?员员工工表表? ?,这这些些表表的变化修改将会影响到的变化修改将会影响到? ?进货表进货表2006?2006?。1 1、用企业管理器查看表信息、用企业管理器查看表信息4 4查看其他对象的信息查看其他对象的信息 单单击击“表表“视视图图“规规那那么么“默默认认等等对对象象节节点点,都都可可在在右右

181、边边窗窗口口显显示示详详细细列列表表,右右键键单单击击某某个个对对象象选选择择属属性性,便便可可查查看看该该对对象象的的属属性性并并可可进进行行修修改改。如如图图4-324-32所示。所示。2 2、使用、使用T-SQLT-SQL系统存储过程系统存储过程sp_helpsp_help语句显示表语句显示表结构及相关性结构及相关性语法格式:语法格式: EXECUTE sp_help EXECUTE sp_help 表名表名 省略表名那么查看所有对象的简单信息,如:省略表名那么查看所有对象的简单信息,如:sp_helpsp_help选择表名可查看指定表的信息,如:选择表名可查看指定表的信息,如: sp_

182、help sp_help 商品一览表商品一览表那那么么可可查查阅阅? ?商商品品一一览览表表? ?有有关关的的结结构构、文文件件分分组组、索索引引、各各种种约约束束、表表的的依依赖赖关关系系相相关关性性等等详详细细信信息息。如如图图4-334-33所示。所示。3 3、使用查询分析器的、使用查询分析器的“对象浏览器查看表的对象浏览器查看表的结构结构 如图如图4-344-34所示。所示。 4.6.2、向数据表输入数据、向数据表输入数据 新新创创立立的的表表只只是是创创立立完完成成了了表表的的结结构构框框架架,表表中中还还没没有有任任何何记记录录数数据据,可可以以使使用用企企业业管管理理器器向向数数

183、据据表表中中添添加加记记录录,也也可可以以使使用用SQLSQL的的INSERTINSERT语语句句向向表表中中插插入入记记录。录。 注注意意:输输入入本本书书【实实例例练练习习】数数据据时时要要注注意意顺顺序序,按按照照表表的的外外键键依依附附关关系系只只有有输输入入了了? ?商商品品一一览览表表?员员工工表表? ?的的数数据据才才可可以以输输入入? ?销销售售表表2006?2006?;再再输输入入了了? ?供供货货商商表表? ?的的数据才可以输入数据才可以输入? ?进货表进货表2006?2006?。1 1、使用企业管理器向数据表中添加记录、使用企业管理器向数据表中添加记录【实实例例练练习习4

184、-144-14】参参照照表表1.221.22用用企企业业管管理理器器向向? ?商商品品一一览览表表? ?添加记录。添加记录。l l “货货号号绑绑定定了了只只允允许许输输入入4 4位位数数字字的的规规那那么么,不不允允许许输入非数字字符。输入非数字字符。l“l“货货名名设设置置了了默默认认值值“计计算算机机,假假设设不不输输入入时时,系统自动填入系统自动填入“计算机。计算机。l“l“库库存存量量由由系系统统自自动动计计算算,不不需需要要输输入入,暂暂时时自自动动以默认值以默认值0 0填入。填入。 在在企企业业管管理理器器展展开开数数据据表表,选选中中? ?商商品品一一览览表表? ?单单击击“操

185、操作作菜菜单单,或或者者右右键键单单击击该该表表,选选择择“翻翻开开表表“返返回回所所有有行行如如图图4-354-35,弹弹出出“查查询询设设计计器器的的结结果果窗窗口口象象EXCELEXCEL一样的表格。如图一样的表格。如图4-364-36所示。所示。【实例练习【实例练习4-144-14】 在在“查查询询设设计计器器结结果果窗窗口口可可以以输输入入记记录录数数据据。如如果果数数据据表表中中已已有有数数据据时时,那那么么数数据据表表翻翻开开时时即即显显示示全全部部已已有有数数据,可进行追加输入,也可以查阅、编辑修改。据,可进行追加输入,也可以查阅、编辑修改。 输入记录数据后输入记录数据后? ?

186、商品一览表商品一览表? ?的显示结果如图的显示结果如图4-374-37所示。所示。2、使用、使用INSERT语句向表中插入记录语句向表中插入记录1 1用用INSERT VALUESINSERT VALUES语句向表中添加记录语句向表中添加记录 INSERT INTO INSERT INTO 表名表名 ( (字段列表字段列表) VALUES () VALUES (值列表值列表) ) 功能:添加一条新记录,用值列表提供的数据为字段列功能:添加一条新记录,用值列表提供的数据为字段列表中对应的字段提供数据。表中对应的字段提供数据。 说明:说明:ll一个一个INSERT VALUESINSERT VAL

187、UES语句只能向表中添加一条新记录。语句只能向表中添加一条新记录。l INTOl INTO关键字完全可以省略。关键字完全可以省略。ll字段列表的顺序可以任意,但提供数据的个数、顺序字段列表的顺序可以任意,但提供数据的个数、顺序和类型必须与其一致。和类型必须与其一致。ll给表中全部字段提供数据时字段列表可以省略,但此给表中全部字段提供数据时字段列表可以省略,但此时提供数据的顺序个数必须与表中字段顺序一致,自时提供数据的顺序个数必须与表中字段顺序一致,自动编号标识列不允许提供数据直接省略,也不能使用逗动编号标识列不允许提供数据直接省略,也不能使用逗号,允许为空的字段不提供数据时必须使用号,允许为空

188、的字段不提供数据时必须使用NULLNULL。2、使用、使用INSERT语句向表中插入记录语句向表中插入记录l l 如如果果只只给表表中中局局部部字字段段提提供供数数据据时必必须指指定定字字段段列列表表,但但不不为NULLNULL的的字字段段不不允允许省省略略,即即只只有有允允许为NULLNULL的的列列才才可可以以省省略略不不提提供供数数据据系系统自自动填填充充NULLNULL,自自动编号字段必号字段必须省略。省略。l l 设 置置 了了 默默 认 值 的的 字字 段段 使使 用用 默默 认 值 时 , 可可 以以 用用defaultdefault代表默代表默认数据。数据。l l 字符型和日期

189、型数据要用字符型和日期型数据要用单引号引号扩起来。起来。l l 值列列表表中中可可以以嵌嵌套套使使用用子子查询的的数数据据,但但必必须用用圆括括号括起来。号括起来。【实例例练习4-154-15】 电电脑脑公公司司准准备备新新增增加加两两种种经经营营商商品品,需需向向“商商品品一一览览表表中中增增加加两条记录。两条记录。 一一般般在在实实际际进进货货后后才才能能制制定定“参参考考价价格格,并并自自动动计计算算“平平均均进进价价和和“库库存存量量,因因此此这这三三个个字字段段是是允允许许为为空空的的。当当用用INSERTINSERT语语句句向向表表中中插插入入记记录录时时省省略略为为空空的的字字段

190、段,那那么么系系统统会会自自动动填填充充默默认认值值,假假设设没有设置默认值那么填充没有设置默认值那么填充NULLNULL。 例如:例如: INSERT INTO INSERT INTO 商品一览表商品一览表 ( (货号货号, , 货名货名, , 规格规格, , 单位单位, , 参考价格参考价格) ) VALUES (1003 VALUES (1003,计算机计算机,FZFZ,套套,5500)5500) 由于给出了字段列表,字段和数据的顺序可以任意,只要对应即可。由于给出了字段列表,字段和数据的顺序可以任意,只要对应即可。 如如果果提提供供所所有有数数据据,那那么么可可以以省省略略字字段段列列

191、表表表表示示全全部部字字段段,但但必必须须按按表表中中的的字字段段顺顺序序提提供供全全部部数数据据,有有默默认认值值的的可可以以用用defaultdefault,允允许许为空且没有默认值的必须用为空且没有默认值的必须用NULLNULL。【实例例练习4-154-15】 新新增增加加的的两两种种商商品品中中,计计算算机机已已经经定定价价,CPUCPU处处理理器器尚尚未定价,添加记录的语句为:未定价,添加记录的语句为: INSERT INSERT 商品一览表商品一览表 VALUES VALUES (1003(1003,计计算算机机,FZFZ,套套,defaultdefault, 5500 5500,

192、default)default) INSERT INSERT 商品一览表商品一览表 ( (货号货号, , 货名货名, , 规格规格, , 单位单位) ) VALUES ( 3002, CPU VALUES ( 3002, CPU处理器处理器, SY8800, , SY8800, 个个) ) 在在企企业业管管理理器器翻翻开开“商商品品一一览览表表,可可看看到到已已向向表表中中添添加了两条记录,而且已按主键进行了排序。加了两条记录,而且已按主键进行了排序。 【实例例练习4-164-16】 参照表参照表1.231.23用用SQLSQL语句向语句向? ?供货商表供货商表? ?添加记录。添加记录。 ?

193、?供供货货商商表表? ?根根本本提提供供了了全全部部字字段段的的数数据据,可可以以省省略略字字段段列列表表,但但数数据据必必须须按按表表字字段段顺顺序序全全部部提提供供。“联联系系人人允允许许为为空空,无无联联系系人人可可用用NULLNULL,“账账户户已已设设置置默默认认值值,无无账账户户的的可可用用defaultdefault表表示示默默认认值值00000-00000-000000000-00000-0000,但只允许一个。,但只允许一个。 USE diannaoxs USE diannaoxs INSERT INSERT 供供货货商商表表 VALUES VALUES ( ( SDLC,

194、SDLC, 山山东东省省浪浪潮潮集集团团公公司司销销售售公公司司, , 济南市山大路济南市山大路10081008号号, 1002-305-6, , 1002-305-6, 刘绪华刘绪华 ) ) INSERT INSERT 供货商表供货商表 VALUES ( BJFZ, VALUES ( BJFZ, 北京方正电脑北京方正电脑, , 北京市海淀区友谊路北京市海淀区友谊路235235号甲号甲, 20006786570, , 20006786570, 王连胜王连胜 ) ) INSERT INSERT 供供货货商商表表 VALUES VALUES ( ( BJLX, BJLX, 北北京京联联想想科科技技

195、股股份份, , 北北京京市中关村市中关村6068-66068-6号赵捷号赵捷 ) ) INSERT INSERT 供供货货商商表表 VALUES VALUES ( ( SHSC, SHSC, 上上海海电电脑脑市市场场器器材材销销售售中中心心, , 上海市虹口区上海市虹口区8 8弄科技路弄科技路225225号号, 336-448-669, , 336-448-669, 李群李群 ) ) INSERT INSERT 供供货货商商表表 VALUES VALUES ( ( SHKD, SHKD, 上上海海科科大大计计算算机机技技术术效效劳劳公公司司, , 上海市浦东东方明珠上海市浦东东方明珠59255

196、925号号, 2246800012, , 2246800012, 张茂岭张茂岭 ) ) INSERT INSERT 供供货货商商表表 VALUES VALUES ( ( SDKJ, SDKJ, 山山东东科科技技市市场场计计算算机机销销售售处处, , 济南市经七纬二路济南市经七纬二路94159415号号, default , NULL ) , default , NULL ) 【实例例练习4-164-16】 INSERTINSERT语语句句的的顺顺序序没没有有关关系系,在在数数据据表表中中自自动动按按主主键键排排序序。在在查查询分析器中运行以上代码后,翻开询分析器中运行以上代码后,翻开“供货商表

197、如图供货商表如图4-394-39所示。所示。【实例例练习4-174-17】 参照表参照表1.211.21或表或表4.74.7用用SQLSQL语句向语句向? ?员工表员工表? ?添加记录的局部数据。添加记录的局部数据。注注意意:因因为为姓姓名名设设置置了了惟惟一一约约束束,在在输输入入数数据据时时如如果果出出现现同同名名,应应想想方法予以区分以满足惟一约束。方法予以区分以满足惟一约束。USE diannaoxsUSE diannaoxsINSERT INSERT 员工表员工表 ( (员工员工ID, ID, 姓名姓名, , 性别性别, , 出生日期出生日期, , 部门部门, , 工作时间工作时间)

198、 ) VALUES VALUES (11001, (11001, 吕吕川川页页,1,1963-3-7, ,1,1963-3-7, 办办公公室室,1985-2-,1985-2-6)6)INSERT INSERT 员工表员工表 ( (员工员工ID, ID, 姓名姓名, , 性别性别, , 出生日期出生日期, , 部门部门, , 工作时间工作时间) ) VALUES VALUES (22001, (22001, 郑郑学学敏敏,0,1969-11-23,0,1969-11-23,办办公公室室,1994-7-,1994-7-1)1)INSERT INSERT 员工表员工表 ( (员工员工ID, ID,

199、姓名姓名, , 性别性别, , 出生日期出生日期, , 部门部门, , 工作时间工作时间) ) VALUES VALUES (22002,(22002,于于 丽丽,0,1980-12-5,0,1980-12-5,材材料料处处,2002-2-,2002-2-15)15)INSERT INSERT 员工表员工表 ( (员工员工ID, ID, 姓名姓名, , 性别性别, , 出生日期出生日期, , 部门部门, , 工作时间工作时间) ) VALUES VALUES (22003,(22003,孙孙立立华华,1,1979-5-4, ,1,1979-5-4, 材材料料处处, , 2001-9-2001-

200、9-9)9)INSERT INSERT 员工表员工表 ( (员工员工ID, ID, 姓名姓名, , 性别性别, , 出生日期出生日期, , 部门部门, , 工作时间工作时间) ) VALUES (33001, VALUES (33001,高宏高宏, 1,1982-9-29, default,2001-6-1), 1,1982-9-29, default,2001-6-1)INSERT INSERT 员工表员工表 ( (员工员工ID, ID, 姓名姓名, , 性别性别, , 出生日期出生日期, , 部门部门, , 工作时间工作时间) ) VALUES VALUES (33002,(33002,章

201、章晓晓晓晓,0,1980-11-1,0,1980-11-1,销销售售科科,2000-5-,2000-5-30)30)INSERT INSERT 员工表员工表 ( (员工员工ID, ID, 姓名姓名, , 性别性别, , 出生日期出生日期, , 部门部门, , 工作时间工作时间) ) VALUES VALUES (33003, (33003, 陈陈刚刚, , 1, 1, 1979-6-30, 1979-6-30, default, default, 2003-2003-11-1) 11-1) 【实例例练习4-174-17】 不不提提供供数数据据的的字字段段“照照片片“个个人人简简历历是是允允许许

202、为为空空的的,否否那那么么不不能能省省略略。由由于于只只有有局局部部字字段段那那么么必必须须指指定定字字段段列列表表。“部部门门字字段段设设置置了了默默认认值值,可可以以使使用用defaultdefault表表示示“销售科。销售科。 在在查查询询分分析析器器中中运运行行该该语语句句后后,翻翻开开“员员工工表表如如图图4-4-4040所示。所示。【实例例练习4-184-18】 在在? ?商商品品一一览览表表?员员工工表表? ?添添加加记记录录完完成成后后,我我们们可可以以参参照照表表1.251.25用企业管理器向用企业管理器向? ?销售表销售表2006?2006?中添加记录。需要注意的是:中添加

203、记录。需要注意的是:l“l“序序号号为为自自动动编编号号标标识识列列,不不需需要要输输入入数数据据,根根据据输输入入顺顺序序自自动产生。动产生。ll原原有有“销销售售日日期期必必须须输输入入,以以后后运运行行时时自自动动填填入入当当前前日日期期默默认认值值。注注意意销销售售日日期期有有顺顺序序要要求求,各各记记录录应应按按表表中中原原有有记记录录的的顺顺序序输输入。入。l“l“货货名名、“金金额额允允许许为为空空不不需需要要输输入入,之之后后用用SQLSQL语语句句自自动动填入。填入。ll对对设设置置外外键键约约束束的的字字段段不不允允许许输输入入父父表表引引用用列列没没有有的的值值。如如“货

204、货号号必必须须是是? ?商商品品一一览览表表? ?中中已已有有的的货货号号值值,“销销售售员员必必须须是是? ?员员工工表表? ?中本公司的员工姓名。中本公司的员工姓名。ll设设置置了了CHECKCHECK约约束束、绑绑定定了了规规那那么么的的字字段段不不允允许许输输入入违违反反约约束束或或规规那那么么的的数数据据。如如“单单价价“数数量量必必须须大大于于0 0;“金金额额不不允允许许为为负,不输入时自动填入默认值负,不输入时自动填入默认值0 0。 输入数据后输入数据后“销售表销售表20062006显示结果如图显示结果如图4-414-41所示。所示。 【实例例练习4-194-19】 在在? ?

205、商商品品一一览览表表?供供货货商商表表?员员工工表表? ?添添加加记记录录完完成成后后,我我们们可可以以参参照照表表1.241.24用用SQLSQL语语句句向向? ?进进货货表表2006?2006?中中添添加加记记录。录。ll除除了了“序序号号以以外外的的全全部部字字段段均均提提供供了了数数据据,字字段段列列表表可可以以省省略略,但但自自动动编编号号标标识识列列的的“序序号号字字段段不不允允许许提供数据,系统按添加记录的顺序自动填入。提供数据,系统按添加记录的顺序自动填入。l“l“货货号号“供供货货商商IDID“收收货货人人已已设设置置外外键键约约束束,假假设设所所引引用用列列中中没没有有对对

206、应应的的数数据据,那那么么该该记记录录会会添添加加失失败。败。ll设设置置CHECKCHECK约约束束、绑绑定定了了规规那那么么的的字字段段假假设设违违反反约约束束和规那么,也不能添加记录。和规那么,也不能添加记录。【实例例练习4-194-19】 USE diannaoxsUSE diannaoxs INSERT INSERT 进货表进货表2006 (2006 (进货日期进货日期, ,货号货号, ,数量数量, ,进价进价, ,供货商供货商ID, ID, 收货人收货人) ) VALUES (2006-1-8,1001,10, 5300.00, SDLC, VALUES (2006-1-8,100

207、1,10, 5300.00, SDLC, 孙立华孙立华) INSERT INSERT 进货表进货表2006 -2006 -以下均可省略字段列表以下均可省略字段列表 VALUES (2006-1-8,1002,10, 5180.00, BJLX, VALUES (2006-1-8,1002,10, 5180.00, BJLX, 孙立华孙立华) INSERT INSERT 进货表进货表2006 2006 VALUES (2006-1-8,3001, 30, 350.00, BJFZ, VALUES (2006-1-8,3001, 30, 350.00, BJFZ, 孙立华孙立华) INSERT I

208、NSERT 进货表进货表20062006 VALUES (2006-1-20,2001,30, 860.00, BJFZ, VALUES (2006-1-20,2001,30, 860.00, BJFZ, 于于 丽丽) INSERT INSERT 进货表进货表20062006 VALUES (2006-1-28,2002,30, 1060.00, SHSC, VALUES (2006-1-28,2002,30, 1060.00, SHSC, 于于 丽丽) INSERT INSERT 进货表进货表2006 2006 VALUES (2006-2-5, 4001, 80, 185.50, SDLC

209、, VALUES (2006-2-5, 4001, 80, 185.50, SDLC, 孙立华孙立华) INSERT INSERT 进货表进货表2006 2006 VALUES (2006-2-5, 4002, 80, 280.50, BJLX, VALUES (2006-2-5, 4002, 80, 280.50, BJLX, 孙立华孙立华) INSERT INSERT 进货表进货表20062006 VALUES (2006-2-16,1001,10, 5250.00, SHKD, VALUES (2006-2-16,1001,10, 5250.00, SHKD, 于于 丽丽) INSERT

210、 INSERT 进货表进货表2006 2006 VALUES (2006-3-7, 3001, 30, 350.00, SHSC, VALUES (2006-3-7, 3001, 30, 350.00, SHSC, 孙立华孙立华) INSERT INSERT 进货表进货表2006 2006 VALUES (2006-3-26, 4002, 80, 280.50, SDLC, VALUES (2006-3-26, 4002, 80, 280.50, SDLC, 孙立华孙立华)2 2用用INSERT SELECTINSERT SELECT语句向表中添加记录语句向表中添加记录 INSERT INSE

211、RT 表名表名1 (1 (字段列表字段列表1) 1) SELECT * | SELECT * | 字段列表字段列表2 FROM 2 FROM 表名表名2 WHERE 2 WHERE 条件表达式条件表达式 功功能能:用用表表2 2中中的的数数据据向向表表1 1添添加加记记录录,即即用用SELECTSELECT子子句句在在表表2 2中中查查询询的的结结果果集集( (可可以以是是多多条条记记录录) )按按指指定定的的字字段段将将符符合合条条件件的的全全部部记记录录添添加到表加到表1 1中。中。ll该该语语句句可可以以从从一一个个或或多多个个表表或或视视图图中中得得到到数数据据,有有关关SELECTS

212、ELECT语语句句的完整语法将在第的完整语法将在第5 5章详细介绍。章详细介绍。ll表表2 2的的字字段段列列表表2 2中中的的字字段段个个数数、顺顺序序和和类类型型* *表表示示全全部部字字段段必必须与表须与表1 1的字段列表的字段列表1 1的个数、顺序和类型相兼容。的个数、顺序和类型相兼容。ll假假设设给给表表1 1中中全全部部字字段段提提供供数数据据,那那么么字字段段列列表表1 1可可以以省省略略,但但表表2 2的的字字段段列列表表2 2不不能能省省略略全全部部字字段段可可使使用用* *号号并并且且其其顺顺序序必必须须与与表表1 1字段的定义顺序一致。字段的定义顺序一致。ll假假设设给给

213、表表1 1中中局局部部字字段段赋赋值值,字字段段列列表表1 1必必须须给给出出要要添添加加数数据据的的列列名。但要保证不提供数据的列必须是允许为空的。名。但要保证不提供数据的列必须是允许为空的。ll条条件件表表达达式式中中可可以以嵌嵌套套使使用用子子查查询询的的数数据据,但但必必须须用用圆圆括括号号括括起起来。来。2 2用用INSERT SELECTINSERT SELECT语句向表中添加记录语句向表中添加记录 【例例4-144-14】在在diannaixsdiannaixs数数据据库库中中创创立立一一个个“厂厂家家地地址址表表,该该表表中中只只有有“厂厂家家名名称称“厂厂家家地地址址两两个个

214、字字段段,其其属属性性与与“供供货货商商表表中中的的“供供货货商商“厂厂家家地地址址字字段段属属性性相相同同,然然后后从从“供供货货商商表表中中取取得数据。得数据。1 1先先用用企企业业管管理理器器或或CREATE CREATE TABLETABLE语语句句创创立立“厂厂家家地地址址表表空空表表,也也可可以以用用下下一一章章介介绍绍的的SELECTSELECT语语句句由由“供供货货商商表表复复制制创创立立一一个个新新的的“厂家地址空表:厂家地址空表: USE diannaoxs USE diannaoxs SELECT SELECT 厂家名称厂家名称= =供货商供货商, , 厂家地址厂家地址

215、INTO INTO 厂家地址表厂家地址表 FROM FROM 供货商表供货商表 WHERE 1=2 WHERE 1=22 2用用INSERT SELECTINSERT SELECT语句向语句向“厂家地址表全部字段添加记录:厂家地址表全部字段添加记录: USE diannaoxs USE diannaoxs INSERT INSERT 厂家地址表厂家地址表 SELECT SELECT 供货商供货商, , 厂家地址厂家地址 FROM FROM 供货商表供货商表运行该语句后翻开运行该语句后翻开“厂家地址表厂家地址表 可看到图可看到图4-434-43的数据表。的数据表。2 2用用INSERT SELE

216、CTINSERT SELECT语句向表中添加记录语句向表中添加记录 【例例4-154-15】创创立立一一个个“上上海海厂厂家家表表,表表中中只只有有“厂厂家家名名称称“厂厂家地址,从家地址,从“供货商表中取得只有上海厂家的数据。供货商表中取得只有上海厂家的数据。1 1先先用用企企业业管管理理器器或或CREATE CREATE TABLETABLE语语句句创创立立“上上海海厂厂家家表表空空表表。或用或用SELECTSELECT语句复制创立一个新的空表:语句复制创立一个新的空表: USE diannaoxs USE diannaoxs SELECT SELECT 厂家名称厂家名称= =供货商供货商

217、, , 厂家地址厂家地址 INTO INTO 上海厂家表上海厂家表 FROM FROM 供货商表供货商表 WHERE 1=2 WHERE 1=22 2用用INSERT SELECTINSERT SELECT语句向表中全部字段添加记录。语句向表中全部字段添加记录。 USE diannaoxs USE diannaoxs INSERT INSERT 上海厂家表上海厂家表 SELECT SELECT 供货商供货商, , 厂家地址厂家地址 FROM FROM 供货商表供货商表 WHERE WHERE 厂家地址厂家地址 like % like %上海上海% 运行该语句后翻开运行该语句后翻开“厂家地址表厂

218、家地址表 可看到图可看到图4-444-44的数据表。的数据表。、向表中输入文本或图像数据、向表中输入文本或图像数据1 1、使用企业管理器或、使用企业管理器或INSERT INSERT 语句语句 使使用用企企业业管管理理器器或或INSERT INSERT 语语句句可可以以直直接接向向texttext、ntextntext字字段段的的行行内内输输入入添添加加数数据据,但但数数据据最最大大长长度度不不能能超超过过对对应应的的charchar、ncharnchar数数据据类类型型允允许的长度。许的长度。2 2、使用、使用WRITETEXTWRITETEXT语句语句 语法格式:语法格式:WRITETEX

219、T WRITETEXT 表名表名. .列名列名 指针指针 数据数据 功功能能:对对现现有有的的texttext、ntextntext或或imageimage列列进进行行交交互互式式更更新新,原原有有数数据据将被完全覆盖。默认状态下,将被完全覆盖。默认状态下,WRITETEXTWRITETEXT语句的操作不被记入事务日志。语句的操作不被记入事务日志。l“l“表名表名. .列名是被更新表的列名是被更新表的texttext、ntextntext或或imageimage的列名称。的列名称。l“l“指指针针是是指指向向texttext、ntextntext或或imageimage数数据据的的指指针针,其

220、其数数据据类类型型必必须须为为binary(16)binary(16)。l“l“数数据据是是要要存存储储的的实实际际texttext、ntextntext或或imageimage数数据据,可可以以是是常常量量,也可以是变量。也可以是变量。ll用用WRITETEXTWRITETEXT交互插入交互插入texttext、ntextntext和和imageimage数据的最大长度为数据的最大长度为120KB120KB。l WRITETEXT l WRITETEXT 语句不能用在视图中的语句不能用在视图中的texttext、ntextntext和和imageimage列上。列上。执执行行WRITETEX

221、TWRITETEXT语语句句必必须须用用TEXTPTRTEXTPTR函函数数获获取取有有效效的的文文本本指指针针。如如果果texttext、ntextntext或或imageimage列中有行内文本,那么可以直接获取文本指针。列中有行内文本,那么可以直接获取文本指针。【例例4-164-16】修修改改员员工工表表中中“吕吕川川页页个个人人简简历历的的值值为为“2000“2000年年毕毕业业于于清华大学清华大学. .,其中员工表中个人简历列为空。代码如下:,其中员工表中个人简历列为空。代码如下:USE diannaoxsUSE diannaoxsGO GO EXEC sp_dboption dia

222、nnaoxs,select into/bulkcopy,trueEXEC sp_dboption diannaoxs,select into/bulkcopy,trueUPDATE UPDATE 员工表员工表 SET SET 个人简历个人简历=null -=null -更新该列以获得指针更新该列以获得指针 WHERE WHERE 员工员工ID=11001 -ID=11001 -省略为更新全部记录省略为更新全部记录GOGODECLARE ptrtext binary(16) -DECLARE ptrtext binary(16) -定义局部变量定义局部变量SELECT ptrtext =TEXT

223、PTR(SELECT ptrtext =TEXTPTR(个人简历个人简历) -) -获得该列文本数据指针获得该列文本数据指针 FROM FROM 员工表员工表 WHERE WHERE 员工员工ID=11001ID=11001WRITETEXT WRITETEXT 员工表员工表. .个人简历个人简历 ptrtext 2000 ptrtext 2000年毕业于清华大学年毕业于清华大学.GOGOEXEC sp_dboption diannaoxs,select into/bulkcopy,falseEXEC sp_dboption diannaoxs,select into/bulkcopy,fal

224、seGOGOSELECT * FROM SELECT * FROM 员工表员工表其其中中TEXTPTR()TEXTPTR()函函数数获获得得的的文文本本或或图图像像数数据据指指针针并并保保存存到到局局部部变变量量ptrtext ptrtext ,再再被被WRITETEXTWRITETEXT语语句句使使用用。设设置置允允许许、禁禁止止大大容容量量复复制制在在本例中仅为了说明语法,可以省略。本例中仅为了说明语法,可以省略。3 3、使用、使用TEXTCOPY.EXETEXTCOPY.EXE 在在MS MS SQL SQL SERVER SERVER 安安装装目目录录下下有有个个可可执执行行文文件件叫

225、叫 TEXTCOPY.EXETEXTCOPY.EXE,利利用用它它可可对对表表中中的的texttext、ntextntext或或imageimage字字段段进进行行文文本本或或图图像像数数据据文文件件的的输输入入输输出出。如如果果安安装装目目录录下下没没有有,可可从从安安装装盘盘x86x86文文件件夹夹中中获获取取,把把它它拷拷贝贝到到安安装装目目录录“80ToolsBinn“80ToolsBinn下即可。下即可。 TextCopy TextCopy命令的语法格式:命令的语法格式: TEXTCOPY/S TEXTCOPY/S 效劳器名称效劳器名称/U /U 登录名登录名/P /P 登录密码登录

226、密码 /D /D 数据库名称数据库名称/T /T 表名表名 /C /C 列名列名 /W where ( /W where (条件条件)/F )/F 路径及文件名路径及文件名 /I|/O /I|/O 其中:其中: /S /S 效劳器名称效劳器名称 在当前效劳器下可以省略在当前效劳器下可以省略 /U /U 登录名登录名 登录登录SQL ServerSQL Server的登录名,如的登录名,如sasa /C /C 列名列名 保存保存texttext文本或文本或imageimage图像字段名图像字段名 /W where ( /W where (条件条件) ) 用以确定插入文件的记录用以确定插入文件的记

227、录 /I|/O /I|/O 选择选择I I那么把指定图像或文本文件输入保存到数据表中那么把指定图像或文本文件输入保存到数据表中 选择选择O O那么把图像或文本文件从字段中输出保存为磁盘文件那么把图像或文本文件从字段中输出保存为磁盘文件 注注意意:TEXTCOPY.EXETEXTCOPY.EXE是是一一个个外外部部可可执执行行命命令令,可可以以通通过过系系统统mastermaster数数据据库库的的xp_cmdshellxp_cmdshell运行命令字符串来调用运行命令字符串来调用TEXTCOPY.EXETEXTCOPY.EXE命令。命令。 语法格式:语法格式:exec master.dbo.x

228、p_cmdshell exec master.dbo.xp_cmdshell 命令字符串命令字符串 【例【例4-174-17】为】为? ?员工表员工表? ?吕川页的照片字段输入图象文件吕川页的照片字段输入图象文件(c:pic1.jpg) (c:pic1.jpg) USE diannaoxsUSE diannaoxsUPDATE UPDATE 员工表员工表 SET SET 照片照片=0x -=0x -更新该列为非空以获得指针更新该列为非空以获得指针 WHERE WHERE 姓名姓名=吕川页吕川页 - -省略为更新全部记录省略为更新全部记录GOGODECLARE s varchar(200)DEC

229、LARE s varchar(200)SET s=textcopy /U sa /D diannaoxs /T SET s=textcopy /U sa /D diannaoxs /T 员工表员工表 /C /C 照片照片 /W where( /W where(姓名姓名=+=+吕川页吕川页+) /F c:pic1.jpg /i+) /F c:pic1.jpg /iexec master.xp_cmdshell sexec master.xp_cmdshell s其中:其中:ss为局部变量保存为局部变量保存textcopytextcopy字符串,再被字符串,再被master.xp_cmdshell

230、master.xp_cmdshell调用。调用。SETSET语语句句中中“三三个个单单引引号号在在整整个个字字符符串串表表达达式式中中仅仅表表示示一一个个单单引引号号。也也可可以写为:以写为:SET s=textcopy /U sa /D diannaoxs /T SET s=textcopy /U sa /D diannaoxs /T 员工表员工表 /C /C 照片照片 /W where( /W where(姓名姓名=+=+吕川页吕川页+ ) /F c:pic1.jpg /i+ ) /F c:pic1.jpg /i注意:注意:字字符符串串中中间间不不能能换换行行,最最好好使使用用关关键键字字

231、“员员工工ID=11001ID=11001作作为为条条件件以防止重名。以防止重名。假假设设在在“c:Program “c:Program FilesMicrosoft FilesMicrosoft SQL SQL Server80ToolsBinnServer80ToolsBinn中中没没有有TEXTCOPY.EXETEXTCOPY.EXE文文件件,系系统统提提示示:“textcopy “textcopy 不不是是内内部部或或外外部部命令,命令无法执行。命令,命令无法执行。在在“查询分析器中输入以上代码,执行结果如图查询分析器中输入以上代码,执行结果如图4-464-46所示。所示。保保存存在在

232、数数据据库库中中的的图图片片无无法法使使用用SELECTSELECT语语句句查查看看,图图4-454-45可可看看到到保保存存了了照照片片文文件件后后? ?员员工工表表? ?的的显显示示结结果果。如如果果查查看看保保存存在在数数据据库库中中的的图图片片,可以用可以用TextCopyTextCopy命令把图片从数据库保存为磁盘文件后查看。命令把图片从数据库保存为磁盘文件后查看。例如将例如将? ?员工表员工表? ?吕川页的照片保存为磁盘文件吕川页的照片保存为磁盘文件(c:pic2.jpg)(c:pic2.jpg):DECLARE id varchar(10), s varchar(200)DECL

233、ARE id varchar(10), s varchar(200)SET id=11001SET id=11001SET s=textcopy /U sa /D diannaoxs /T SET s=textcopy /U sa /D diannaoxs /T 员工表员工表 /C /C 照片照片 /W where( /W where(员工员工ID= + id + ) /F c:pic2.jpg /oID= + id + ) /F c:pic2.jpg /oexec master.xp_cmdshell sexec master.xp_cmdshell s在在“查查询询分分析析器器中中输输入入

234、以以上上代代码码,那那么么在在C C盘盘下下生生成成的的文文件件pic2.jpgpic2.jpg,通过图片查看工具,可以浏览该图片。,通过图片查看工具,可以浏览该图片。、数据表的复制、数据表的复制 对对数数据据表表进进行行复复制制,将将在在第第5 5章章中中详详细细介介绍绍,为为了了使使读读者者掌掌握握数数据据的的修修改改删删除除操操作作,我我们们提提前前简简单单介介绍绍SELECTSELECT语语句句对对数数据据表表的的复复制制创创立立,以便对复制表进行练习操作。以便对复制表进行练习操作。 SELECT SELECT语句用于复制创立新表的简单格式:语句用于复制创立新表的简单格式: SELEC

235、T *| SELECT *| 字段列表字段列表 INTO INTO 新表名新表名 FROM FROM 源表名源表名 WHERE WHERE 条件表达式条件表达式 ll用用* *复复制制的的新新表表与与源源表表字字段段相相同同,也也可可用用“字字段段列列表表选选择择局局部部字字段。段。ll使使用用WHEREWHERE可可以以有有选选择择的的复复制制局局部部记记录录,只只有有满满足足条条件件的的记记录录被被复复制,省略制,省略WHEREWHERE那么连同全部数据一起复制。那么连同全部数据一起复制。ll使使用用恒恒为为假假的的条条件件,如如“WHERE “WHERE 1=21=2那那么么没没有有记记

236、录录,只只复复制制一一个个有指定字段的空表。有指定字段的空表。ll原表字段上绑定的约束不能被复制。原表字段上绑定的约束不能被复制。 例如例如SQLSQL语句:语句: SELECT SELECT 厂家名称厂家名称= =供货商供货商, , 厂家地址厂家地址 INTO INTO 厂家地址表厂家地址表1 1 FROM FROM 供货商表供货商表、数据表的复制、数据表的复制 【例【例4-184-18】用】用“供货商表复制创立一个供货商表复制创立一个“上海厂家地址表:上海厂家地址表: USE diannaoxs USE diannaoxs SELECT SELECT 厂家名称厂家名称= =供货商供货商,

237、, 厂家地址厂家地址 INTO INTO 上海厂家地址表上海厂家地址表 FROM FROM 供货商表供货商表 WHERE WHERE 厂家地址厂家地址 like like 上海上海% 【例例4-194-19】用用“进进货货表表20062006复复制制一一张张内内容容完完全全相相同同的的“进进货货AAAA表表,以便读者操作练习用。代码如下:以便读者操作练习用。代码如下: SELECT * INTO SELECT * INTO 进货进货AAAA表表 FROM FROM 进货表进货表2006 2006 【例例4-204-20】用用“销销售售表表20062006创创立立只只有有相相同同表表结结构构的的

238、空空表表“销销售售表表20072007: SELECT * INTO SELECT * INTO 销售表销售表2007 FROM 2007 FROM 销售表销售表2006 WHERE 1=22006 WHERE 1=2 创立一张与创立一张与“商品一览表相同结构的空表商品一览表相同结构的空表“商品明细表:商品明细表: SELECT * INTO SELECT * INTO 商品明细表商品明细表 FROM FROM 商品一览表商品一览表 WHERE 1=2 WHERE 1=2 创立一张只有创立一张只有“商品一览表局部字段的空表商品一览表局部字段的空表“简明商品表:简明商品表: SELECT SEL

239、ECT 货号货号, , 货名货名, , 规格规格, , 参考价格参考价格 INTO INTO简明商品表简明商品表 FROM FROM 商品一览表商品一览表 WHERE 1=2 WHERE 1=2、数据表数据的更新、编辑修改和删除、数据表数据的更新、编辑修改和删除 对对数数据据表表中中的的数数据据经经常常会会需需要要修修改改删删除除,例例如如客客户户地地址址发发生生了了变变化化那那么么需需要要修修改改,调调离离职职工工、不不再再经经营营的的商商品品也也可可能根据需要进行删除,这是数据库维护必不可少的操作。能根据需要进行删除,这是数据库维护必不可少的操作。1 1、使用企业管理器修改更新数据、使用企

240、业管理器修改更新数据 展展开开所所有有的的数数据据表表列列表表,选选择择要要操操作作的的表表,单单击击“操操作作菜菜单单或或右右键键单单击击该该表表,选选择择“翻翻开开表表“返返回回所所有有行行,弹弹出出“查查询询设设计计器器的的结结果果窗窗口口,可可以以看看到到全全部部已已经经输入的记录数据。输入的记录数据。 在在“查查询询设设计计器器结结果果窗窗口口中中可可以以追追加加输输入入记记录录,也也可可以查阅、编辑修改任何一个字段的数据,只要不违反约束。以查阅、编辑修改任何一个字段的数据,只要不违反约束。 单单击击记记录录最最左左端端的的标标志志块块选选中中一一行行,在在右右键键快快捷捷菜菜单单中

241、中可以选择复制、粘贴、删除一整条记录的操作。可以选择复制、粘贴、删除一整条记录的操作。 在在企企业业管管理理器器中中对对整整个个表表的的查查询询、插插入入、更更新新、复复制制等等操作将在第操作将在第5 5章详细介绍。章详细介绍。2 2、使用、使用UPDATEUPDATE语句修改更新数据语句修改更新数据 UPDATE UPDATE 表名表名1 SET 1 SET 列名列名= =表达式表达式 , n , n FROM FROM 表名表名2|2|表名列表及连接方式表名列表及连接方式 WHERE WHERE 条件条件 功能:用表达式的值修改替换表功能:用表达式的值修改替换表1 1中满足条件记录的指定字

242、段。中满足条件记录的指定字段。l“l“表名表名1 1指定需要修改的数据表。指定需要修改的数据表。lSETlSET子子句句指指定定被被修修改改的的列列和和修修改改更更新新的的数数据据,同同一一条条件件下下可可以以对对多多个个列的数据进行同时修改更新。列的数据进行同时修改更新。ll假假设设表表达达式式中中使使用用其其他他表表的的数数据据时时必必须须使使用用FROMFROM指指定定数数据据来来源源“表表名名2 2,使使用用外外键键连连接接的的表表时时可可以以指指定定连连接接方方式式,但但必必须须是是一一对对一一关关系系第第5 5章章3.3.33.3.3节练习中介绍。节练习中介绍。l l WHEREW

243、HERE子子句句指指定定被被修修改改记记录录的的条条件件,只只有有满满足足条条件件的的记记录录才才被被更更新新。如果省略那么所有记录的相应字段都会被更新。如果省略那么所有记录的相应字段都会被更新。l l表表达达式式或或条条件件表表达达式式中中可可以以嵌嵌套套使使用用子子查查询询的的数数据据,但但必必须须用用圆圆括括号号括起来。括起来。【实例例练习4-204-20】 更新更新“商品一览表商品一览表“销售表销售表20062006数据表的局部数据。数据表的局部数据。1 1将将“商商品品一一览览表表新新增增加加的的10031003计计算算机机参参考考价价格格下调下调3%3%。在查询分析器中输入以下代码

244、:。在查询分析器中输入以下代码: USE diannaoxs USE diannaoxs UPDATE UPDATE 商品一览表商品一览表 SET SET 参考价格参考价格= =参考价格参考价格*0.97 *0.97 WHERE WHERE 货号货号= 1003= 1003 翻翻开开“商商品品一一览览表表可可看看到到价价格格已已由由55005500元元更更新新为为53355335元。元。2 2简简单单计计算算“销销售售表表20062006中中已已有有记记录录的的“金金额额:金金额额= =单单价价* *数数量量;并并将将“货货名名根根据据货货号号相相等等的的条条件件用用“商商品一览表中的品一览表

245、中的“货名填入。货名填入。 在查询分析器中输入以下代码:在查询分析器中输入以下代码: USE diannaoxs USE diannaoxs UPDATE UPDATE 销售表销售表2006 SET 2006 SET 金额金额= =单价单价* *数量数量 UPDATE UPDATE 销售表销售表2006 SET 2006 SET 货名货名= =商品一览表商品一览表. .货名货名 FROM FROM 商品一览表商品一览表 WHERE WHERE 销售表销售表2006.2006.货号货号= =商品一览表商品一览表. .货号货号【实例例练习4-204-20】 注意:注意:uu计计算算“金金额额时时,

246、由由于于使使用用同同一一表表中中的的字字段段数数据据更更新新,是是逐逐条条记记录录进进行行的的,所所以以可可以以省省略略条条件件。如如果果使使用用条条件件可可以写成:以写成: WHERE WHERE 序号序号= =序号序号u u 修修改改“货货名名时时,由由于于使使用用外外键键连连接接“商商品品一一览览表表,必必须须使使用用FROMFROM,还还可可使使用用指指定定连连接接方方式式和和连连接接条条件件的的格格式式,但使用连接条件不能使用但使用连接条件不能使用WHEREWHERE只能使用只能使用onon。如:。如: UPDATE UPDATE 销售表销售表2006 SET 2006 SET 货名

247、货名= =商品一览表商品一览表. .货名货名 FROM FROM 销售表销售表2006 Join 2006 Join 商品一览表商品一览表 on on 销售表销售表2006.2006.货号货号= =商品一览表商品一览表. .货号货号u u 数数据据库库正正常常运运行行时时,每每添添加加一一条条新新的的销销售售记记录录都都由由触触发发器器自自动动计计算算“金金额额、填填入入“货货名名、并并自自动动更更新新? ?商商品品一览表一览表? ?的的“库存。库存。 翻翻开开“销销售售表表20062006可可看看到到每每条条销销售售记记录录的的金金额额都都已已计计算算,而而且且已已按按“商商品品一一览览表表

248、中中“货货名名自自动动填填入入。如如图图4-474-47所示。所示。【实例例练习4-204-20】 3 3用用“销售表销售表20062006复制一个复制一个“销售销售BBBB表,将表,将“销售销售BBBB表中第表中第6 6条记录的销售日期改为条记录的销售日期改为20052005年年1 1月月2828日;将日;将“青岛青岛科技商贸公司改为科技商贸公司改为“青岛科技商贸注意有两条记录:青岛科技商贸注意有两条记录: USE diannaoxs USE diannaoxs SELECT * INTO SELECT * INTO 销售销售BBBB表表 FROM FROM 销售表销售表20062006 U

249、PDATE UPDATE 销售销售BBBB表表 SET SET 销售日期销售日期=2005-1-28 =2005-1-28 WHERE WHERE 销售日期销售日期=2005-1-26 -=2005-1-26 -正确条件:序号正确条件:序号=6 =6 UPDATE UPDATE 销售销售BBBB表表 SET SET 客户名称客户名称=青岛科技商贸青岛科技商贸 WHERE WHERE 客户名称客户名称=青岛科技商贸公司青岛科技商贸公司 翻开翻开“销售销售BBBB表可看到进行的修改更新。表可看到进行的修改更新。 注意:注意: 因为使用因为使用“WHERE “WHERE 销售日期销售日期=2005-

250、1-26 =2005-1-26 ,假设表中有,假设表中有多条多条1 1月月2626日的销售记录时将被全部修改为日的销售记录时将被全部修改为1 1月月2828日,正确条日,正确条件应该使用件应该使用“WHERE “WHERE 序号序号=6=6 在实际应用中,进货表、销售表作为原始记录是不允许修在实际应用中,进货表、销售表作为原始记录是不允许修改的,可以创立触发器不允许修改,以实现数据保护。改的,可以创立触发器不允许修改,以实现数据保护。 3 3使用使用UPDATETEXTUPDATETEXT语句更新文本或图像数据语句更新文本或图像数据 UPDATETEXT UPDATETEXT 表名表名. .列

251、名列名 指针指针 NULL| NULL|位置位置 NULL| NULL|长度长度 数据数据说明:说明:l l 表名表名. .列名为要修改的列名为要修改的texttext、ntextntext或或imageimage列名。列名。ll指指针针为为指指向向要要修修改改的的文文本本或或图图像像数数据据的的指指针针,其其数数据据类类型必须为型必须为binary(16)binary(16)。ll位位置置为为原原数数据据中中要要修修改改局局部部的的起起始始位位置置,该该位位置置从从0 0开开始,可以为始,可以为NULLNULL,表示将数据添加到原来的数据末尾。,表示将数据添加到原来的数据末尾。ll长长度度为

252、为原原始始数数据据中中要要修修改改的的局局部部的的长长度度,如如果果为为NULLNULL,那么表示从起始位置开始的所有数据都要被修改。那么表示从起始位置开始的所有数据都要被修改。ll数数据据为为修修改改成成的的数数据据。可可以以是是直直接接给给出出的的文文本本或或图图像像数数据,也可以是另外一个文本或图像数据指针。据,也可以是另外一个文本或图像数据指针。4 4、数据表记录的删除、数据表记录的删除 1 1使用使用DELETEDELETE语句删除记录语句删除记录 语语法法格格式式:DELETE DELETE 表表名名 FROM FROM 其其他他表表名名 WHERE WHERE 条件表达式条件表达

253、式 功功能能:删删除除满满足足条条件件的的所所有有记记录录,并并将将删删除除操操作保存在日志文件中通过事务回滚可以恢复。作保存在日志文件中通过事务回滚可以恢复。ll省略省略WHEREWHERE那么删除指定表中的全部记录。那么删除指定表中的全部记录。ll当当删删除除条条件件中中使使用用其其他他表表的的数数据据时时可可用用FROMFROM指指定所在的表名。定所在的表名。ll条条件件表表达达式式中中可可以以嵌嵌套套使使用用子子查查询询的的数数据据,但但必须用圆括号括起来。必须用圆括号括起来。ll有有自自动动编编号号字字段段的的记记录录被被删删除除后后,字字段段编编号号不不会会重重新新排排列列,被被删

254、删除除的的自自动动编编号号不不能能被被新新添添加加的的记录使用。记录使用。 删删除除记记录录最最主主要要的的是是选选择择好好条条件件,否否那那么么会会将将不该删除的删除,甚至会删除所有的记录。不该删除的删除,甚至会删除所有的记录。 如如删删除除“AA“AA表表中中没没有有定定价价价价格格字字段段为为空空值值的所有商品,可以使用的所有商品,可以使用SQLSQL语句:语句: DELETE AA DELETE AA表表 WHERE WHERE 价格价格 IS NULL IS NULL4 4、数据表记录的删除、数据表记录的删除 【例【例4-214-21】删除】删除“销售销售BBBB表中所有表中所有“青

255、岛的客户:青岛的客户: USE diannaoxs USE diannaoxs DELETE DELETE 销售销售BBBB表表 WHERE WHERE 客户名称客户名称 LIKE % LIKE %青岛青岛%【例【例4-224-22】删除】删除“销售销售BBBB表中的所有记录表中的所有记录 USE diannaoxs USE diannaoxs DELETE DELETE 销售销售BBBB表表【例例4-234-23】从从例例4-194-19用用“进进货货表表20062006复复制制的的“进进货货AAAA表表中中删删除除与与生生产产厂厂家家“北北京京方方正正电电脑脑有有关关的的所所有有进进货货记

256、记录。录。 DELETE DELETE 进货进货AAAA表表 FROM FROM 供货商表供货商表 WHERE WHERE 进货进货AAAA表表. .供货商供货商ID=ID=供货商表供货商表. .供货商供货商ID ID AND AND 供货商表供货商表. .供货商供货商=北京方正电脑北京方正电脑 4 4、数据表记录的删除、数据表记录的删除 2 2使用使用TRUNCATE TABLETRUNCATE TABLE语句快速永久删除全部记录语句快速永久删除全部记录 语法格式:语法格式:TRUNCATE TABLE TRUNCATE TABLE 表名表名ll该该语语句句通通过过释释放放表表的的数数据据页

257、页快快速速永永久久的的删删除除指指定定表表中中的的全全部部记记录录,但但删删除除的的数数据据不不可可恢恢复复只只将将对对数数据据页页的的操操作作保存在日志文件,而不保存记录的删除操作。保存在日志文件,而不保存记录的删除操作。ll该该语语句句将将全全部部记记录录删删除除后后只只保保存存表表的的结结构构空空表表,表表中中假假设设有有自自动动编编号号字字段段那那么么自自动动编编号号被被重重新新恢恢复复初初始始值值,即即以后向表中添加第一条记录时从初始值开始。以后向表中添加第一条记录时从初始值开始。 【例【例4-244-24】删除】删除“销售销售BBBB表中的所有记录表中的所有记录 USE diann

258、aoxs USE diannaoxs TRUNCATE TABLE TRUNCATE TABLE 销售销售BBBB表表4.7 4.7 数据表及数据表及约束束对象的象的删除除 、用企业管理器删除数据表及其他对象、用企业管理器删除数据表及其他对象 在在企企业业管管理理器器中中选选中中要要操操作作的的数数据据表表、规规那那么么、默默认认值值等等对对象象,右右键键单单击击可可很很方方便便的的进进行行删删除除操操作。但必须注意:作。但必须注意:uu表表的的删删除除是是永永久久性性的的,应应当当特特别别慎慎重重,建建议议在在删除之前先对数据库备份,以备恢复。删除之前先对数据库备份,以备恢复。uu如如果果一

259、一个个表表被被其其他他表表的的外外键键约约束束所所引引用用,那那么么必必须须先先删删除除设设置置外外键键的的表表或或解解除除其其外外键键约约束束才才能能对该表进行修改或删除操作。对该表进行修改或删除操作。u u 已已经经被被绑绑定定的的规规那那么么、默默认认值值对对象象不不能能删删除除,必须先解除绑定。必须先解除绑定。 【例例4-254-25】在在企企业业管管理理器器中中删删除除“商商品品明明细细表表“简简明明商商品品表表。在在删删除除时时,还还会会弹弹出出如如图图4-4-5151所所示示的的“除除去去对对象象确确认认对对话话框框,单单击击“全全部部除去按钮,即可将删除所选择的对象。除去按钮,

260、即可将删除所选择的对象。、用、用DROP TABLEDROP TABLE语句删除数据表及约束对象语句删除数据表及约束对象 1 1、用、用DROP TABLEDROP TABLE语句删除数据表语句删除数据表 语法格式:语法格式:DROP TABLE DROP TABLE 表名表名 , n n l l DROPDROP语语句句一一次次可可以以删删除除多多个个数数据据表表,但但不不能能删删除除系统表。系统表。ll如如果果一一个个表表被被其其他他表表的的外外键键约约束束所所引引用用,那那么么必必须须先先删删除除设设置置外外键键的的表表或或解解除除其其外外键键约约束束才才能能对对该表进行修改或删除操作。

261、该表进行修改或删除操作。ll一一旦旦一一个个表表被被删删除除,那那么么它它的的数数据据、结结构构定定义义、约约束束、索索引引都都将将被被同同时时永永久久地地删删除除,其其存存储储数数据据和和索引的空间都被释放。索引的空间都被释放。ll表的删除是永久性的,应当特别慎重。表的删除是永久性的,应当特别慎重。【例例4-264-26】将将前前面面例例题题中中创创立立的的“厂厂家家地地址址表表“厂厂家家地地址址表表1 1“上上海海厂厂家家表表“上上海海厂厂家家地地址址表表删除。删除。SQLSQL代码如下:代码如下: DROP DROP TABLE TABLE 厂厂家家地地址址表表,厂厂家家地地址址表表1

262、1,上上海海厂家表,上海厂家地址表厂家表,上海厂家地址表、用、用DROP TABLEDROP TABLE语句删除数据表及约束对象语句删除数据表及约束对象 2 2、用、用DROP RULEDROP RULE语句删除规那么语句删除规那么 语法格式:语法格式:DROP RULE DROP RULE 规那么名规那么名 , n n 已经被绑定了的规那么对象不能删除,必须先解除绑定。已经被绑定了的规那么对象不能删除,必须先解除绑定。3 3、用、用DROP DEFAULTDROP DEFAULT语句删除默认值语句删除默认值 语法格式:语法格式:DROP DEFAULT DROP DEFAULT 默认名称默认

263、名称 , n n 已经被绑定了的默认值对象不能删除,必须先解除绑定。已经被绑定了的默认值对象不能删除,必须先解除绑定。4.8 4.8 数据数据库应用用实例例? ?电脑器材器材销售管理售管理? ?的的数据表数据表 【实实例例练练习习4-214-21】为为了了给给后后续续各各章章提提供供更更好好的的使使用用模模型型,即即有有利利于于学学习习各各个个知知识识面面又又不不过过于于复复杂杂,我我们们给给diannaoxsdiannaoxs数据库再增加几条销售记录,例如:数据库再增加几条销售记录,例如: 2006-3-20 2006-3-20: “高高宏宏销销售售给给济济南南新新浪浪计计算算机机公公司司1

264、0011001号号商商品品3 3件件,单单价价57805780 “章章晓晓晓晓销销售售给给济济南南新新浪浪计计算算机机公公司司30013001号号商商品品5 5件件,单价单价400400 “陈陈刚刚销销售售给给潍潍坊坊电电脑脑器器材材商商店店40024002号号商商品品2525件件,单单价价320320 2006-3-26 2006-3-26: “于于 丽丽从从山山东东省省浪浪潮潮集集团团公公司司购购进进10031003号号商商品品1010件件,进价进价49504950【实例例练习4-214-21】 1 1向向? ?销售表销售表? ?添加记录的代码货名、金额允许为空,可以省略:添加记录的代码货

265、名、金额允许为空,可以省略: USE diannaoxs USE diannaoxs INSERT INSERT 销售表销售表2006(2006(销售日期销售日期, ,客户名称客户名称, ,货号货号, ,数量数量, ,单价单价, ,销售员销售员) ) VALUES (2006-3-20, VALUES (2006-3-20, 济南新浪计算机公司济南新浪计算机公司, 1001, , 1001, 3, 5780, 3, 5780, 高宏高宏) INSERT INSERT 销售表销售表2006(2006(销售日期销售日期, ,客户名称客户名称, ,货号货号, ,数量数量, ,单价单价, ,销售员销售

266、员) ) VALUES (2006-3-20, VALUES (2006-3-20, 济南新浪计算机公司济南新浪计算机公司, 3001, , 3001, 5, 400, 5, 400, 章晓晓章晓晓) INSERT INSERT 销售表销售表2006(2006(销售日期销售日期, ,客户名称客户名称, ,货号货号, ,数量数量, ,单价单价, ,销售员销售员) ) VALUES (2006-3-20, VALUES (2006-3-20, 潍坊电脑器材商店潍坊电脑器材商店, 4002, , 4002, 25, 320, 25, 320, 陈刚陈刚) INSERT INSERT 进货表进货表20

267、062006 VALUES (2006-3-26,1003,10, 4950,SDLC, VALUES (2006-3-26,1003,10, 4950,SDLC,于于 丽丽)2 2计算销售金额、从计算销售金额、从? ?商品一览表商品一览表? ?获得商品名称的代码:获得商品名称的代码: UPDATE UPDATE 销售表销售表2006 SET 2006 SET 金额金额= =单价单价* *数量数量 WHERE WHERE 销售日期销售日期=2005-3-20=2005-3-20 UPDATE UPDATE 销售表销售表2006 SET 2006 SET 货名货名= =商品一览表商品一览表. .

268、货名货名 FROM FROM 商品一览表商品一览表 WHERE WHERE 销售表销售表2006.2006.货号货号= =商品一览表商品一览表. .货号货号 and and 销售日期销售日期=2005-3-20=2005-3-20diannaoxsdiannaoxs数据数据库各数据表各数据表小结小结 至至此此,除除了了? ?商商品品一一览表表? ?的的“平平均均进价价“库存存量量需需要要使使用用? ?进货表表? ?和和? ?销售售表表? ?的的数数据据进行行计算算更更新新,我我们将将在在第第5 5章章查询中中完完成成外外,diannaoxsdiannaoxs数数据据库模模型型各各数数据据表表的

269、的数数据据如如图4-524-564-524-56所所示示。为了了便便于于练习对照照,读者者假假设随随本本书一一同同进行行操操作作的的话,可可将将自自己己的的数数据据表表进行行调整整,与与这些数据表一致。些数据表一致。 diannaoxsdiannaoxs数据数据库各数据表各数据表小结小结diannaoxsdiannaoxs数据数据库各数据表各数据表小结小结4.9实训要求实训要求1、理解并掌握SQLServer的数据类型、运算符与表达式及系统内置函数。2、理解数据表的结构,掌握用企业管理器或SQL语句创立、修改数据表和向数据表添加、修改、删除记录的方法。3、理解并掌握各种约束及规那么、默认值对象的意义和创立方法。4、学会删除数据表及各种约束对象的方法。5、根据教学进度,认真按照【实例练习4-1】【实例练习4-21】的要求进行操作,独立完成?电脑器材销售管理?数据库diannaoxs各数据表的创立。

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 商业/管理/HR > 商业计划书

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号