《数据库应用基础第三章数据表的建立.ppt》由会员分享,可在线阅读,更多相关《数据库应用基础第三章数据表的建立.ppt(52页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、数据库应用基础第三章数据表的建立 Still waters run deep.流静水深流静水深,人静心深人静心深 Where there is life,there is hope。有生命必有希望。有生命必有希望复习n n数据库的文件与文件组?SQL Server2005数据库具有数据库具有3种类型的文件种类型的文件1.主要数据文件主要数据文件2.次要数据文件次要数据文件3.事务日志文件事务日志文件2 2数据库的创建n nCREATE DATABASE database_nameCREATE DATABASE database_namen n ON ON n n PRIMARY,n PRIMA
2、RY,nn n ,n ,n n n LOG ON,n LOG ON,nn n n n COLLATE collation_name COLLATE collation_namen n WITH WITHn n n n;3 3本章主要内容本章主要内容n数据表的概念数据表的概念n表的创建、修改与删除表的创建、修改与删除 思考题思考题n创建数据库之前应该先确定什么?创建数据库之前应该先确定什么?练习练习n创建表(请同学们利用课余时间提前将所需创建表(请同学们利用课余时间提前将所需代码程序输入保存在代码程序输入保存在WORD文档中,以供实文档中,以供实验课所需)验课所需)n n 4 43.1表的概念表
3、的概念3.2SQL Server的数据类型的数据类型3.3数据库中表的操作数据库中表的操作5 53.1表的概念 数据表是数据库中最重要的对象之一数据表是数据库中最重要的对象之一.表是表是存储数据的场所。存储数据的场所。创建表的实质就是定义表结构及约束等属创建表的实质就是定义表结构及约束等属性。性。定义表结构包括定义表结构包括:确定表的名字、所包含的确定表的名字、所包含的列名、列的数据类型、长度、是否可为空列名、列的数据类型、长度、是否可为空值、默认值、列的标识属性等内容。值、默认值、列的标识属性等内容。6 6数据库数据库表表记录记录字段字段属性属性字段记录nameagetel.john1812
4、3marry20345join18123bookAuth.priceEngjohn123.0toolmarry345.57 7设计数据库步骤 确定数据库所需的表确定数据库所需的表每个表中数据的类型每个表中数据的类型可以访问每个表的用户可以访问每个表的用户8 8n n数据类型数据类型n n列数列数n n哪些列允许哪些列允许空值空值n n是否要使用以及何处使用约束、默认值和是否要使用以及何处使用约束、默认值和规则规则n n所需索引的类型所需索引的类型9 9创建表的方法创建一个基表创建一个基表-添加数据添加数据DBComp.priceuserSql Ser.MS10000Qin Hai Univ.O
5、racleOracle 20000Beijing Univ.AccessMs300Peoples Univ.10103 3.2 SQL Server.2 SQL Server 的数据类型的数据类型预备知识预备知识n n精度:指数值数据中所存储的十进制数据精度:指数值数据中所存储的十进制数据的总位数。的总位数。n n小数位数:指数值数据中小数点右边可以小数位数:指数值数据中小数点右边可以有的数字位数的最大值。例如数值数据有的数字位数的最大值。例如数值数据3890.587的精度是的精度是7,小数位数是,小数位数是3。n n长度:指存储数据所使用的字节数。长度:指存储数据所使用的字节数。注注:在在S
6、QL中,精确数值类型的长度不包括小数点,与以往的中,精确数值类型的长度不包括小数点,与以往的程序语言中的规定有所不同。程序语言中的规定有所不同。1111使用使用SQL Server 2008 系统数据类型系统数据类型创建基于系统数据类型的别名数据类型创建基于系统数据类型的别名数据类型从在从在Microsoft.NET Framework公共语言公共语言运行时创建的用户定义类型运行时创建的用户定义类型指定数据类型的方法?1212需要定义数据类型的情况?n n建立表格字段建立表格字段n n申请申请局部变量局部变量n n申请存储过程中的局部变量申请存储过程中的局部变量n n转换数据类型转换数据类型1
7、313数数据据类类型型二进制型二进制型 b binary(n),varbinary(n),image字符型字符型 char(n)char(n),varchar(n),textvarchar(n),text日期及时间日期及时间 datetimedatetime,smalldatetimesmalldatetime 精确数值型精确数值型 decimal(p,s),numeric(p,s)decimal(p,s),numeric(p,s)近似数值型近似数值型 float(n)float(n),Real Real 货币型货币型 moneymoney,smallmoneysmallmoney 特殊类型特
8、殊类型 bit,timestampbit,timestamp1414二二进进制制数数binarybinary最多为最多为80008000字节字节varbinaryvarbinary存储空间固定的存储空间固定的数据类型,指定数据类型,指定长度长度80008KB时,image数据1515由单引号由单引号括起括起来来由字母、符号和数字的任意组合组成由字母、符号和数字的任意组合组成字符字符数据数据char(n):char(n):列大小固定列大小固定varchar(n):varchar(n):列大小不固定列大小不固定最多为最多为80008000字节字节8KB的ASCII字符,text数据查询速查询速度较
9、快度较快输入字符输入字符长度长度n时,自动时,自动补空字符补空字符1616 text和和image数据类型数据类型 ntext:最多为最多为231-1个符号,存文字个符号,存文字nimage:最多为最多为231-1个个binary数据,存图数据,存图形形 text字段专用于存储字符(非字段专用于存储字符(非Unicode)数据,)数据,image字段专用于存储二进制数据,每条记字段专用于存储二进制数据,每条记录的录的text字段或字段或image字段均有一个或多个存字段均有一个或多个存储页储页(2KB)存放它的值存放它的值两者均是可变长度的数两者均是可变长度的数据类型据类型,占较多空间占较多空
10、间1717日期日期及时及时间型间型数据数据datetimedatetimeSmalldatetimeSmalldatetime数字数字分隔符分隔符数字数字 分隔符分隔符数字数字时间时间时间时间斜杠、连字斜杠、连字符、句号符、句号mdymdy04/15/199604/15/199604-15-199604-15-19964.15.19964.15.1996dym:15/1996/04dym:15/1996/041818精确数精确数值数据值数据decimal(p,s)numeric(p,s)p:精度值:精度值s:小数位小数位数数4.5近似数近似数值数据值数据real精度在精度在17之间之间floa
11、t精度在精度在815之间之间货币数据:货币数据:money、smallmoney加前缀,如加前缀,如$123负货币值,加负货币值,加-1231919Unicode字符数据字符数据 使用Unicode数据类型,列可存储由Unicode标准定义的任何字符,包含由不同字符集定义的所有字符nvarchar 列大小不固定 4000个字符数nchar 列大小固定 4000个字符数2020特特殊殊类类型型数数据据bit:存放存放1或或0的逻辑类型数据,对于的逻辑类型数据,对于0以外以外的值,一律以的值,一律以1表示表示timestamp:时间标签类型与系统时间无关时间标签类型与系统时间无关,只是个单调增加的
12、计数器,其值在数据库只是个单调增加的计数器,其值在数据库中是唯一的中是唯一的若有名为若有名为timestamptimestamp的字段而未的字段而未定义类型定义类型,自动为自动为timestamptimestamp类类型,若定义为其它类型也可。型,若定义为其它类型也可。为免混乱,最好不这样做为免混乱,最好不这样做User-DefinedDataType:SQLServer还允许还允许用户依据系统数据类型自定义数据类型用户依据系统数据类型自定义数据类型2121关于自定义数据类型关于自定义数据类型sp_addtypetypename,phystype,nulltype用户自定用户自定义数据类义数据
13、类型的名称型的名称SQLServer提供的数据提供的数据类型名称类型名称是否允许用户自是否允许用户自定义数据类型为定义数据类型为NULL值值把把zipcode作为自定义数据类型作为自定义数据类型,长度为长度为6EXECsp_addtypezipcode,char(6)删除自定义的数据类型删除自定义的数据类型zipcodeEXECsp_droptypezipcode2222xml数据类型xml数据类型允许用户在数据类型允许用户在SQL Server数据库数据库中存储中存储XML文档和片段文档和片段23233.3 数据库中表的操作在在SQL ServerSQL Server中创建数据库可以通过中创
14、建数据库可以通过Microsoft SQL Server Management StudioMicrosoft SQL Server Management Studio图形化界面和在图形化界面和在SQLSQL查询分析器输入查询分析器输入T-SQLT-SQL语语言言假定已经建好三个数据库假定已经建好三个数据库My_DB1My_DB1、My_DB2My_DB2和和My_DB3My_DB324243 3.3.1.3.1表的创建表的创建createtabledatabase.owner.table_name(col_namecolumn_propertiesconstraintconstraint|,
15、constraint,next_col_name|next_constraint)ONsegment_name表所在的表所在的数据库数据库表的所表的所有者有者列名列名列属性列属性2525CREATETABLELibrary_DB.dbo.borrower_info(idintCONSTRAINTperid_chkNOTNULLPRIMARYKEY,namenvarchar(6)NOTNULL,birthdaydate,gendernchar(1),addressnvarchar(20)NOTNULL,telcodechar(12)NOTNULL,约约束束名名例例4-14-1:在数据库:在数据库
16、Library_DBLibrary_DB中创建一张中创建一张用于借阅人员信息管理表用于借阅人员信息管理表borrower_infoborrower_info表,表中包括:借阅者编号、姓名、出表,表中包括:借阅者编号、姓名、出身年月、地址、电话号码、邮编等。身年月、地址、电话号码、邮编等。2626zipcodechar(6)CONSTRAINTzip_chkCHECK(zipcodeLIKE0-90-90-90-90-90-9)NOTNULL约束名约束名2727例例4-24-2:在:在My_DB1My_DB1数据库中创建一张表,包数据库中创建一张表,包含:学年度、学号,数学、英语、计算机、含:学
17、年度、学号,数学、英语、计算机、化学和物理等成绩化学和物理等成绩本例是一个多字段内容组合作为主键的本例是一个多字段内容组合作为主键的例子。创建的新表名字为例子。创建的新表名字为stud_score:2828CREATETABLEMy_DB1.dbo.stud_score(yearintNOTNULL,stud_idintNOTNULL,math_scorenumeric(4,1)CHECK(math_score=0andmath_score=0andengl_score=0andcomp_score=0andchem_score=0andphys_score=100),CONSTRAINTpk
18、_chkPRIMARYKEY(year,stud_id)3030本例中的主键定义为本例中的主键定义为primarykey(year,stud_id)以以year和和stud_id的组合作为主键的组合作为主键一个表只能一个表只能有一个主键有一个主键且值唯一且值唯一需要多列需要多列组合作为主键组合作为主键时要把作为主时要把作为主键的列用括号键的列用括号组合起来组合起来3131带有参照性约束的表的创建带有参照性约束的表的创建例例4-3:在数据库:在数据库Libray_DB中建一中建一个名为个名为book_info的表用于图书馆书的表用于图书馆书籍信息管理,包括的信息有:籍信息管理,包括的信息有:图书
19、编号图书编号图书名称图书名称作者、出版社、作者、出版社、ISBN、简介、语言、简介、语言价格、图书分类编号价格、图书分类编号书架号等书架号等3232CREATE TABLE Library_DB.dbo.book_info(book_id varchar(15)CONSTRAINT bookid_chk NOT NULL PRIMARY KEY,name nvarchar(100)NOT NULL,author nvarchar(100)NOT NULL,publish nvarchar(20)NOT NULL,ISBN nvarchar(40)NOT NULL,Introduction te
20、xt,language nvarchar(20)NOT NULL,price money NOT NULL,Class_id int CONSTRAINTclassid_chkNOT NULLREFERENCES class(class_id),Pressmark int NOT NULL33333 3.3.2.3.2 数据库中表的删除数据库中表的删除USElibrary_DBgodroptableadmingo删除删除borrower_info表:表:34343 3.3.3.3.3 数据库中表的修改数据库中表的修改(1)ALTER(1)ALTER 命令命令ALTERTABLEdatabase
21、.owner.table_nameWITHNOCHECKADDcolumn_namedatatypecolumn_constraints|,table_constraint|不指定此选项不指定此选项时时(默认情况默认情况),增加的约束,增加的约束要对现有数据要对现有数据进行检查,若进行检查,若发现违反约束,发现违反约束,ALTER TABLEALTER TABLE语语句将中止运行句将中止运行ADD允许在现存的表中增加新数允许在现存的表中增加新数据项或者一个约束据项或者一个约束3535指定删除指定删除数据库中数据库中的约束的约束DROPCONSTRAINTconstraint_name|COLU
22、MNcolumn_name,.n DROP指定删除指定删除现存表中的一个现存表中的一个字段或约束字段或约束指定删除数指定删除数据库中的列据库中的列3636例例4-44-4:向表向表borrower_infoborrower_info中加入字段名为中加入字段名为ethnicethnic的列,以记录该学生的民族。该列的的列,以记录该学生的民族。该列的属性为属性为nvarchar(5)nvarchar(5),缺省值为,缺省值为汉族汉族 ALTERTABLLibrary_DB.dbo.borrow_infoADDethnicnvarchar(5)NOTNULLDEFAULT(汉族汉族)drop和和ad
23、d子句不一定要同时出现子句不一定要同时出现3737值得注意的是:在删除某列时,基于该:在删除某列时,基于该列的所有索引和约束必须首先被删除掉。列的所有索引和约束必须首先被删除掉。例如例如,如果用户运行下面的命令想删除,如果用户运行下面的命令想删除新增加列时新增加列时ethnic,将出现错误。,将出现错误。ALTERTABLELibrary_DB.dbo.borrow_infoDROPCOLUMNethnic由于默认值约束的存在由于默认值约束的存在使删除该列失败。这就使删除该列失败。这就需要在删除该列之前,需要在删除该列之前,先将其上的约束删除先将其上的约束删除可以手动将字可以手动将字段段dor
24、mitorydormitory上上的默认值删除,的默认值删除,然后再运行上然后再运行上述命令述命令 3838(2)INSERT命令命令 通过通过INSERTINSERT语句,可以向表中增添新语句,可以向表中增添新的记录或在记录中插入部分字段的记录或在记录中插入部分字段的数据的数据INSERTINSERT命令的基本语法如下:命令的基本语法如下:INSERT INTO table_nameINSERT INTO table_name(column1,column2)(column1,column2)values(value1,value2)values(value1,value2)表名表名字段列表
25、字段列表相应的值列表相应的值列表3939例:例:4-5向向Library_DB中的中的borrower_info表插入记录表插入记录useLibrary_DBgoINSERTborrow_infovalues(981123,张新张新,12/15/1979,北京市海淀区北京市海淀区,010-64572345,100080)goINSERTborrow_infovalues(970890,赵红赵红,8/5/1979,上海市浦东区上海市浦东区,021-64897232,201700)4040输入项的顺序和数据类型必须与表输入项的顺序和数据类型必须与表中字段的顺序和数据类型相对应中字段的顺序和数据类型
26、相对应定义表结构时如果定义了缺省值,定义表结构时如果定义了缺省值,此时如对相应字段不输入值,则系此时如对相应字段不输入值,则系统会用缺省值插入表中统会用缺省值插入表中如果插入的数据不能满足约束性条如果插入的数据不能满足约束性条件,就出错件,就出错4141由于参照性约束的存在,必须先由于参照性约束的存在,必须先向被参照的表中插入数据,然后再向被参照的表中插入数据,然后再向定义了参照性约束的表中输入数向定义了参照性约束的表中输入数据据4242例:例:表表device_manage中的第一个字段中的第一个字段与表与表device_use中的最后一个字段是参中的最后一个字段是参照性约束的关系,被参照的
27、表为照性约束的关系,被参照的表为device_manage,在表,在表device_use中定义中定义了参照性约束,其输入方法如下:了参照性约束,其输入方法如下:4343useMy_DB2goINSERTdevice_managevalues(0789,分光计分光计,光学实验室光学实验室,20,5000,北京光学仪器厂北京光学仪器厂)goINSERTdevice_managevalues(0284,高能电子管高能电子管,电子实验电子实验室室,50,900,中科院电子所中科院电子所)先向先向device_manage表中插入记录表中插入记录4444然后再向然后再向device_use表中增加记录
28、表中增加记录useMy_DB2goINSERTdevice_usevalues(原子光谱分析原子光谱分析,化学实验化学实验室室,5/20/2000,970811,0789)goINSERTdevice_usevalues(原子光谱分析原子光谱分析,化学实验化学实验室室,5/20/2000,970890,0789)go4545由于存在参照约束关系,由于存在参照约束关系,device_use表中表中的的dev_id字段的值必须是字段的值必须是device_manage表的表的dev_id字段中的值字段中的值INSERTdevice_usevalues(发动机振动分析发动机振动分析,发动机实验发动机
29、实验室室,3/5/2001,980609,0234)4646如何插入如何插入部分数据部分数据?可可在在INSERT子句中指定列子句中指定列名,名,values子句中的数据项子句中的数据项与指定的列相对应,未列出与指定的列相对应,未列出的列必须具有允许的列必须具有允许NULL或或timestamp或或IDENTITY或或DEFAULT四种定义的条件四种定义的条件之一。跳过的列将以缺省值之一。跳过的列将以缺省值或者用或者用NULL填充填充4747如何把查询如何把查询结果插入到结果插入到另一张表中另一张表中在在INSERTINSERT语句中可用语句中可用SELECTSELECT从同一张表或从同一张表
30、或其他表中选择字段插其他表中选择字段插入到表结构与入到表结构与SELECTSELECT查询返回的结果相容查询返回的结果相容的表中,可插入多行的表中,可插入多行4848INSERTtable_nameinserttable_column_listSELECTselectable_column_listFROMtable_lsitWHERESearch_conditions需插入记录需插入记录的表的名称的表的名称插入到被插入到被插入表中插入表中的字段名的字段名从检从检索表索表中取中取出字出字段名段名检索条件检索条件把表把表table_list中符合检索中符合检索条件的记录中的条件的记录中的colu
31、mn_list字段插入表字段插入表table_name4949例:例:查询数据库查询数据库My_DB2中表中表device_manage中的中的dev_id信息,然后将查询结果插入到表信息,然后将查询结果插入到表device_use中的中的dev_id字段中字段中useMy_DB2INSERTintodevice_use(dev_id)selectdev_idfromdevice_manage5050用用UPDATE可以改变表中现存行的数据。可以改变表中现存行的数据。UPDATEtable_nameSETcolumn1=modified_value1,column2=modified_values,WHEREcolumn1=value1,column2=value2指定要更新数指定要更新数据的表名据的表名指定要更新指定要更新的列及该列的列及该列改变后的值改变后的值指定被更新的记录指定被更新的记录所应满足的条件所应满足的条件UPDATE(3)UPDATE语句语句5151(4)DELETE语句语句DELETE子句将删除一行或多行记录子句将删除一行或多行记录DELETEFROMtable_nameWHEREcolumn1=value1,column2=value2WHERE子句用来指定删除行的条件子句用来指定删除行的条件5252