资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,*,第二章,SQL Server,数据库表管理,1,第二章SQL Server数据库表管理1,回顾,使用企业管理器创建组、注册,用两种方法创建、修改、查看数据库,移动和配置数据库的选项,2,回顾使用企业管理器创建组、注册2,本章目标,使用企业管理器创建数据库表,设置表的主键、外键和建立表之间的关系,为表增加约束,3,本章目标使用企业管理器创建数据库表3,再论数据完整性 2-1,数据完整性,+,=,可靠性,准确性,4,再论数据完整性 2-1数据完整性+=可靠性准确性4,再论数据完整性 2-2,数据存放在表中,“数据完整性的问题大多是由于设计引起的”,创建表的时候,就应当保证以后数据输入是正确的,错误的数据、不符合要求的数据不允许输入,创建表:保证数据的完整性 = 实施完整性约束,5,再论数据完整性 2-2数据存放在表中创建表:保证数据的完整性,完整性包括2-1,输入的类型是否正确?,年龄必须是数字,输入的格式是否正确?,身份证号码必须是18位,是否在允许的范围内?,性别只能是”男”或者”女”,是否存在重复输入?,学员信息输入了两次,是否符合其他特定要求?,信誉值大于5的用户才能够加入会员列表,列值要求(约束),整行要求(约束),6,完整性包括2-1输入的类型是否正确?列值要求(约束)整行要,完整性包括2-2,域完整性,实体完整性,引用完整性,自定义完整性,7,完整性包括2-2域完整性实体完整性引用完整性自定义完整性7,实体完整性,河南新乡,赵可以,0010016,河南新乡,张丽鹃,0010015,江西南昌,雷铜,0010014,湖南新田,吴兰,0010013,山东定陶,李山,0010012,.,地址,姓名,学号,江西南昌,雷铜,0010014,思考:能否将学号为0010014的记录插入学生表中?,约束方法:唯一约束、主键约束、标识列,8,实体完整性河南新乡赵可以0010016河南新乡张丽鹃0010,域完整性,河南新乡,赵可以,0010016,河南新乡,张丽鹃,0010015,江西南昌,雷铜,0010014,湖南新田,吴兰,0010013,山东定陶,李山,0010012,.,地址,姓名,学号,湖北江门,李亮,8700000000,约束方法:限制数据类型、检查约束、外键约束、默认值、非空约束,9,域完整性河南新乡赵可以0010016河南新乡张丽鹃00100,引用完整性,河南新乡,赵可以,0010016,河南新乡,张丽鹃,0010015,江西南昌,雷铜,0010014,湖南新田,吴兰,0010013,山东定陶,李山,0010012,地址,姓名,学号,98,0010021,数学,约束方法:外键约束,科目,学号,分数,数学,0010012,88,数学,0010013,74,语文,0010012,67,语文,0010013,81,数学,0010016,98,10,引用完整性河南新乡赵可以0010016河南新乡张丽鹃0010,自定义完整性,AV121322,乔峰,CV0016,AV372133,玄痛,CV0015,AV378291,沙悟净,AV0014,AV378290,猪悟能,AV0013,AV378289,孙悟空,AV0012,.,会员证,用户姓名,用户编号,约束方法:规则、存储过程、触发器,帐号,姓名,信用,.,00192,孙悟空,7,00288,猪悟能,6,12333,段誉,8,90111,虚竹,40,93000,岳不群,-10,触发器:检查信用值,11,自定义完整性AV121322乔峰CV0016AV372133,表操作,在企业管理器中演示打开表、数据输入等操作,12,表操作在企业管理器中演示打开表、数据输入等操作12,创建数据库表-1,13,创建数据库表-113,SQL Server的数据类型,分类,备注和说明,数据类型,说明,二进制数据类型,存储非子符和文本的数据,Image,可用来存储图像,文本数据类型,字符数据包括任意字母、符号或数字字符的组合,Char,固定长度的非 Unicode 字符数据,Varchar,可变长度非,Unicode,数据,Nchar,固定长度的,Unicode,数据,Nvarchar,可变长度,Unicode,数据,Text,存储长文本信息,Ntext,存储可变长度的长文本,日期和时间,日期和时间在单引号内输入,Datetime,日期和时间,数字数据,该数据仅包含数字,包括正数、负数以及分数,int,smallint,整数,float,real,数字,货币数据类型,用于十进制货币值,Money,Bit,数据类型,表示是,/,否的数据,Bit,存储布尔数据类型,14,SQL Server的数据类型分类备注和说明数据类型说明二进,思考,电话号码一般使用什么数据类型存储?,性别一般使用什么数据类型存储?,年龄信息一般使用什么数据类型存储?,照片信息一般使用什么数据类型存储?,薪水一般使用什么数据类型存储?,15,思考电话号码一般使用什么数据类型存储?15,创建数据库表-2,16,创建数据库表-216,思考,学员姓名允许为空吗?,家庭地址允许为空吗?,电子邮件信息允许为空吗?,考试成绩允许为空吗?,17,思考学员姓名允许为空吗?17,创建数据库表-3,18,创建数据库表-318,思考,在主键列输入的数值,允许为空吗?,一个表可以有多个主键吗?,在一个学校数据库中,如果一个学校内允许重名的学员,但是一个班级内不允许学员重名,可以组合班级和姓名两个字段一起来作为主键吗?,19,思考在主键列输入的数值,允许为空吗?19,选择主键的原则,最少性,尽量选择单个键作为主键,稳定性,尽量选择数值更新少的列作为主键,20,选择主键的原则最少性20,创建数据库表-4,表中没有合适的列作为主键怎么办?,21,创建数据库表-4表中没有合适的列作为主键怎么办?21,思考,标识列允许为字符数据类型吗?,如果标识列A的初始值为1,增长量为2,则输入三行数据以后,再删除两行,下次再输入数据行的时候,标识值从多少开始?,22,思考标识列允许为字符数据类型吗?22,创建数据库表-5,23,创建数据库表-523,创建数据库表-6,演示建立主-外键关系,24,创建数据库表-6演示建立主-外键关系24,关系图,演示关系图,25,关系图演示关系图25,主表和从表,1、当主表中没有对应的记录时,不能将记录添加到子表,成绩表中不能出现在学员信息表中不存在的学号;,2、不能更改主表中的值而导致子表中的记录孤立,把学员信息表中的学号改变了,学员成绩表中的学号也应当随之改变;,3、子表存在与主表对应的记录,不能从主表中删除该行,不能,把有成绩的学员删除了,4,、删除主表前,先删子表,先删学员成绩表、后删除学员信息表,26,主表和从表1、当主表中没有对应的记录时,不能将记录添加到子表,创建数据库表-7,演示建立检查约束,27,创建数据库表-7演示建立检查约束27,创建数据库表完毕!,输入数据项,验证主键、主外键关系、检查约束,28,创建数据库表完毕!输入数据项,验证主键、主外键关系、检查约束,创建表,建表的语法,CREATE TABLE,表名,(,字段1 数据类型 列的特征,,字段2 数据类型 列的特征,,.,),列的特征:,包括该列是是否为空(NULL)、是否是标识列(自动编号)、是否有默认值、是否为主键等。,29,创建表建表的语法CREATE TABLE 表名列的特征:2,建表示例 1,USE,stuDB -将当前数据库设置为stuDB,GO,CREATE TABLE,stuInfo /*-创建学员信息表-*/,(,stuName,VARCHAR(20) NOT NULL ,-姓名,非空(必填),stuNo,CHAR(6) NOT NULL,-学号,非空(必填),stuAge,INT NOT NULL,-年龄,INT类型默认为4个字节,stuID,NUMERIC(18,0),-身份证号,stuSeat,SMALLINT,IDENTITY (1,1),-座位号,自动编号,stuAddress,TEXT,-住址,允许为空,即可选输入,),GO,NUMERIC (18,0),代表18位数字,小数位数为0,演示:创建学员信息表stuInfo,IDENTITY(起始值,递增量),30,建表示例 1USE stuDB -将当前数据库设置为s,建表示例 2,CREATE TABLE stuMarks,(,ExamNo CHAR(7) NOT NULL, -考号,stuNo CHAR(6) NOT NULL, -学号,writtenExam INT NOT NULL, -笔试成绩,LabExam INT NOT NULL -机试成绩,),GO,演示:创建学员成绩表 stuMarks,31,建表示例 2CREATE TABLE stuMarks演示:,删除表,如果当前数据库中已存在stuInfo表,再次创建时系统将提示出错 。如何解决呢?,32,删除表如果当前数据库中已存在stuInfo表,再次创建时系统,删除表,删除表的语法:,DROP TABLE,表名,USE stuDB -将当前数据库设置为stuDB ,以便在stuDB数据库中建表,GO,IF EXISTS(SELECT * FROM sysobjects WHERE name=stuInfo ),DROP TABLE stuInfo,CREATE TABLE stuInfo /*-创建学员信息表-*/,(,.,),GO,33,删除表删除表的语法:DROP TABLE 表名USE stu,SQL Server的约束,约束的目的:确保表中数据的完整型,常用的约束类型:,主键约束(Primary Key Constraint):要求主键列数据唯一,并且不允许为空,唯一约束(Unique Constraint):要求该列唯一,允许为空,但只能出现一个空值。,检查约束(Check Constraint):某列取值范围限制、格式限制等,如有关年龄的约束,默认约束(Default Constraint):某列的默认值,如我们的男性学员较多,性别默认为“男”,外键约束(Foreign Key Constraint):用于两表间建立关系,需要指定引用主表的那列,34,SQL Server的约束约束的目的:确保表中数据的完整型3,添加约束,添加约束的语法:,ALTER TABLE,表名,ADD CONSTRAINT,约束名 约束类型 具体的约束说明,约束名的取名规则推荐采用:约束类型_约束字段,主键(Primary Key)约束:如,PK,_stuNo,唯一(Unique Key)约束:如,UQ,_stuID,默认(Default Key)约束:如,DF,_stuAddress,检查(Check Key)约束:如,CK,_stuAge,外键(Foreign Key)约束:如,FK,_stuNo,35,添加约束 添加约束的语法:ALTER TABLE 表名 约,添加约束示例,ALTER TABLE,stuInfo,ADD CONSTRAINT,PK_stuNo,PRIMARY KEY,(stuNo),ALTER TABLE,stuInfo,ADD CONSTRAINT,UQ_stuID,UNIQUE,(stuID),ALTER TABLE,stuInfo,ADD CONSTRAINT,DF_stuAddress,DEFAULT,(地址不详),FOR,stuAddress,ALTER TABLE,stuInfo,ADD CONSTRAINT,CK_stuAge,CHECK,(stuAge,BETWEEN,15,AND,40),ALTER TABLE,stuMarks,ADD CONSTRAINT,FK_stuNo,FOREIGN KEY,(stuNo),REFERENCES,stuInfo(stuNo),GO,演示:给学员信息表stuInfo添加约束,添加主键约束(stuNo作为主键),添加唯一约束(因为每人的身份证号全国唯一),添加默认约束(如果地址不填,默认为“地址不详”),添加检查check约束,要求年龄只能在1540岁之间,添加外键约束(主表stuInfo和从表stuMarks建立关系,关联字段为stuNo),36,添加约束示例ALTER TABLE stuInfo 演示:给,删除约束,如果错误地添加了约束,我们还可以删除约束,删除约束的语法,ALTER TABLE,表名,DROP CONSTRAINT,约束名,例如:删除stuInfo表中地址默认约束,ALTER TABLE,stuInfo,DROP CONSTRAINT,DF_stuAddress,37,删除约束如果错误地添加了约束,我们还可以删除约束 ALTER,总结,SQL Server创建表的过程是规定数据列的属性的过程,同时也是实施数据完整性(包括实体完整性、引用完整性和域完整性等)保证的过程,实体完整性数据行不能存在重复,引用完整性要求子表中的相关项必须在主表中存在,域完整性实现了对输入到特定列的数值的限制,SQL Server中存在五种约束,分别是:主键约束、外键约束、检查约束、默认约束和唯一性约束(唯一性约束将在后续课程中使用SQL语句实现),38,总结SQL Server创建表的过程是规定数据列的属性的过程,总结,创建数据库表需要:确定表的列名、数据类型、是否允许为空,还需要确定主键、必要的默认值、标识列和检查约束,如果建立了主表和子表的关系,则:,子表中的相关项目的数据,在主表中必须存在;,主表中相关项的数据更改了,则子表对应的数据项也应当随之,更改;,在删除子表之前,不能够删除主表;,39,总结创建数据库表需要:确定表的列名、数据类型、是否允许为空,,
展开阅读全文