第3章 SQL语言基础及数据定义功能课件_第1页
第3章 SQL语言基础及数据定义功能课件_第2页
第3章 SQL语言基础及数据定义功能课件_第3页
第3章 SQL语言基础及数据定义功能课件_第4页
第3章 SQL语言基础及数据定义功能课件_第5页
已阅读5页,还剩97页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数据库原理与应用第3章SQL语言基础及数据定义功能3.1SQL语言概述3.2SQL语言支持的数据类型3.3数据定义功能3.4索引数据库原理与应用第3章SQL语言基础及数据定义功能1SQL?数据库DBMS修改数据删除数据添加数据查询数据SQL?数据库DBMS修改数据删除数据添加数据查询数据SQL是关系数据库的标准语言用户使用数据库主要是对数据库进行各种操作查询数据、添加数据、删除数据和修改数据等DBMS为用户提供相应的命令或语言实现各种操作成为用户和数据库的接口数据库提供的语言仅仅是对数据库操作的功能,不提供完备的程序设计语言,也不能独立地用来编写程序SQL(StructuredQueryLanguage结构化查询语言)是用户操作关系数据库的通用语言。SQL不仅仅提供查询,还包含数据定义、数据查询、数据操作和数据控制等与数据库有关的全部功能SQL已经成为关系数据库的标准语言,现行的所有关系数据库管理系统都支持SQL。SQL是关系数据库的标准语言用户使用数据库主要是对数据库进行3.1.1SQL语言的发展SQL原型在20世纪70年代,IBM研究人员开发的SEQUEL1986年10月由美国ANSI颁布最早的SQL标准1989年4月,ISO提出了具备完整性特征的SQL,称为SQL-89(SQL1)。1992年11月,ISO又公布了新的SQL标准,称为SQL-92(以上均为关系形式)(SQL2)。

1999年颁布SQL-99(SQL3),是SQL92的扩展。不同数据库厂商的数据库系统所提供的SQL语言略有差别本课程使用微软的SQLServerT-SQL为主3.1.1SQL语言的发展SQL原型在20世纪70年代,I3.1.2SQL语言的特点1.一体化2.高度非过程化3.简洁4.使用方式多样3.1.2SQL语言的特点1.一体化3.1.3SQL语言功能概述四部分功能数据定义功能:定义、删除和修改数据库中对象数据控制功能:查询数据功能数据查询功能:增加、删除和修改数据库数据数据操纵功能:控制用户对数据库的操作权限SQL功能命令动词数据定义CREATE,DROP,ALTER数据查询SELECT数据更改INSERT,UPDATE,DELETE数据控制GRANT,REVOKE,DENY3.1.3SQL语言功能概述四部分功能SQL功能命令动词数3.2SQL语言支持的数据类型定义表时必须指明每列的数据类型每个厂商的数据库管理系统所支持的数据类型不完全相同,与标准的SQL也有差异微软的SQLServer支持如下类型数值型字符串型日期时间型货币型3.2SQL语言支持的数据类型定义表时必须指明每列的数据类3.2.1数值型—准确型计算机中精确存储的数据,包括整型、定点小数等Bigint 8字节 -263~263-1整数Int 4字节 -231~231-1整数Smallint 2字节 -216~216-1整数Tinyint 1字节 0~255整数Bit 存储1或0Numeric(p,q)、Decimal(p,q) p为数字位长度,q为小数位长度-1038+1~1038-1的数据3.2.1数值型—准确型计算机中精确存储的数据,包括整型、3.2.1数值型—近似型表示浮点数据的近似数据Float 8字节-1.79E+308~1.79E+308浮点数real 4字节-3.40E+38~3.40E+38浮点数3.2.1数值型—近似型表示浮点数据的近似数据3.2.2字符串型普通编码字符串类型、统一字符编码字符串类型和二进制字符串类型。用’’标识----------------------------------------------Char(n) 固定长度字符串。 n:1~8000Varchar(n) 可变长度字符串。 n:1~8000Text 大文本 231-1个字符Nchar(n) 固定长度Unicode n:1~4000Nvacharn(n) 可变长度Unicode n:1~4000Ntext Unicode大文本 230-1个字符Binary(n) 固定长度二进制字符 n:1~8000Varbinary(n) 可变长度二进制字符 n:1~8000Image 大容量可变长度二进制字符231-1个字符3.2.2字符串型普通编码字符串类型、统一字符编码字符串类3.2.3日期时间类型Datetime 8字节 1753.1.1~9999.12.31 精确到3.33毫秒(例:‘2008/02/0310:30:00.000’)Smalldatetime 4字节 1900.1.1~2079.6.6 精确到分钟(例:‘2008/02/0310:30:00’)时间格式英文数字格式 oct252001数字加分隔符格式 2001-10-25或2001/10/25纯数字格式 20011030时间格式12小时格式 2001-10-253:28:56PM24小时格式 2001-10-2515:28:563.2.3日期时间类型Datetime 8字节 1753.2.4货币格式Money 8字节 -922,337,203,685,477.5808 ~ 922,337,203,685,477.5807

