《关系数据库标准语言SQL(上).ppt》由会员分享,可在线阅读,更多相关《关系数据库标准语言SQL(上).ppt(112页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第3章 关系数据库标准语言SQL oSQL是Structured Query Language(结构化查询语言)的缩写。可以说查询是SQL语言的重要组成部分,但不是全部,SQL还包含数据定义、数据操纵和数据控制功能等部分。SQL已经成为关系数据库的标准数据语言,所以现在所有的关系数据库管理系统都支持SQL。学习目标 o了解SQL的发展过程和主要功能;o熟练掌握SQL的CREATE TABLE语句和数据完整性约束的定义方法;o熟练掌握SQL的数据操作语句,深刻理解数据完整性约束的作用;o熟练掌握SQL SELECT语句,能够运用该语句完成关系数据库上的各种查询;o理解关系数据库的视图概念,掌握视
2、图的定义和使用方法。重点难点 oSQL语言本身就是学习数据库的重点,所以要求学生要熟练掌握,具体就是要熟练掌握SQL CREATE TABLE语句、SQL INSERT语句、SQL DELETE语句、SQL UPDATE语句和SQL SELECT语句。o本章学习的难点是CREATE TABLE语句中有关数据完整性约束的定义,以及SQL SELECT中复杂的连接和嵌套查询。3.1 SQL语言概述 oSQL标准源于1986年10月的ANSI标准o1987年6月正式成为ISO标准oSQL89提出了完整性特征oSQL92标准逐步完善(基本、标准和完全级)oSQL99增加了面向对象等o最新的标准是200
3、3年发布的SQL2003oSQL标准只是一个建议标准,主流产品一般也只达到了基本级的要求SQL语言的主要特点 oSQL是一种一体化的语言 oSQL语言是一种高度非过程化的语言 oSQL语言非常简洁 oSQL语言可以直接以命令方式交互使用,也可以嵌入到程序设计语言中以程序方式使用 样本数据库 图3-1样本数据库数据定义功能与数据完整性约束的实现SQL的定义功能包括模式、表、视图、存储过程、触发器、规则、默认值等的定义。SQL中的模式(Schema)o组织数据库对象的一种逻辑结构o把一个数据库中的所有对象按用途划分为若干集合模式组织举例z产品模式z订购模式z销售模式定义模式 o模式通常由DBA创建
4、o也可以由得到CREATE SCHEMA授权的用户创建o使用短语AUTHORIZATION owner_name可以指定模式的管理者(默认是创建者)CREATESCHEMAschema_nameAUTHORIZATIONowner_name删除模式o只有在模式为空、即模式中不包含任何对象时才可以删除模式。DROPSCHEMAschema_name表的定义 o一个表由若干列构成,自SQL Server 2005不仅可以定义实列(简称列,column_definition),而且还可以定义虚列(即计算列,computed_column_definition)o理解:nnnCREATETABLEsc
5、hema_name.table_name(|,.n)定义列()CREATETABLEschema_name.table_name(|,.n)column_nameNULL|NOTNULLCONSTRAINTconstraint_namePRIMARYKEY|UNIQUE|FOREIGNKEYREFERENCESschema_name.referenced_table_name(ref_column)ONDELETENOACTION|CASCADE|SETNULL|SETDEFAULTONUPDATENOACTION|CASCADE|SETNULL|SETDEFAULT|CHECK(logica
6、l_expression)DEFAULTconstant_expression定义列()o列名(column_name)和数据类型()必须指定,在SQL Server 2005中可以使用的数据类型如表3-1所示o其他项目是各种约束 column_nameNULL|NOTNULLCONSTRAINTconstraint_namePRIMARYKEY|UNIQUE|FOREIGNKEYREFERENCESschema_name.referenced_table_name(ref_column)ONDELETENOACTION|CASCADE|SETNULL|SETDEFAULTONUPDATENO
7、ACTION|CASCADE|SETNULL|SETDEFAULT|CHECK(logical_expression)DEFAULTconstant_expression是否允许空值约束o空值的概念?column_nameNULL|NOTNULLCONSTRAINTconstraint_namePRIMARYKEY|UNIQUE|FOREIGNKEYREFERENCESschema_name.referenced_table_name(ref_column)ONDELETENOACTION|CASCADE|SETNULL|SETDEFAULTONUPDATENOACTION|CASCADE|S
8、ETNULL|SETDEFAULT|CHECK(logical_expression)DEFAULTconstant_expression关于约束名称o列级约束名,名称可以省略o用于命名主关键字、唯一性或参照完整性约束o省略名称不便于管理相应的完整性约束column_nameNULL|NOTNULLCONSTRAINTconstraint_namePRIMARYKEY|UNIQUE|FOREIGNKEYREFERENCESschema_name.referenced_table_name(ref_column)ONDELETENOACTION|CASCADE|SETNULL|SETDEFAUL
9、TONUPDATENOACTION|CASCADE|SETNULL|SETDEFAULT|CHECK(logical_expression)DEFAULTconstant_expression主关键字和唯一性约束oPRIMARY KEY:主关键字约束,说明该列是主关键字 oUNIQUE:惟一性约束,说明该列取值必须惟一 oPRIMARY KEY和UNIQUE约束的区别?column_nameNULL|NOTNULLCONSTRAINTconstraint_namePRIMARYKEY|UNIQUE|FOREIGNKEYREFERENCESschema_name.referenced_table
10、_name(ref_column)ONDELETENOACTION|CASCADE|SETNULL|SETDEFAULTONUPDATENOACTION|CASCADE|SETNULL|SETDEFAULT|CHECK(logical_expression)DEFAULTconstant_expression参照完整性约束o说明外部关键字,FOREIGNKEY可以省略o什么是外部关键字?外部关键字的作用?oschema_name.referenced_table_name(ref_column)指出参照的表和列,默认模式时schema_name可以省略,列名相同时(ref_column)可以省
11、略column_nameNULL|NOTNULLCONSTRAINTconstraint_namePRIMARYKEY|UNIQUE|FOREIGNKEYREFERENCESschema_name.referenced_table_name(ref_column)ONDELETENOACTION|CASCADE|SETNULL|SETDEFAULTONUPDATENOACTION|CASCADE|SETNULL|SETDEFAULT|CHECK(logical_expression)DEFAULTconstant_expression参照完整性规则oONDELETE和ONUPDATE说明在执行
12、删除和更新操作时如何处理参照完整性o删除操作检查的完整性?o更新操作检查的完整性?column_nameNULL|NOTNULLCONSTRAINTconstraint_namePRIMARYKEY|UNIQUE|FOREIGNKEYREFERENCESschema_name.referenced_table_name(ref_column)ONDELETENOACTION|CASCADE|SETNULL|SETDEFAULTONUPDATENOACTION|CASCADE|SETNULL|SETDEFAULT|CHECK(logical_expression)DEFAULTconstant_
13、expressionCHECK约束o用来说明列的取值范围o本约束用逻辑表达式 (logical_expression)进行说明o如果列值使表达式为真则是合法值,否则就是非法值 column_nameNULL|NOTNULLCONSTRAINTconstraint_namePRIMARYKEY|UNIQUE|FOREIGNKEYREFERENCESschema_name.referenced_table_name(ref_column)ONDELETENOACTION|CASCADE|SETNULL|SETDEFAULTONUPDATENOACTION|CASCADE|SETNULL|SETDE
14、FAULT|CHECK(logical_expression)DEFAULTconstant_expression字段默认值o用常量表达式(constant_expression)来说明列的默认取值 column_nameNULL|NOTNULLCONSTRAINTconstraint_namePRIMARYKEY|UNIQUE|FOREIGNKEYREFERENCESschema_name.referenced_table_name(ref_column)ONDELETENOACTION|CASCADE|SETNULL|SETDEFAULTONUPDATENOACTION|CASCADE|S
15、ETNULL|SETDEFAULT|CHECK(logical_expression)DEFAULTconstant_expression定义计算列 column_nameAScomputed_column_expressionPERSISTEDNOTNULLCONSTRAINTconstraint_namePRIMARYKEY|UNIQUE|FOREIGNKEYREFERENCESreferenced_table_name(ref_column)ONDELETENOACTION|CASCADEONUPDATENOACTION|CHECK(logical_expression)CREATETA
16、BLEschema_name.table_name(|,.n)定义计算列o其中column_name给出计算列的列名,computed_column_expression是对应的计算表达式,PERSISTED说明物理存储计算列的值。o其他选项和定义实列时类似。column_nameAScomputed_column_expressionPERSISTEDNOTNULLCONSTRAINTconstraint_namePRIMARYKEY|UNIQUE|FOREIGNKEYREFERENCESreferenced_table_name(ref_column)ONDELETENOACTION|CA
17、SCADEONUPDATENOACTION|CHECK(logical_expression)定义表级完整性约束o如果某个完整性约束与多个列相关,则这样的完整性约束不能定义在单个列上,这时候就需要表级完整性约束。o单个列上的完整性约束也可以用表级完整性约束的形式来定义。定义表级完整性约束CONSTRAINTconstraint_namePRIMARYKEY|UNIQUE|FOREIGNKEY(column,.n)REFERENCESreferenced_table_name(ref_column,.n)ONDELETENOACTION|CASCADE|SETNULL|SETDEFAULTONU
18、PDATENOACTION|CASCADE|SETNULL|SETDEFAULT|CHECK(logical_expression)CREATETABLEschema_name.table_name(|,.n)表定义举例o例1:定义院系表,其中编号为主关键字,名称应该惟一、并且不允许为空值。create table student.院系(编号tinyint primary key,名称char(30)unique not null,负责人char(10),办公地点char(40)表定义举例o例2:定义学生表,其中规定:n学号列是主关键字;n院系列为计算列(取学号列的第3和第4个字符),并且院系
19、值参照院系表的编号值(院系表是被参照表,主关键字是编号;参照表是学生表,外部关键字是院系),此约束说明一名学生一定属于某个院系;n姓名列不允许为空值;n性别必须取值“男”或“女”;n学生的学籍状态为正常、留级、休学或退学。create table student.学生(学号char(8)primary key,院系as convert(tinyint,substring(学号,3,2)persisted not null foreign key references student.院系(编号),姓名char(10)not null,性别char(2)check(性别=男 or 性别=女),生
20、源char(6),状态char(4)check(状态in(正常,留级,休学,退学)表定义举例o例3:定义教师表,其中规定:n教师编号是主关键字;n院系列为计算列(取教师编号的第1和第2个字符),并且院系值参照院系表的编号值,此约束说明一名教师一定属于某个院系;n姓名列不允许为空值;n性别必须取值“男”或“女”;n职称的取值为教授、副教授、讲师或助教。create table student.教师(教师编号char(6)primary key,院系as convert(tinyint,substring(教师编号,1,2)persisted not null foreign key refere
21、nces student.院系(编号),姓名char(10)not null,性别char(2)check(性别=男 or 性别=女),职称char(6)check(职称in(教授,副教授,讲师,助教),专业char(16)表定义举例o例4:定义课程表,其中规定:n课程编号是主关键字;n课程名称不允许为空值;n责任教师参照教师表的教师编号值,此约束说明责任教师一定是已经在编的教师;n学时不允许为空值;n课程性质分为公共基础、专业基础、专业选修和任意选修。create table student.课程(课程编号char(6)primary key,课程名称char(24)not null,责任教
22、师char(6)constraint duty_teacher foreign key references student.教师(教师编号),学时tinyint not null,课程性质char(8)check(课程性质in(公共基础,专业基础,专业选修,任意选修)表定义举例o例5:定义选课表,其中规定:n学号和课程编号两列构成主关键字(需要表级完整性约束);n学号参照学生表的学号(约束选课的学生必须存在);n课程编号参照课程表的课程编号(约束被选的课程必须存在);n考试成绩取值在0100之间,并且默认为空值。create table student.选课(学号char(8)foreign
23、 key references student.学生,课程编号char(6)foreign key references student.课程,考试成绩tinyint check(考试成绩between 0 and 100)default null primary key(学号,课程编号)修改表结构 ALTERTABLEschema_name.table_nameALTERCOLUMNcolumn_nameNULL|NOTNULL|ADD|DROPCONSTRAINTconstraint_name|COLUMNcolumn_nameALTER COLUMN修改已有列的定义,但是只能修改为兼容数
24、据类型或重新定义是否允许空值;修改表结构oADD添加新列、或新的计算列或表级完整性约束;ALTERTABLEschema_name.table_nameALTERCOLUMNcolumn_nameNULL|NOTNULL|ADD|DROPCONSTRAINTconstraint_name|COLUMNcolumn_name修改表结构oDROP删除指定的完整性约束或指定的列。ALTERTABLEschema_name.table_nameALTERCOLUMNcolumn_nameNULL|NOTNULL|ADD|DROPCONSTRAINTconstraint_name|COLUMNcolum
25、n_name修改表结构举例o例6:规定学生表的性别字段不允许为空值。ALTERTABLE学生ALTERCOLUMN性别char(2)NOTNULLo是否会影响原先定义在该列上的其他约束?修改表结构举例o例7:删除课程表中的责任教师列。oalter table student.课程drop column 责任教师o如果捆绑了其他对象(如列约束),则需要先删除捆绑的对象。oalter table student.课程drop duty_teacher修改表结构举例o例8:为课程表增加责任教师列,列描述如下:n字符类型,长度为6;n允许空值;n外部关键字,参照教师表的教师编号列,当删除被参照记录时该
26、列置为空值,当修改被参照记录的主关键字时级联修改参照记录的外部关键字值。alter table student.课程add 责任教师char(6)nullconstraint ref_teacher foreign key references student.教师(教师编号)on delete set nullon update cascade删除表 DROPTABLEschema_name.table_name,.n一次可以删除多个表。不能使用DROPTABLE删除被FOREIGNKEY约束参照的表。如果要在同一个DROPTABLE语句中删除参照表以及被参照表,则必须先列出参照表。思考题
27、o在SQL中CREATESCHEMA是一条什么命令?创建的SCHEMA是一种什么对象?它有什么作用?o在表中定义约束时,PRIMARYKEY和UNIQUE有什么区别?o在CREATETABLE命令中哪些内容与定义参照完整性有关?讨论它们的具体作用。o约束一般定义在列上,为什么还需要表级约束?o定义计算列时选用关键词PERSISTED有什么作用?o计算列是否可以作为参照列(外部关键字)?o如果在定义约束时没有使用CONSTRAINT短语给出约束名,而事后又要删除该约束应该怎么办?o对已有的表可以进行哪些方面的表结构修改?数据操作功能 及数据完整性的作用 SQL的数据操作o插入操作及其完整性约束o
28、删除操作及其完整性约束o更新操作及其完整性约束插入操作及其完整性约束oSQL的插入语句是INSERT,常用格式:INSERTINTOschema_name.table_name(column_list)VALUES(expression|DEFAULT|NULL,.n)o其中nschema_name指出模式名ntable_name指出表名ncolumn_list给出插入操作所涉及列的列表(默认是表的全部列)nexpression|DEFAULT|NULL,.n给出对应于column_list的各个列的值例9插入院系表的第1个元组(记录)INSERTINTOstudent.院系(编号,名称,负责
29、人,办公地点)VALUES(1,信息管理学院,李嘉,教一楼3层)CREATE TABLE student.院系(编号 tinyint PRIMARY KEY,名称 char(30)UNIQUE NOT NULL,负责人 char(10),办公地点 char(40)例10 省略列名、插入院系表的第2个元组INSERT INTO student.院系VALUES(2,经济管理学院,吴鸿忠,教三楼4层)CREATE TABLE student.院系(编号 tinyint PRIMARY KEY,名称 char(30)UNIQUE NOT NULL,负责人 char(10),办公地点 char(40)
30、例11INSERT INTO student.院系VALUES(2,计算机学院,张秋霞,教二楼3层)CREATE TABLE student.院系(编号 tinyint PRIMARY KEY,名称 char(30)UNIQUE NOT NULL,负责人 char(10),办公地点 char(40)违背PRIMARYKEY约束例12INSERT INTO student.院系VALUES(3,经济管理学院,张秋霞,教二楼3层)CREATE TABLE student.院系(编号 tinyint PRIMARY KEY,名称 char(30)UNIQUE NOT NULL,负责人 char(10
31、),办公地点 char(40)违背UNIQUE约束例13INSERT INTO student.院系(编号,负责人,办公地点)VALUES(3,张秋霞,教二楼3层)CREATE TABLE student.院系(编号 tinyint PRIMARY KEY,名称 char(30)UNIQUE NOT NULL,负责人 char(10),办公地点 char(40)违背NOTNULL约束例14CREATETABLEstudent.学生(学号char(8)PRIMARYKEY,院系ASCONVERT(Tinyint,SUBSTRING(学号,3,2)PERSISTEDNOTNULLFOREIGNKE
32、YREFERENCESstudent.院系(编号),姓名char(10)NOTNULL,性别char(2)CHECK(性别=男OR性别=女),生源char(6),状态char(4)CHECK(状态IN(正常,留级,休学,退学)插入学生表的第1个元组。INSERTINTOstudent.学生(学号,姓名,性别,生源,状态)VALUES(04014101,曹波,男,湖北,正常)例15 插入学生表的第2条记录(指定正确的院系值)注意:学生表的院系列是计算列,是不能被插入语句操作的。CREATETABLEstudent.学生(学号char(8)PRIMARYKEY,院系ASCONVERT(Tinyin
33、t,SUBSTRING(学号,3,2)PERSISTEDNOTNULLFOREIGNKEYREFERENCESstudent.院系(编号),姓名char(10)NOTNULL,性别char(2)CHECK(性别=男OR性别=女),生源char(6),状态char(4)CHECK(状态IN(正常,留级,休学,退学)INSERTINTOstudent.学生(学号,院系,姓名,性别,生源,状态)VALUES(04014111,1,程鸣,女,湖南,正常)INSERTINTOstudent.学生VALUES(04014111,程鸣,女,湖南,正常)正确语句:正确语句:例17INSERT INTO stu
34、dent.学生 VALUES(04074122,吴红霞,女,浙江,正常)CREATETABLEstudent.学生(学号char(8)PRIMARYKEY,院系ASCONVERT(Tinyint,SUBSTRING(学号,3,2)PERSISTEDNOTNULLFOREIGNKEYREFERENCESstudent.院系(编号),姓名char(10)NOTNULL,性别char(2)CHECK(性别=男OR性别=女),生源char(6),状态char(4)CHECK(状态IN(正常,留级,休学,退学)违背参照完整性约束例18INSERT INTO student.学生 VALUES(04026
35、205,张鸿飞,南,北京,正常)CREATETABLEstudent.学生(学号char(8)PRIMARYKEY,院系ASCONVERT(Tinyint,SUBSTRING(学号,3,2)PERSISTEDNOTNULLFOREIGNKEYREFERENCESstudent.院系(编号),姓名char(10)NOTNULL,性别char(2)CHECK(性别=男OR性别=女),生源char(6),状态char(4)CHECK(状态IN(正常,留级,休学,退学)违背域完整性约束CREATE TABLE student.教师(教师编号 char(6)PRIMARY KEY,院系 AS CONVE
36、RT(Tinyint,SUBSTRING(教师编号,1,2)PERSISTED NOT NULL FOREIGN KEY REFERENCES student.院系(编号),姓名 char(10)NOT NULL,性别 char(2)CHECK(性别=男 OR 性别=女),职称 char(6)CHECK(职称IN(教授,副教授,讲师,助教),专业 char(16)插入教师表记录,注意教师编号的PRIMARY KEY约束,院系是计算列及其REFRENCES约束等。CREATE TABLE student.课程(课程编号 char(6)PRIMARY KEY,课程名称 char(24)NOT NU
37、LL,责任教师 char(6)CONSTRAINT duty_teacher FOREIGN KEY REFERENCES student.教师(教师编号),学时 tinyint NOT NULL,课程性质 char(8)CHECK(课程性质IN(公共基础,专业基础,专业选修,任意选修)插入课程表记录,注意相关约束。插入课程表记录,注意相关约束。例20CREATE TABLE student.选课(学号 char(8)FOREIGN KEY REFERENCES student.学生,课程编号 char(6)FOREIGN KEY REFERENCES student.课程,考试成绩 tiny
38、int CHECK(考试成绩 BETWEEN 0 AND 100)DEFAULT NULL PRIMARY KEY(学号,课程编号)INSERTINTOstudent.选课(学号,课程编号,考试成绩)VALUES(04014122,B00016,88)例21CREATE TABLE student.选课(学号 char(8)FOREIGN KEY REFERENCES student.学生,课程编号 char(6)FOREIGN KEY REFERENCES student.课程,考试成绩 tinyint CHECK(考试成绩 BETWEEN 0 AND 100)DEFAULT NULL PR
39、IMARY KEY(学号,课程编号)INSERTINTOstudent.选课VALUES(04014111,X00201,NULL)例22CREATE TABLE student.选课(学号 char(8)FOREIGN KEY REFERENCES student.学生,课程编号 char(6)FOREIGN KEY REFERENCES student.课程,考试成绩 tinyint CHECK(考试成绩 BETWEEN 0 AND 100)DEFAULT NULL PRIMARY KEY(学号,课程编号)INSERTINTOstudent.选课VALUES(04014111,B00016
40、,DEFAULT)例23CREATE TABLE student.选课(学号 char(8)FOREIGN KEY REFERENCES student.学生,课程编号 char(6)FOREIGN KEY REFERENCES student.课程,考试成绩 tinyint CHECK(考试成绩 BETWEEN 0 AND 100)DEFAULT NULL PRIMARY KEY(学号,课程编号)INSERTINTOstudent.选课(学号,课程编号)VALUES(04014101,B00018)例24违反参照完整性的输入CREATE TABLE student.选课(学号 char(8)
41、FOREIGN KEY REFERENCES student.学生,课程编号 char(6)FOREIGN KEY REFERENCES student.课程,考试成绩 tinyint CHECK(考试成绩 BETWEEN 0 AND 100)DEFAULT NULL PRIMARY KEY(学号,课程编号)INSERTINTOstudent.选课VALUES(04016116,B00017,52)插入操作时检查完整性?o检查实体完整性规则o检查参照完整性规则o检查用户定义完整性规则 检查实体完整性规则o如果插入元组的主关键字的属性不为空值、并且相应的属性值在关系中不存在(即保持唯一性),则可
42、以执行插入操作,否则不可以执行插入操作。检查参照完整性规则o如果是向被参照关系插入元组,则无须检查参照完整性;如果是向参照关系插入元组,则要检查外部关键字属性上的值是否在被参照关系中存在对应的主关键字的值,如果存在则可以执行插入操作,否则不允许执行插入操作。另外,如果插入元组的外部关键字允许为空值,则当外部关键字是空值时也允许执行插入操作。检查用户定义完整性规则o如果插入的元组在相应的属性值上遵守了用户定义完整性规则(包括CHECK约束、UNIQUE约束、NULL或NOTNULL约束),则可以执行插入操作,否则不可以执行插入操作。删除操作及其完整性约束oSQL的删除语句是DELETE,常用格式
43、:DELETE FROM schema_name.table_nameWHERE o其中:nschema_name指出模式名;ntable_name指出从哪个表删除记录;n用来指出删除记录的条件,默认是删除全部记录。例25DELETE student.学生WHERE 姓名=吴红霞 删除操作失败,违背参照完整性删除操作失败,违背参照完整性 CREATE TABLE student.选课(学号 char(8)FOREIGN KEY REFERENCES student.学生,课程编号 char(6)FOREIGN KEY REFERENCES student.课程,考试成绩 tinyint CHE
44、CK(考试成绩 BETWEEN 0 AND 100)DEFAULT NULL PRIMARY KEY(学号,课程编号)例26DELETE student.教师 WHERE 教师编号=011122ALTERTABLEstudent.课程ADD责任教师char(6)NULLCONSTRAINTref_teacherFOREIGNKEYREFERENCESstudent.教师(教师编号)ONDELETESETNULLONUPDATECASCADE删除成功。如果有课程记录的责任教师参照被删除记录,则将该课程记录的责任教师字段置为NULL。举例27DELETE student.选课 WHERE 课程编号
45、=B00018 AND 考试成绩 IS NULL删除成功,选课表不是被参照表。NULL是概念不是值,所以不能用比较运算符。删除操作只需要检查参照完整性 o如果删除的是参照关系的元组,则不需要进行参照完整性检查,可以执行删除操作。o如果删除的是被参照关系的元组,则检查被删除元组的主关键字属性的值是否被参照关系中某个元组的外部关键字引用,如果未被引用则可以执行删除操作;否则可能有4种情况:n拒绝删除、空值删除、级联删除、默认值删除REFERENCESreferenced_table_name(ref_column,.n)ONDELETENOACTION|CASCADE|SETNULL|SETDEF
46、AULT更新操作及其完整性约束oSQL更新记录的语句是UPDATE,常用格式:UPDATEschema_name.table_nameSETcolumn_name=expression|DEFAULT|NULL,.nWHEREo其中:nschema_name指定模式名;ntable_name给出要更新数据的表;nSET短语说明要更新的列及其值;n参数“,.n”说明一次可以更新多列。nWHERE指定更新哪些记录,即用逻辑表达式指定更新条件。举例28,29UPDATE student.教师SET 教师编号=040101 WHERE 姓名=刘昌勇 图3-1样本数据库 与哪个完整性约束有关?UPDAT
47、E student.教师SET 教师编号=020101 WHERE 姓名=刘昌勇 o例30 将04014122号学生的B00101课程的考试成绩修改为78分举例30UPDATE student.选课 SET 考试成绩=78 WHERE 学号=04014122 AND 课程编号=B00101执行更新操作时检查完整性 o执行更新操作可以看作是先删除旧的元组,然后再插入新的元组。所以执行更新操作时的完整性检查综合了插入和删除操作的数据完整性检查。思考题 o执行插入操作时会进行哪些数据完整性检查?如果违背某项数据完整性约束结果会怎样?o在INSERT语句中可以使用关键词DEFAULT插入默认值,如果在定义表时没有定义相应的默认值结果会怎样?o表达式“考试成绩=NULL”是否正确?为什么?o当插入的表有计算列时要注意什么?o执行删除操作时会进行哪些数据完整性检查?思考题o当删除被参照表的记录时会进行参照完整性检查,如果发现有参照表的记录参照被删除的记录时有哪些处理方法?具体如何实施?o修改教师表的语句UPDATE student.教师 SET 院系=2 WHERE 姓名=张建平 能正确执行吗?为什么?o执行更新操作时会进行哪些数据完整性检查?为什么?
限制150内