佛山科学技术学院第3章关系数据库标准语言SQLSQL是StructuredQueryLanguage(结构化查询语言)的缩写。SQL包含数据定义、数据操纵和数据控制功能等部分。SQL已经成为关系数据库的标准数据语言,现在所有的关系数据库管理系统都支持SQL。佛山科学技术学院学习目标了解SQL的发展过程和主要功能;熟练掌握SQL的CREATETABLE语句和数据完整性约束的定义方法;熟练掌握SQL的数据操作语句,深刻理解数据完整性约束的作用;熟练掌握SQLSELECT语句,能够运用该语句完成关系数据库上的各种查询;理解关系数据库的视图概念,掌握视图的定义和使用方法。佛山科学技术学院重点难点重点:熟练掌握SQLCREATETABLE语句、SQLINSERT语句、SQLDELETE语句、SQLUPDATE语句和SQLSELECT语句。难点:CREATETABLE语句中有关数据完整性约束的定义,以及SQLSELECT中复杂的连接和嵌套查询。佛山科学技术学院3.1SQL语言概述SQL标准源于1986年10月的ANSI标准1987年6月正式成为ISO标准SQL89提出了完整性特征SQL92标准逐步完善(基本、标准和完全级)SQL99增加了面向对象等最新的标准是2003年发布的SQL2003,几千页SQL标准只是一个建议标准,主流产品一般也只达到了基本级的要求佛山科学技术学院SQL语言主要特点SQL是一种一体化的语言SQL语言是一种高度非过程化的语言SQL语言非常简洁SQL语言可以直接以命令方式交互使用,也可以嵌入到程序设计语言中以程序方式使用佛山科学技术学院样本数据库教师(Student)教师编号院系姓名性别职称专业课程(Student)课程编号课程名称责任教师学时课程性质选课(Student)学号课程编号考试成绩学生(Student)学号院系姓名性别生源状态院系(Student)编号名称负责人办公地点图3-1样本数据库数据定义功能与数据完整性约束的实现佛山科学技术学院SQL中的模式(Schema)组织数据库对象的一种逻辑结构把一个数据库中的所有对象按用途划分为若干集合默认模式是DBO佛山科学技术学院模式组织举例产品模式订购模式销售模式佛山科学技术学院定义模式模式通常由DBA创建也可以由得到CREATESCHEMA授权的用户创建使用短语AUTHORIZATIONowner_name可以指定模式的管理者(默认是创建者)CREATESCHEMAschema_name[AUTHORIZATIONowner_name]佛山科学技术学院删除模式只有在模式为空,即模式中不包含任何对象时才可以删除模式。DROPSCHEMAschema_name佛山科学技术学院表的定义一个表由若干列构成,SQLServer2005不仅可以定义实列(简称列,column_definition),而且还可以定义虚列(即计算列,computed_column_definition)理解:column_definitioncomputed_column_definitiontable_constraintCREATETABLE[schema_name].table_name({column_definition|computed_column_definition}[table_constraint][,...n])佛山科学技术学院定义列(column_definition)CREATETABLE[schema_name].table_name({column_definition|computed_column_definition}[table_constraint][,...n])column_namedata_type[NULL|NOTNULL][[CONSTRAINTconstraint_name]PRIMARYKEY|UNIQUE|[FOREIGNKEY]REFERENCES[schema_name.]referenced_table_name[(ref_column)][ONDELETE{NOACTION|CASCADE|SETNULL|SETDEFAULT}][ONUPDATE{NOACTION|CASCADE|SETNULL|SETDEFAULT}]|CHECK(logical_expression)][DEFAULTconstant_expression]佛山科学技术学院定义列(column_definition)列名(column_name)和数据类型(data_type)必须指定,在SQLServer2005中可以使用的数据类型如表3-1所示其他项目是各种约束column_namedata_type[NULL|NOTNULL][[CONSTRAINTconstraint_name]PRIMARYKEY|UNIQUE|[FOREIGNKEY]REFERENCES[schema_name.]referenced_table_name[(ref_column)][ONDELETE{NOACTION|CASCADE|SETNULL|SETDEFAULT}][ONUPDATE{NOACTION|CASCADE|SETNULL|SETDEFAULT}]|CHECK(logical_expression)][DEFAULTconstant_expression]佛山科学技术学院是否允许空值约束空值的概念?column_namedata_type[NULL|NOTNULL][[CONSTRAINTconstraint_name]PRIMARYKEY|UNIQUE|[FOREIGNKEY]REFERENCES[schema_name.]referenced_table_name[(ref_column)][ONDELETE{NOACTION|CASCADE|SETNULL|SETDEFAULT}][ONUPDATE{NOACTION|CASCADE|SETNULL|SETDEFAULT}]|CHECK(logical_expression)][DEFAULTconstant_expression]佛山科学技术学院关于约束名称列级约束名,名称可以省略用于命名主关键字、唯一性或参照完整性约束省略名称不便于管理相应的完整性约束column_namedata_type[NULL|NOTNULL][[CONSTRAINTconstraint_name]PRIMARYKEY|UNIQUE|[FOREIGNKEY]REFERENCES[schema_name.]referenced_table_name[(ref_column)][ONDELETE{NOACTION|CASCADE|SETNULL|SETDEFAULT}][ONUPDATE{NOACTION|CASCADE|SETNULL|SETDEFAULT}]|CHECK(logical_expression)][DEFAULTconstant_expression]佛山科学技术学院主关键字和唯一性约束PRIMARYKEY:主关键字约束,说明该列是主关键字UNIQUE:惟一性约束,说明该列取值必须惟一PRIMARYKEY和UNIQUE约束的区别?column_namedata_type[NULL|NOTNULL][[CONSTRAINTconstraint_name]PRIMARYKEY|UNIQUE|[FOREIGNKEY]REFERENCES[schema_name.]referenced_table_name[(ref_column)][ONDELETE{NOACTION|CASCADE|SETNULL|SETDEFAULT}][ONUPDATE{NOACTION|CASCADE|SETNULL|SETDEFAULT}]|CHECK(logical_expression)][DEFAULTconstant_expression]佛山科学技术学院参照完整性约束说明外部关键字,FOREIGNKEY可以省略什么是外部关键字?外部关键字的作用?[schema_name.]referenced_table_name[(ref_column)]指出参照的表和列,默认模式时schema_name可以省略,列名相同时(ref_column)可以省略column_namedata_type[NULL|NOTNULL][[CONSTRAINTconstraint_name]PRIMARYKEY|UNIQUE|[FOREIGNKEY]REFERENCES[schema_name.]referenced_table_name[(ref_column)][ONDELETE{NOACTION|CASCADE|SETNULL|SETDEFAULT}][ONUPDATE{NOACTION|CASCADE|SETNULL|SETDEFAULT}]|CHECK(logical_expression)][DEFAULTconstant_expression]佛山科学技术学院参照完整性规则ONDELETE和ONUPDATE说明在执行删除和更新操作时如何处理参照完整性删除操作检查的完整性?更新操作检查的完整性?column_namedata_type[NULL|NOTNULL][[CONSTRAINTconstraint_name]PRIMARYKEY|UNIQUE|[FOREIGNKEY]REFERENCES[schema_name.]referenced_table_name[(ref_column)][ONDELETE{NOACTION|CASCADE|SETNULL|SETDEFAULT}][ONUPDATE{NOACTION|CASCADE|SETNULL|SETDEFAULT}]|CHECK(logical_expression)][DEFAULTconstant_expression]佛山科学技术学院CHECK约束用来说明列的取值范围本约束用逻辑表达式(logical_expression)进行说明如果列值使表达式为真则是合法值,否则就是非法值column_namedata_type[NULL|NOTNULL][[CONSTRAINTconstraint_name]PRIMARYKEY|UNIQUE|[FOREIGNKEY]REFERENCES[schema_name.]referenced_table_name[(ref_column)][ONDELETE{NOACTION|CASCADE|SETNULL|SETDEFAULT}][ONUPDATE{NOACTION|CASCADE|SETNULL|SETDEFAULT}]|CHECK(logical_expression)][DEFAULTconstant_expression]佛山科学技术学院字段默认值用常量表达式(constant_expression)来说明列的默认取值column_namedata_type[NULL|NOTNULL][[CONSTRAINTconstraint_name]PRIMARYKEY|UNIQUE|[FOREIGNKEY]REFERENCES[schema_name.]referenced_table_name[(ref_column)][ONDELETE{NOACTION|CASCADE|SETNULL|SETDEFAULT}][ONUPDATE{NOACTION|CASCADE|SETNULL|SETDEFAULT}]|CHECK(logical_expression)][DEFAULTconstant_expression]佛山科学技术学院定义计算列c