精确到货币单位的千分之十,最多包含19位数字Smallmoney 4字节 -214,748.3648 ~ 214,748.3647

精确到货币单位的千分之十限制到小数点后4位。可以带有适当的货币符号。例如100英镑可表示为£100。3.2.4货币格式Money 8字节 3.3数据定义功能表是数据库中非常重要的对象,用来存放用户的数据关系数据库中的表是二维表,包含行和列创建表就是定义表所包含的列的结构(列名、数据类型、约束等)3.3.1基本表3.3.2数据完整性约束3.3数据定义功能表是数据库中非常重要的对象,用来存放用户3.3.1基本表定义基本表修改基本表删除基本表3.3.1基本表定义基本表1、定义基本表使用CREATETABLE语句实现,语法格式:符号约定:[]可选,{…}重复,|多选一,…CREATETABLE<表名>(

<列名><数据类型>[列级完整性约束定义]{,<列名><数据类型>[列级完整性约束定义]…}[,表级完整性约束定义])表名:要定义的基本表的名称列名:表中包含的属性列的名字数据类型:列的数据类型列级完整型约束:只涉及一个列的完整性约束表级完整型约束:涉及多个列的完整性约束1、定义基本表使用CREATETABLE语句实现,在列级完整性约束定义处可以定义的约束NOTNULL 限制列取值非空。DEFAULT 给定列的默认值。UNIQUE 限制列取值不重。CHECK 限制列的取值范围。PRIMARYKEY 指定本列为主键。FOREIGNKEY 定义本列为引用其他表的外键使用形式为:[FOREIGNKEY(<外键列名>)]REFERENCES<外表名>(<外表列名>)在列级完整性约束定义处可以定义的约束NOTNULL 限说明NOTNULL和DEFAULT只能是列级完整性约束;其他约束均可在表级完整性约束处定义。注意以下几点:如果CHECK约束是定义多列之间的取值约束,则只能在表级完整性约束处定义;如果表的主键由多个列组成,则也只能在表级完整性约束处定义,并将主键列用括号括起来,即:PRIMARYKEY(列1{[,列2]…});如果在表级完整性约束处定义外键,则“FOREIGNKEY(<外键列名>)”部分不能省。说明NOTNULL和DEFAULT只能是列级完整性约束;约束举例列取值非空约束

