资源预览内容
第1页 / 共49页
第2页 / 共49页
第3页 / 共49页
第4页 / 共49页
第5页 / 共49页
第6页 / 共49页
第7页 / 共49页
第8页 / 共49页
第9页 / 共49页
第10页 / 共49页
亲,该文档总共49页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
数据库表中记录更新及数据索引,主讲老师:xxx Email: zhxxxxan126.comTEL: 15xxxxxxxxx6QQ: 30xxxxx1,数 据 更 新,插入数据 修改数据 删除数据,1. 插入数据,两种插入数据方式插入单个元组插入子查询结果,1. 插入单个元组,语句格式 INSERT INTO (,) VALUES ( , ) 功能将新元组插入指定表中。,插入单个元组(续),例1 将一个新学生记录 (学号:95020;姓名:陈冬;性别:男;所在系:IS;年龄:18岁)插入到Student表中。INSERTINTO StudentVALUES (95020,陈冬,男,IS,18);,插入单个元组(续),例2 插入一条选课记录( 95020,1 )。INSERTINTO SC(Sno,Cno)VALUES ( 95020 , 1 );新插入的记录在Grade列上取空值,插入单个元组(续),INTO子句 指定要插入数据的表名及属性列 属性列的顺序可与表定义中的顺序不一致 没有指定属性列:表示要插入的是一条完整的元组,且属性列属性与表定义中的顺序一致 指定部分属性列:插入的元组在其余属性列上取空值VALUES子句提供的值必须与INTO子句匹配 值的个数 值的类型,2. 插入子查询结果,语句格式INSERT INTO ( , )子查询; 功能将子查询结果插入指定表中,插入子查询结果(续),例3 对每一个系,求学生的平均年龄,并把结果存入数据库。第一步:建表CREATE TABLE Deptage(Sdept CHAR(15), /* 系名*/Avgage SMALLINT); /*学生平均年龄*/,插入子查询结果(续),第二步:插入数据INSERTINTO Deptage(Sdept,Avgage)SELECT Sdept,AVG(Sage)FROM StudentGROUP BY Sdept;,插入子查询结果(续),INTO子句(与插入单条元组类似) 指定要插入数据的表名及属性列 属性列的顺序可与表定义中的顺序不一致 没有指定属性列:表示要插入的是一条完整的元组 指定部分属性列:插入的元组在其余属性列上取空值子查询 SELECT子句目标列必须与INTO子句匹配 值的个数 值的类型,与select 输出列表 into 新表名的区别,插入子查询结果(续),DBMS在执行插入语句时会检查所插元组是 否破坏表上已定义的完整性规则 实体完整性 参照完整性 用户定义的完整性 对于有NOT NULL约束的属性列是否提供了非空值对于有UNIQUE约束的属性列是否提供了非重复值对于有值域约束的属性列所提供的属性值是否在值域范围内,3.4 数 据 更 新,3.4.1 插入数据 3.4.2 修改数据 3.4.3 删除数据,3.4.2 修改数据,语句格式UPDATE SET =,=WHERE ;功能 修改指定表中满足WHERE子句条件的元组,修改数据(续),三种修改方式 修改某一个元组的值 修改多个元组的值 带子查询的修改语句,1. 修改某一个元组的值,例4 将学生95001的年龄改为22岁。UPDATE StudentSET Sage=22WHERE Sno= 95001 ;,2. 修改多个元组的值,例5 将所有学生的年龄增加1岁。UPDATE StudentSET Sage= Sage+1;,修改多个元组的值(续),例6 将信息系所有学生的年龄增加1岁。UPDATE StudentSET Sage= Sage+1WHERE Sdept= IS ;,3. 带子查询的修改语句,例7 将计算机科学系全体学生的成绩置零。UPDATE SCSET Grade=0WHERE CS=(SELETE SdeptFROM StudentWHERE Student.Sno = SC.Sno);,修改数据(续),SET子句指定修改方式要修改的列修改后取值 WHERE子句 指定要修改的元组 缺省表示要修改表中的所有元组,修改数据(续),DBMS在执行修改语句时会检查修改操作 是否破坏表上已定义的完整性规则 实体完整性 主码不允许修改 用户定义的完整性NOT NULL约束UNIQUE约束值域约束,3.4 数 据 更 新,3.4.1 插入数据 3.4.2 修改数据 3.4.3 删除数据,3.4.3 删除数据,DELETEFROM WHERE ; 功能 删除指定表中满足WHERE子句条件的元组 WHERE子句 指定要删除的元组 缺省表示要修改表中的所有元组,删除数据(续),三种删除方式 删除某一个元组的值 删除多个元组的值 带子查询的删除语句,1. 删除某一个元组的值,例8 删除学号为95019的学生记录。DELETEFROM StudentWHERE Sno=95019;,2. 删除多个元组的值,例9 删除2号课程的所有选课记录。DELETEFROM SC;WHERE Cno=2;例10 删除所有的学生选课记录。DELETEFROM SC;,3. 带子查询的删除语句,例11 删除计算机科学系所有学生的选课记录。DELETEFROM SCWHERE CS=(SELETE SdeptFROM StudentWHERE Student.Sno=SC.Sno);,删除数据(续),DBMS在执行插入语句时会检查所插元组 是否破坏表上已定义的完整性规则 参照完整性 不允许删除 级联删除,更新数据与数据一致性,DBMS在执行插入、删除、更新语句时必 须保证数据库一致性 必须有事务的概念和原子性 完整性检查和保证,10.4 建立索引 (p246),索引概述 索引的类型 建立索引 设计索引 删除索引,概述,索引的概念 数据库中的索引是一个列表,在这个列表中包含了某个表中一列或者若干列值的集合,以及这些值的记录在数据表中的存储位置的物理地址。,概述,概述,索引的优点 可以大大加快数据检索速度。 通过创建唯一索引,可以保证数据记录的唯一性。 在使用ORDER BY和GROUP BY子句进行检索数据时,可以显著减少查询中分组和排序的时间。 可以加速表与表之间的连接,这一点在实现数据的参照完整性方面有特别的意义。,概述,索引的缺点 索引占用磁盘空间 降低了数据修改(插入、更新、删除)速度。,索引类型,索引的分类 1聚集索引和非聚集索引 2惟一索引和非惟一索引 3全文本索引,索引类型,1、聚集索引 聚集索引是一种指明数据物理存储顺序的索引。 行的物理存储顺序与索引顺序完全相同,即索引的顺序决定了表中行的存储顺序。 聚集索引适合于范围搜索。 每张表只能有一个聚集索引。 主键是聚集索引的良好的候选者。,索引类型,2、非聚集索引 非聚集索引不会影响数据表中记录的实际存储顺序。 非聚集索引仅仅记录指向表中行的位置的指针,通过这些指针迅速地定位数据。 一个表中可以创建多个非聚集索引,每个表中最多可以有249个非聚集索引。 默认情况下是非聚集索引。 在一列上设置唯一性约束时也自动创建非聚集索引。,索引的类型,聚集索引(clustered) 是一种物理存储方式 一个数据表只能建立一个聚集索引 非聚集索引(nonclustered) 是一种逻辑存储方式 索引的次序并不影响数据的物理存储顺序 一个数据表最多可以建立249个非聚集索引,索引类型,3、惟一索引 惟一索引既可以采用聚集索引的结构,又可以采用非聚集索引的结构。 如果希望在表中创建惟一索引,则该字段或字段组合的值在表中必须是具有惟一性的。,索引类型,4、全文本索引 使用全文本索引,启动全文本搜索服务。 每个表只允许有一个全文本索引。 全文本索引不能够自动更新。 只可以CHAR(字符)或VARCHAR(变长字符)类型的列上创建全文本索引。,10.4.2 建立索引,建立索引是加快查询速度的有效手段 建立索引 DBA或表的属主(即建立表的人)根据需要建立 有些DBMS自动建立以下列上的索引PRIMARY KEYUNIQUE 维护索引DBMS自动完成 使用索引DBMS自动选择是否使用索引以及使用哪些索引,创建索引,系统自动创建索引 在建立或修改表时,如果添加了一个主键约束或惟一性约束,系统自动在表中生成一个惟一性索引。 这个惟一性索引可以是聚集的,也可以是非聚集的,取决于PRIMARY KEY或UNIQUE后的关键字。,建立索引,语句格式 CREATE UNIQUE CLUSTERED INDEX ON (, ); 用指定要建索引的基本表名字 索引可以建立在该表的一列或多列上,各列名之间用逗号分隔 用指定索引值的排列次序,升序:ASC,降序:DESC。缺省值:ASC UNIQUE表明此索引的每一个索引值只对应唯一的数据记录 CLUSTER表示要建立的索引是聚簇索引,建立索引,Create index i_sno on s(sno) SELECT * FROM C /*看数据表 SELECT * FROM C(INDEX= i_sno ) /*按索引次序看数据表Create clustered index i_sno on s(sno)两者的区别?查看建立索引后,元组在表中的位置是否 改变,结论:建立索引的顺序,一般先建立聚集索引,再创建非聚集索引,建立索引,Create unique index i_sname on s(sname) 能否创建成功?为什么?Create index i_comp on sc(sno,cno desc),设计索引,考虑创建索引的列: 1、主键 2、连接使用频繁的列 3、在某一范围内频繁搜索的列 4、按排序顺序频繁检索的列 5、经常用于进行统计计算(如求极值、求和等)的列,设计索引,不考虑创建索引的列: 1、很少或从来不在查询中引用的列 2、只有两个或若干个值的列 3、行数很少的列 总之,当UPDATE的性能比SELECT更重要时不应创建索引。,10.4.4 删除索引,删除索引的语法Drop index 表名.索引名 注意使用primary key约束和unique约束建立的索引不能删除,Class over,
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号