《数据更新与索引的建立》由会员分享,可在线阅读,更多相关《数据更新与索引的建立(49页珍藏版)》请在金锄头文库上搜索。
1、数据库表中记录更新及数据索引 主讲老师:赵利平 Email: zhaoliping_TEL: 15825720136QQ: 304404401数 据 更 新 插入数据修改数据删除数据 1. 插入数据v两种插入数据方式 插入单个元组 插入子查询结果1. 插入单个元组v语句格式INSERTINTO (,)VALUES ( , )v功能将新元组插入指定表中。插入单个元组(续)例1 将一个新学生记录(学号:95020;姓名:陈冬;性别:男;所在系:IS;年龄 :18岁)插入到Student表中。INSERTINTO StudentVALUES (95020,陈冬,男,IS, 18);插入单个元组(续)
2、例2 插入一条选课记录( 95020,1 )。INSERTINTO SC(Sno,Cno)VALUES ( 95020 , 1 );新插入的记录在Grade列上取空值插入单个元组(续)v INTO子句 指定要插入数据的表名及属性列 属性列的顺序可与表定义中的顺序不一致 没有指定属性列:表示要插入的是一条完整的元 组,且属性列属性与表定义中的顺序一致 指定部分属性列:插入的元组在其余属性列上取 空值v VALUES子句 提供的值必须与INTO子句匹配 值的个数 值的类型2. 插入子查询结果v语句格式INSERT INTO ( , )子查询; v功能将子查询结果插入指定表中插入子查询结果(续)例3
3、 对每一个系,求学生的平均年龄,并 把结果存入数据库。第一步:建表CREATE TABLE Deptage(Sdept CHAR(15), /* 系名*/Avgage SMALLINT); /*学生平均年龄 */插入子查询结果(续)第二步:插入数据INSERTINTO Deptage(Sdept, Avgage)SELECT Sdept,AVG(Sage)FROM StudentGROUP BY Sdept;插入子查询结果(续) INTO子句(与插入单条元组类似) 指定要插入数据的表名及属性列 属性列的顺序可与表定义中的顺序不一致 没有指定属性列:表示要插入的是一条完整的元 组 指定部分属性列
4、:插入的元组在其余属性列上取 空值 子查询 SELECT子句目标列必须与INTO子句匹配 值的个数 值的类型与select 输出列表 into 新表名的区别插入子查询结果(续)DBMS在执行插入语句时会检查所插元组是否破坏表上已定义的完整性规则 实体完整性 参照完整性 用户定义的完整性 对于有NOT NULL约束的属性列是否提供了非空值 对于有UNIQUE约束的属性列是否提供了非重复值 对于有值域约束的属性列所提供的属性值是否在值域范围内3.4 数 据 更 新 3.4.1 插入数据3.4.2 修改数据3.4.3 删除数据 3.4.2 修改数据v语句格式UPDATE SET =,=WHERE ;
5、v功能 修改指定表中满足WHERE子句条件的元组修改数据(续)v三种修改方式 修改某一个元组的值 修改多个元组的值 带子查询的修改语句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 将计算机科学系
6、全体学生的成绩置零。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 删除数据DELETEF
7、ROM WHERE ; 功能 w 删除指定表中满足WHERE子句条件的元 组 WHERE子句 w 指定要删除的元组 w 缺省表示要修改表中的所有元组删除数据(续)v三种删除方式 删除某一个元组的值 删除多个元组的值 带子查询的删除语句1. 删除某一个元组的值例8 删除学号为95019的学生记录。DELETEFROM StudentWHERE Sno=95019;2. 删除多个元组的值例9 删除2号课程的所有选课记录。DELETEFROM SC;WHERE Cno=2;例10 删除所有的学生选课记录。DELETEFROM SC;3. 带子查询的删除语句例11 删除计算机科学系所有学生的选课记录。
8、DELETEFROM SCWHERE CS=(SELETE SdeptFROM StudentWHERE Student.Sno=SC.Sno);删除数据(续)DBMS在执行插入语句时会检查所插元组是否破坏表上已定义的完整性规则参照完整性 不允许删除 级联删除更新数据与数据一致性DBMS在执行插入、删除、更新语句时必须保证数据库一致性l必须有事务的概念和原子性l完整性检查和保证10.4 建立索引 (p246)v索引概述 v索引的类型 v建立索引 v设计索引 v删除索引 概述 索引的概念 v 数据库中的索引是一个列表,在这个列 表中包含了某个表中一列或者若干列值的集 合,以及这些值的记录在数据表
9、中的存储位 置的物理地址。概述编号姓名职业006王闽科员002赵亮职工005李洋司机007宋发教师003刘芳科员001范珊职工004邵彤教师索引编号指针地址0016002200350047005300610074概述索引的优点 v可以大大加快数据检索速度。 v通过创建唯一索引,可以保证数据记录的唯一 性。 v在使用ORDER BY和GROUP BY子句进行检 索数据时,可以显著减少查询中分组和排序的时 间。 v可以加速表与表之间的连接,这一点在实现数 据的参照完整性方面有特别的意义。概述索引的缺点 v索引占用磁盘空间 v降低了数据修改(插入、更新、删除)速 度。索引类型索引的分类 v1聚集索引
10、和非聚集索引 v2惟一索引和非惟一索引 v3全文本索引索引类型v1、聚集索引 v聚集索引是一种指明数据物理存储顺序的索引 。 v行的物理存储顺序与索引顺序完全相同,即索 引的顺序决定了表中行的存储顺序。 v聚集索引适合于范围搜索。 v每张表只能有一个聚集索引。 v主键是聚集索引的良好的候选者。索引类型v2、非聚集索引 v非聚集索引不会影响数据表中记录的实际存储 顺序。 v非聚集索引仅仅记录指向表中行的位置的指针 ,通过这些指针迅速地定位数据。 v一个表中可以创建多个非聚集索引,每个表中 最多可以有249个非聚集索引。 v默认情况下是非聚集索引。 v在一列上设置唯一性约束时也自动创建非聚集 索引
11、。索引的类型 v聚集索引(clustered) 是一种物理存储方式 一个数据表只能建立一个聚集索引 v非聚集索引(nonclustered) 是一种逻辑存储方式 索引的次序并不影响数据的物理存储顺序 一个数据表最多可以建立249个非聚集索引 索引类型v3、惟一索引 v惟一索引既可以采用聚集索引的结构,又可以 采用非聚集索引的结构。 v如果希望在表中创建惟一索引,则该字段或字 段组合的值在表中必须是具有惟一性的。索引类型v4、全文本索引 v使用全文本索引,启动全文本搜索服务。 v每个表只允许有一个全文本索引。 v全文本索引不能够自动更新。 v只可以CHAR(字符)或VARCHAR(变长 字符)类
12、型的列上创建全文本索引。10.4.2 建立索引 v建立索引是加快查询速度的有效手段 v建立索引 DBA或表的属主(即建立表的人)根据需要建立 有些DBMS自动建立以下列上的索引 PRIMARY KEY UNIQUE v维护索引 DBMS自动完成 v使用索引 DBMS自动选择是否使用索引以及使用哪些索引创建索引系统自动创建索引 v在建立或修改表时,如果添加了一个主键约束 或惟一性约束,系统自动在表中生成一个惟一 性索引。 v这个惟一性索引可以是聚集的,也可以是非聚 集的,取决于PRIMARY KEY或UNIQUE后 的关键字。建立索引 v语句格式 CREATE UNIQUE CLUSTERED
13、INDEX ON (, ); 用指定要建索引的基本表名字 索引可以建立在该表的一列或多列上,各列名之间用逗号 分隔 用指定索引值的排列次序,升序:ASC,降序: DESC。缺省值:ASC UNIQUE表明此索引的每一个索引值只对应唯一的数据记 录 CLUSTER表示要建立的索引是聚簇索引建立索引 vCreate index i_sno on s(sno) v SELECT * FROM C /*看数据表v SELECT * FROM C(INDEX= i_sno ) /*按索引次序看数 据表vCreate clustered index i_sno on s(sno)两者的区别?查看建立索引后
14、,元组在表中的位置是否 改变结论:建立索引的顺序,一般先建立聚集索引,再创建非聚集索引建立索引 vCreate unique index i_sname on s(sname) v能否创建成功?为什么?vCreate index i_comp on sc(sno,cno desc)设计索引v考虑创建索引的列: v1、主键 v2、连接使用频繁的列 v3、在某一范围内频繁搜索的列 v4、按排序顺序频繁检索的列 v5、经常用于进行统计计算(如求极值、求和 等)的列设计索引v不考虑创建索引的列: v1、很少或从来不在查询中引用的列 v2、只有两个或若干个值的列 v3、行数很少的列 v总之,当UPDATE的性能比SELECT更重要 时不应创建索引。10.4.4 删除索引 v删除索引的语法Drop index 表名.索引名 v注意使用primary key约束和unique约束 建立的索引不能删除