例:snamechar(10)NOTNULL表主键约束在定义列时定义主键(仅用于单列主键)例: SNOchar(7)PRIMARYKEY在定义完列时定义主键(用于单列或多列主键)例: PRIMARYKEY(SNO) PRIMARYKEY(SNO,CNO)外键引用约束例:FOREIGNKEY(sno)REFERENCES学生表(sno)约束举例列取值非空约束创建(student)学生表CREATETABLEStudent(Sno CHAR(7) PRIMARYKEY,Sname NCHAR(5) NOTNULL,Ssex NCHAR(1) ,Sage TINYINT ,Sdept NVARCHAR(20))列名含义数据类型约束Sno学号CHAR(7)主码Sname姓名NCHAR(5)非空Ssex性别NCHAR(1)Sage年龄TINYINTSdept所在系NVARCHAR(20)创建(student)学生表CREATETABLEStu创建Course(学生)表CREATETABLECourse(Cno CHAR(6) PRIMARYKEY,Cname NVARCHAR(20) NOTNULL,Ccredit TINYINT ,Semster TINYINT )列名含义数据类型约束Cno课程号CHAR(6)主键Cname课程名NVARCHAR(20)非空Ccredit学分TINYINTSemster学期TINYINT创建Course(学生)表CREATETABLECour创建SC(学生修课)表CREATETABLESC(Sno CHAR(7) NOTNULL,Cno CHAR(6) NOTNULL,Grade TINYINT,PRIMARY KEY(Sno,Cno),FOREIGN KEY(Sno)REFERENCESStudent(Sno),FOREIGN KEY(Cno)REFERENCESCourse(Cno))列名含义数据类型约束Sno学号CHAR(7)主键,引用Student的外键Cno课程号CHAR(6)主键,引用Course的外键Grade成绩TINYINT创建SC(学生修课)表CREATETABLESC(列名2、修改基本表在定义基本表之后,如果需求有变化,比如添加列、删除列或修改列定义,可以使用ALTERTABLE语句实现。ALTERTABLE语句可以对表添加列、删除列、修改列的定义,也可以添加和删除约束。语法 ALTERTABLE<表名> [ALTERCOLUMN<列名><新数据类型>]

|[ADD<列名><数据类型>[约束]

|[DROPCOLUMN<列名>]

|[ADD[constraint约束名]约束定义

|[DROP[constraint]<约束名>]2、修改基本表在定义基本表之后,如果需求有变化,比如添加列、示例例1.为SC表添加“修课类别”列,此列的列名为Type,数据类型为NCHAR(2),允许空。ALTERTABLESC ADDTypeNCHAR(2)NULL例2.将新添的Type列数据类型改为NCHAR(4)。ALTERTABLESC ALTERCOLUMNTypeNCHAR(4)例3.删除SC表的Type列。ALTERTABLESC DROPCOLUMNType示例例1.为SC表添加“修课类别”列,此列的列名为Type,3、删除基本表当确信不再需要某个表时,可以将其删除。删除表的语句格式为: DROPTABLE<表名>{[,<表名>]…}例:删除test表:DROPTABLEtest3、删除基本表当确信不再需要某个表时,可以将其删除。3.3.2数据完整性约束为了防止数据库中存在不符合语义的数据数据库中数据的语义约束条件就是数据完整性约束条件DBMS通过完整性检查的功能来检查数据库中的数据是否满足完整性约束条件1、完整性约束条件的作用对象2、实现数据完整性3.3.2数据完整性约束为了防止数据库中存在不符合语义的1、完整性约束条件的作用对象完整性检查是围绕完整性约束条件进行的,完整性约束条件是完整性控制机制的核心。完整性约束条件的作用对象可以是表、元组和列。列级约束元组约束关系约束1、完整性约束条件的作用对象完整性检查是围绕完整性约束条件进列级约束列级约束主要是对列的类型、取值范围、精度等的约束,具体包括:对数据类型的约束:包括数据类型、长度、精度等。对数据格式的约束:如规定学号的前两位表示学生的入学年份,第三位表示系的编号,第四位表示专业编号,第五位代表班的编号等等。对取值范围的约束:如学生的成绩取值范围为0~100。对空值的约束。列级约束列级约束主要是对列的类型、取值范围、精度等的约束,具元组约束元组的约束是元组中各个字段之间的联系的约束,如:开始日期小于结束日期某项工作的最低工资小于最高工资元组约束元组的约束是元组中各个字段之间的联系的约束,关系约束指若干元组之间、关系之间的联系的约束。如:学生表中学号的取值不能重复也不能取空值,学生修课表中的学号的取值受学生表中的学号取值的约束关系约束指若干元组之间、关系之间的联系的约束。2、实现数据完整性实现数据完整性一般在服务器端完成。在服务器端实现数据完整性的方法主要有两种。一种是在定义表时声明数据完整性,采用这种方法时可以在定义表的同时定义完整性约束,也可以在定义表之后添加这些约束。一种是在服务器端编写触发器来实现数据完整性。2、实现数据完整性实现数据完整性一般在服务器端完成。实现约束PRIMARYKEY约束 主键约束UNIQUE约束 唯一值约束FOREIGNKEY约束 参照完整性约束DEFAULT约束 默认值约束CHECK约束 列取值范围约束实现约束PRIMARYKEY约束 主键约束举例CREATETABLE工作表(工作编号 CHAR(6) NOTNULL,

最低工资 NUMERIC(7,2) ,最高工资 NUMERIC(7,2))工作表表结构列名数据类型约束工作编号CHAR(6)非空,主键最低工资NUMERIC(7,2)大于等于80最高工资NUMERIC(7,2)大于等于最低工资举例CREATETABLE工作表(工作表表结构列名数据举例CREATETABLE职工表(

职工编号

CHAR(7) NOTNULL,

姓名 NCHAR(5) NOTNULL,

工作编号 CHAR(6) ,

工资 NUMERIC(7,2),电话号码 CHAR(8))职工表表结构列名数据类型约束职工编号CHAR(7)非空,主键姓名NCHAR(5)非空工作编号CHAR(6)外键工资NUMERIC(7,2)默认值1000电话号码CHAR(8)取值不同,每位均为0~9举例CREATETABLE职工表(职工表表结构列名数主键约束 PRIMARYKEY约束保证实体完整性。每个表有且只有一个PRIMARYKEY约束。用PRIMARYKEY约束的列不能有重复,不能为空格式: ALTERTABLE表名 ADD[CONSTAINT约束名] PRIMARYKEY(列名[,…n])例1:ALTERTABLE职工表 ADDCONSTAINTPK_EMP PRIMARYKEY(职工编号)例2:ALTERTABLE工作表 ADDCONSTAINTPK_JOB PRIMARYKEY(工作编号)主键约束 PRIMARYKEY约束保证实体完整性。每个唯一键约束 UNIQUE约束确保在非主键列中不输入重复值。应用在客观具有唯一性质的列上,如身份证号、社会保险号等。注意事项:允许有一个空值。在一个表中可以定义多个UNIQUE约束。可以在一个列或多个列上定义UNIQUE约束。语法格式: ALTERTABLE表名 ADD[CONSTRAINT约束名] UNIQUE(<列名>[,…n])例1:为职工表的“电话号码”列添加UNIQUE约束。ALTERTABLE职工表 ADDCONSTRAINTUK_SID UNIQUE(电话号码)唯一键约束 UNIQUE约束确保在非主键列中不输入重复值。外键约束 FOREIGNKEY约束实现参照完整性。外键所引用的列必须是有PRIMARYKEY约束或UNIQUE约束的列。格式: ALTERTABLE表名

ADD[CONSTRAINT约束名] FOREIGNKEY(<列名>)

REFERENCES引用表名(<列名>)例.为职工表的工作编号添加外键引用约束,此列引用工作表的工作编号列ALTERTABLE职工表

ADDCONSTRAINTFK_job_idFOREIGNKEY(工作编号)

REFERENCES工作表(工作编号)外键约束 FOREIGNKEY约束实现参照完整性。外键所默认值约束 DEFAULT约束用于提供列的默认值,一个列只能有一个默认值约束,一个默认值约束只能用在一个列上。在向表中插入数据时系统检查DEFAULT约束。格式: ALTERTABLE表名

ADD[CONSTRAINT约束名] DEFAULT默认值FOR列名例.定义职工表的工资的默认值为1000。ALTERTABLE职工表

ADDCONSTRAINTDF_SALARYDEFAULT1000FOR工资默认值约束 DEFAULT约束用于提供列的默认值,列取值范围约束 CHECH约束用于将列的取值限制在指定的范围内,使数据库中存放的值都是有意义的。在执行INSERT和UPDATE语句时系统自动检查CHECK约束。可约束同一个表中多个列之间的取值关系。格式: ALTERTABLE表名ADD[CONSTRAINT约束名] CHECK(逻辑表达式)例1.添加限制最工作表中低工资必须大于等于800元的约束 ALTERTABLE工作表ADDCONSTRAINTCHK_Salary CHECK(最低工资>=800)例2.限制工作表的最高工资大于等于最低工资的约束。ALTERTABLE工作表ADDCONSTRAINTCHK_Job_Salary CHECK(最高工资>=最低工资)列取值范围约束 CHECH约束用于将列的取值限制在指定的列取值范围约束示例例1.添加限制最工作表中低工资必须大于等于800元的约束 ALTERTABLE工作表ADDCONSTRAINTCHK_Salary CHECK(最低工资>=800)例2.限制工作表的最高工资大于等于最低工资的约束。 ALTERTABLE工作表ADDCONSTRAINTCHK_Job_Salary CHECK(最高工资>=最低工资)例3.添加限制职工表的电话号码的每1位的取值均是0~9的数字的约束ALTERTABLE职工表

ADDCONSTRAINTCHK_Emp_Phone CHECK(电话号码LIKE'[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]')列取值范围约束示例例1.添加限制最工作表中低工资必须大于等于完整定义CREATETABLE工作表( 工作编号CHAR(6)NOTNULLPRIMARYKEY,

最低工资NUMERIC(7,2)CHECK(最低工资>=800),

最高工资NUMERIC(7,2), CHECK(最高工资>=最低工资))CREATETABLE职工表(

职工编号CHAR(7)NOTNULLPRIMARYKEY,

姓名NCHAR(5)NOTNULL,

工作编号CHAR(6),

工资NUMERIC(7,2)DEFAULT1000,

电话号码CHAR(8)UNIQUE,CHECK(电话号码LIKE'[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'),FOREIGNKEY(工作编号)REFERENCES工作表(工作编号))完整定义CREATETABLE工作表(3.4索引在数据库中增加索引是为了加快查询速度3.4.1基本概念3.4.2索引分类3.4.3创建和删除索引3.4索引在数据库中增加索引是为了加快查询速度3.4.1基本概念索引与图书中的目录类似。在数据库中,索引使对数据的查找不需要对整个表进行扫描,就可以在其中找到所需数据。图书的目录注明了各部分内容所对应的页码,而数据库中的索引是一个表中所包含的值的列表,其中注明了表中的各行数据所在的存储位置。可以为表中的单个列建立索引,也可以为一组列建立索引。索引由索引项组成,索引项由来自表中每一行的一个或多个列(称为索引关键字)组成。当在多个列上建立索引时,系统按索引列出现的先后顺序对索引列进行排序。3.4.1基本概念索引与图书中的目录类似。索引及数据间对应关系索引及数据间对应关系3.4.2索引分类聚集索引数据按索引列进行物理排序,类似于电话号码簿。对经常要搜索连续范围的值的列特别有效。一个表只能有一个聚集索引非聚集索引唯一索引3.4.2索引分类聚集索引3.4.2索引分类聚集索引非聚集索引与图书的目录类似。数据存储在一个地方,索引存储在另一个地方,索引带有指向数据存储位置的指针。索引中的索引项按索引键值顺序存储。非聚集索引可以在有聚集索引的表和无聚集索引的表上定义。可以在一个表上建立多个非聚集索引(SQLServer2000支持在一个表上最多建立249个非聚集索引)。可以为在表中查找数据时常用的每个列创建一个非聚集索引唯一索引3.4.2索引分类聚集索引3.4.2索引分类聚集索引非聚集索引唯一索引唯一索引可以确保索引列不包含重复的值。在多列唯一索引的情况下,可以确保索引列中每个值的组合都是唯一的。聚集索引和非聚集索引都可以是唯一的。3.4.2索引分类聚集索引3.4.3创建索引语法格式CREATE[UNIQUE][CLUSTERED|NONCLUSTERED]INDEX<索引名>ON<表名>(<列名>[<顺序>[,<列名>[<顺序>]…]]UNIQUE:创建唯一索引。CLUSTERED:创建聚集索引。NONCLUSTERED:创建非聚集索引。“顺序”包括ASC(升序)和DESC(降序),表示索引键值的排序顺序,默认为ASC。默认是创建非聚集索引。3.4.3创建索引语法格式创建索引举例例1在Student表的Sname列上创建非聚集索引。CREATEINDEXSname_indONStudent(Sname)例2在职工表的“电话号码”列上创建一个唯一的聚集索引。CREATEUNIQUECLUSTEREDINDEXPhone_indON职工表(电话号码)创建索引举例例1在Student表的Sname列上创建非聚创建索引举例例3在职工表的“姓名”列上创建一个非聚集索引,要求索引键值按“姓名”升序排序。CREATEINDEXEName_ind ON职工表(姓名ASC)例4在last_name和first_name两个列(假设在authors表中)上创建一个非聚集复合索引。CREATEINDEXTwoName_indONauthors(last_name,first_name)创建索引举例例3在职工表的“姓名”列上创建一个非聚集索引删除索引索引一经建立,就由数据库管理系统自动使用和维护,不需要用户干预。如果频繁地对数据进行增加、删除和更改操作,则系统会花费很多时间来维护索引,这会降低数据的修改效率;存储索引需要占用额外的空间。删除索引的语法格式:

DROPINDEX<表名>.<索引名>例5删除职工表“姓名”列上的EName_ind索引。

DROPINDEX职工表.EName_ind删除索引索引一经建立,就由数据库管理系统自动使用和维护,不需本章作业P42

12,13,14,15,20,21,22本章作业P42数据库原理与应用第3章SQL语言基础及数据定义功能3.1SQL语言概述3.2SQL语言支持的数据类型3.3数据定义功能3.4索引数据库原理与应用第3章SQL语言基础及数据定义功能52SQL?数据库DBMS修改数据删除数据添加数据查询数据SQL?数据库DBMS修改数据删除数据添加数据查询数据SQL是关系数据库的标准语言用户使用数据库主要是对数据库进行各种操作查询数据、添加数据、删除数据和修改数据等DBMS为用户提供相应的命令或语言实现各种操作成为用户和数据库的接口数据库提供的语言仅仅是对数据库操作的功能,不提供完备的程序设计语言,也不能独立地用来编写程序SQL(StructuredQueryLanguage结构化查询语言)是用户操作关系数据库的通用语言。SQL不仅仅提供查询,还包含数据定义、数据查询、数据操作和数据控制等与数据库有关的全部功能SQL已经成为关系数据库的标准语言,现行的所有关系数据库管理系统都支持SQL。SQL是关系数据库的标准语言用户使用数据库主要是对数据库进行3.1.1SQL语言的发展SQL原型在20世纪70年代,IBM研究人员开发的SEQUEL1986年10月由美国ANSI颁布最早的SQL标准1989年4月,ISO提出了具备完整性特征的SQL,称为SQL-89(SQL1)。1992年11月,ISO又公布了新的SQL标准,称为SQL-92(以上均为关系形式)(SQL2)。

1999年颁布SQL-99(SQL3),是SQL92的扩展。不同数据库厂商的数据库系统所提供的SQL语言略有差别本课程使用微软的SQLServerT-SQL为主3.1.1SQL语言的发展SQL原型在20世纪70年代,I3.1.2SQL语言的特点1.一体化2.高度非过程化3.简洁4.使用方式多样3.1.2SQL语言的特点1.一体化3.1.3SQL语言功能概述四部分功能数据定义功能:定义、删除和修改数据库中对象数据控制功能:查询数据功能数据查询功能:增加、删除和修改数据库数据数据操纵功能:控制用户对数据库的操作权限SQL功能命令动词数据定义CREATE,DROP,ALTER数据查询SELECT数据更改INSERT,UPDATE,DELETE数据控制GRANT,REVOKE,DENY3.1.3SQL语言功能概述四部分功能SQL功能命令动词数3.2SQL语言支持的数据类型定义表时必须指明每列的数据类型每个厂商的数据库管理系统所支持的数据类型不完全相同,与标准的SQL也有差异微软的SQLServer支持如下类型数值型字符串型日期时间型货币型3.2SQL语言支持的数据类型定义表时必须指明每列的数据类3.2.1数值型—准确型计算机中精确存储的数据,包括整型、定点小数等Bigint 8字节 -263~263-1整数Int 4字节 -231~231-1整数Smallint 2字节 -216~216-1整数Tinyint 1字节 0~255整数Bit 存储1或0Numeric(p,q)、Decimal(p,q) p为数字位长度,q为小数位长度-1038+1~1038-1的数据3.2.1数值型—准确型计算机中精确存储的数据,包括整型、3.2.1数值型—近似型表示浮点数据的近似数据Float 8字节-1.79E+308~1.79E+308浮点数real 4字节-3.40E+38~3.40E+38浮点数3.2.1数值型—近似型表示浮点数据的近似数据3.2.2字符串型普通编码字符串类型、统一字符编码字符串类型和二进制字符串类型。用’’标识----------------------------------------------Char(n) 固定长度字符串。 n:1~8000Varchar(n) 可变长度字符串。 n:1~8000Text 大文本 231-1个字符Nchar(n) 固定长度Unicode n:1~4000Nvacharn(n) 可变长度Unicode n:1~4000Ntext Unicode大文本 230-1个字符Binary(n) 固定长度二进制字符 n:1~8000Varbinary(n) 可变长度二进制字符 n:1~8000Image 大容量可变长度二进制字符231-1个字符3.2.2字符串型普通编码字符串类型、统一字符编码字符串类3.2.3日期时间类型Datetime 8字节 1753.1.1~9999.12.31 精确到3.33毫秒(例:‘2008/02/0310:30:00.000’)Smalldatetime 4字节 1900.1.1~2079.6.6 精确到分钟(例:‘2008/02/0310:30:00’)时间格式英文数字格式 oct252001数字加分隔符格式 2001-10-25或2001/10/25纯数字格式 20011030时间格式12小时格式 2001-10-253:28:56PM24小时格式 2001-10-2515:28:563.2.3日期时间类型Datetime 8字节 1753.2.4货币格式Money 8字节 -922,337,203,685,477.5808 ~ 922,337,203,685,477.5807

精确到货币单位的千分之十,最多包含19位数字Smallmoney 4字节 -214,748.3648 ~ 214,748.3647

精确到货币单位的千分之十限制到小数点后4位。可以带有适当的货币符号。例如100英镑可表示为£100。3.2.4货币格式Money 8字节 3.3数据定义功能表是数据库中非常重要的对象,用来存放用户的数据关系数据库中的表是二维表,包含行和列创建表就是定义表所包含的列的结构(列名、数据类型、约束等)3.3.1基本表3.3.2数据完整性约束3.3数据定义功能表是数据库中非常重要的对象,用来存放用户3.3.1基本表定义基本表修改基本表删除基本表3.3.1基本表定义基本表1、定义基本表使用CREATETABLE语句实现,语法格式:符号约定:[]可选,{…}重复,|多选一,…CREATETABLE<表名>(

<列名><数据类型>[列级完整性约束定义]{,<列名><数据类型>[列级完整性约束定义]…}[,表级完整性约束定义])表名:要定义的基本表的名称列名:表中包含的属性列的名字数据类型:列的数据类型列级完整型约束:只涉及一个列的完整性约束表级完整型约束:涉及多个列的完整性约束1、定义基本表使用CREATETABLE语句实现,在列级完整性约束定义处可以定义的约束NOTNULL 限制列取值非空。DEFAULT 给定列的默认值。UNIQUE 限制列取值不重。CHECK 限制列的取值范围。PRIMARYKEY 指定本列为主键。FOREIGNKEY 定义本列为引用其他表的外键使用形式为:[FOREIGNKEY(<外键列名>)]REFERENCES<外表名>(<外表列名>)在列级完整性约束定义处可以定义的约束NOTNULL 限说明NOTNULL和DEFAULT只能是列级完整性约束;其他约束均可在表级完整性约束处定义。注意以下几点:如果CHECK约束是定义多列之间的取值约束,则只能在表级完整性约束处定义;如果表的主键由多个列组成,则也只能在表级完整性约束处定义,并将主键列用括号括起来,即:PRIMARYKEY(列1{[,列2]…});如果在表级完整性约束处定义外键,则“FOREIGNKEY(<外键列名>)”部分不能省。说明NOTNULL和DEFAULT只能是列级完整性约束;约束举例列取值非空约束

例:snamechar(10)NOTNULL表主键约束在定义列时定义主键(仅用于单列主键)例: SNOchar(7)PRIMARYKEY在定义完列时定义主键(用于单列或多列主键)例: PRIMARYKEY(SNO) PRIMARYKEY(SNO,CNO)外键引用约束例:FOREIGNKEY(sno)REFERENCES学生表(sno)约束举例列取值非空约束创建(student)学生表CREATETABLEStudent(Sno CHAR(7) PRIMARYKEY,Sname NCHAR(5) NOTNULL,Ssex NCHAR(1) ,Sage TINYINT ,Sdept NVARCHAR(20))列名含义数据类型约束Sno学号CHAR(7)主码Sname姓名NCHAR(5)非空Ssex性别NCHAR(1)Sage年龄TINYINTSdept所在系NVARCHAR(20)创建(student)学生表CREATETABLEStu创建Course(学生)表CREATETABLECourse(Cno CHAR(6) PRIMARYKEY,Cname NVARCHAR(20) NOTNULL,Ccredit TINYINT ,Semster TINYINT )列名含义数据类型约束Cno课程号CHAR(6)主键Cname课程名NVARCHAR(20)非空Ccredit学分TINYINTSemster学期TINYINT创建Course(学生)表CREATETABLECour创建SC(学生修课)表CREATETABLESC(Sno CHAR(7) NOTNULL,Cno CHAR(6) NOTNULL,Grade TINYINT,PRIMARY KEY(Sno,Cno),FOREIGN KEY(Sno)REFERENCESStudent(Sno),FOREIGN KEY(Cno)REFERENCESCourse(Cno))列名含义数据类型约束Sno学号CHAR(7)主键,引用Student的外键Cno课程号CHAR(6)主键,引用Course的外键Grade成绩TINYINT创建SC(学生修课)表CREATETABLESC(列名2、修改基本表在定义基本表之后,如果需求有变化,比如添加列、删除列或修改列定义,可以使用ALTERTABLE语句实现。ALTERTABLE语句可以对表添加列、删除列、修改列的定义,也可以添加和删除约束。语法 ALTERTABLE<表名> [ALTERCOLUMN<列名><新数据类型>]

|[ADD<列名><数据类型>[约束]

|[DROPCOLUMN<列名>]

|[ADD[constraint约束名]约束定义

|[DROP[constraint]<约束名>]2、修改基本表在定义基本表之后,如果需求有变化,比如添加列、示例例1.为SC表添加“修课类别”列,此列的列名为Type,数据类型为NCHAR(2),允许空。ALTERTABLESC ADDTypeNCHAR(2)NULL例2.将新添的Type列数据类型改为NCHAR(4)。ALTERTABLESC ALTERCOLUMNTypeNCHAR(4)例3.删除SC表的Type列。ALTERTABLESC DROPCOLUMNType示例例1.为SC表添加“修课类别”列,此列的列名为Type,3、删除基本表当确信不再需要某个表时,可以将其删除。删除表的语句格式为: DROPTABLE<表名>{[,<表名>]…}例:删除test表:DROPTABLEtest3、删除基本表当确信不再需要某个表时,可以将其删除。3.3.2数据完整性约束为了防止数据库中存在不符合语义的数据数据库中数据的语义约束条件就是数据完整性约束条件DBMS通过完整性检查的功能来检查数据库中的数据是否满足完整性约束条件1、完整性约束条件的作用对象2、实现数据完整性3.3.2数据完整性约束为了防止数据库中存在不符合语义的1、完整性约束条件的作用对象完整性检查是围绕完整性约束条件进行的,完整性约束条件是完整性控制机制的核心。完整性约束条件的作用对象可以是表、元组和列。列级约束元组约束关系约束1、完整性约束条件的作用对象完整性检查是围绕完整性约束条件进列级约束列级约束主要是对列的类型、取值范围、精度等的约束,具体包括:对数据类型的约束:包括数据类型、长度、精度等。对数据格式的约束:如规定学号的前两位表示学生的入学年份,第三位表示系的编号,第四位表示专业编号,第五位代表班的编号等等。对取值范围的约束:如学生的成绩取值范围为0~100。对空值的约束。列级约束列级约束主要是对列的类型、取值范围、精度等的约束,具元组约束元组的约束是元组中各个字段之间的联系的约束,如:开始日期小于结束日期某项工作的最低工资小于最高工资元组约束元组的约束是元组中各个字段之间的联系的约束,关系约束指若干元组之间、关系之间的联系的约束。如:学生表中学号的取值不能重复也不能取空值,学生修课表中的学号的取值受学生表中的学号取值的约束关系约束指若干元组之间、关系之间的联系的约束。2、实现数据完整性实现数据完整性一般在服务器端完成。在服务器端实现数据完整性的方法主要有两种。一种是在定义表时声明数据完整性,采用这种方法时可以在定义表的同时定义完整性约束,也可以在定义表之后添加这些约束。一种是在服务器端编写触发器来实现数据完整性。2、实现数据完整性实现数据完整性一般在服务器端完成。实现约束PRIMARYKEY约束 主键约束UNIQUE约束 唯一值约束FOREIGNKEY约束 参照完整性约束DEFAULT约束 默认值约束CHECK约束 列取值范围约束实现约束PRIMARYKEY约束 主键约束举例CREATETABLE工作表(工作编号 CHAR(6) NOTNULL,

最低工资 NUMERIC(7,2) ,最高工资 NUMERIC(7,2))工作表表结构列名数据类型约束工作编号CHAR(6)非空,主键最低工资NUMERIC(7,2)大于等于80最高工资NUMERIC(7,2)大于等于最低工资举例CREATETABLE工作表(工作表表结构列名数据举例CREATETABLE职工表(

职工编号

CHAR(7) NOTNULL,

姓名 NCHAR(5) NOTNULL,

工作编号 CHAR(6) ,

工资 NUMERIC(7,2),电话号码 CHAR(8))职工表表结构列名数据类型约束职工编号CHAR(7)非空,主键姓名NCHAR(5)非空工作编号CHAR(6)外键工资NUMERIC(7,2)默认值1000电话号码CHAR(8)取值不同,每位均为0~9举例CREATETABLE职工表(职工表表结构列名数主键约束 PRIMARYKEY约束保证实体完整性。每个表有且只有一个PRIMARYKEY约束。用PRIMARYKEY约束的列不能有重复,不能为空格式: ALTERTABLE表名 ADD[CONSTAINT约束名] PRIMARYKEY(列名[,…n])例1:ALTERTABLE职工表 ADDCONSTAINTPK_EMP PRIMARYKEY(职工编号)例2:ALTERTABLE工作表 ADDCONSTAINTPK_JOB PRIMARYKEY(工作编号)主键约束 PRIMARYKEY约束保证实体完整性。每个唯一键约束 UNIQUE约束确保在非主键列中不输入重复值。应用在客观具有唯一性质的列上,如身份证号、社会保险号等。注意事项:允许有一个空值。在一个表中可以定义多个UNIQUE约束。可以在一个列或多个列上定义UNIQUE约束。语法格式: ALTERTABLE表名 ADD[CONSTRAINT约束名] UNIQUE(<列名>[,…n])例1:为职工表的“电话号码”列添加UNIQUE约束。ALTERTABLE职工表 ADDCONSTRAINTUK_SID UNIQUE(电话号码)唯一键约束 UNIQUE约束确保在非主键列中不输入重复值。外键约束 FOREIGNKEY约束实现参照完整性。外键所引用的列必须是有PRIMARYKEY约束或UNIQUE约束的列。格式: ALTERTABLE表名

ADD[CONSTRAINT约束名] FOREIGNKEY(<列名>)

REFERENCES引用表名(<列名>)例.为职工表的工作编号添加外键引用约束,此列引用工作表的工作编号列ALTERTABLE职工表

ADDCONSTRAINTFK_job_idFOREIGNKEY(工作编号)

REFERENCES工作表(工作编号)外键约束 FOREIGNKEY约束实现参照完整性。外键所默认值约束 DEFAULT约束用于提供列的默认值,一个列只能有一个默认值约束,一个默认值约束只能用在一个列上。在向表中插入数据时系统检查DEFAULT约束。格式: ALTERTABLE表名

ADD[CONSTRAINT约束名] DEFAULT默认值FOR列名例.定义职工表的工资的默认值为1000。ALTERTABLE职工表

ADDCONSTRAINTDF_SALARYDEFAULT1000FOR工资默认值约束 DEFAULT约束用于提供列的默认值,列取值范围约束 CHECH约束用于将列的取值限制在指定的范围内,使数据库中存放的值都是有意义的。在执行INSERT和UPDATE语句时系统自动检查CHECK约束。可约束同一个表中多个列之间的取值关系。格式: ALTERTABLE表名ADD[CONSTRAINT约束名] CHECK(逻辑表达式)例1.添加限制最工作表中低工资必须大于等于800元的约束 ALTERTABLE工作表ADDCONSTRAINTCHK_Salary CHECK(最低工资>=800)例2.限制工作表的最高工资大于等于最低工资的约束。ALTERTABLE工作表ADDCONSTRAINTCHK_Job_Salary CHECK(最高工资>=最低工资)列取值范围约束 CHECH约束用于将列的取值限制在指定的列取值范围约束示例例1.添加限制最工作表中低工资必须大于等于800元的约束 ALTERTABLE工作表ADDCONSTRAINTCHK_Salary CHECK(最低工资>=800)例2.限制工作表的最高工资大于等于最低工资的约束。 ALTERTABLE工作表ADDCONSTRAINTCHK_Job_Salary CHECK(最高工资>=最低工资)例3.添加限制职工表的电话号码的每1位的取值均是0~9的数字的约束ALTERTABLE职工表

ADDCONSTRAINTCHK_Emp_Phone CHECK(电话号码LIKE'[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]')列取值范围约束示例例1.添加限制最工作表中

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论