Mysql>alter table mytest.students
->drop index index_students;
注意:如果删除的列时索引的组成部分,那么删除该列时,也会将该列从索引中删除;如果组成索引的所有列都会被删除,则整个索引将被删除。
※索引进阶:索引可以在一些情况下加快查询,但是在某些情况下,会降低效率。
课后总复习错题
6.以下关于PRIMARY KEY和UNION的描述中,错误的是(A) A.UNIQUE约束只能定义在表的单个列上;
B.一个表可以定义多个UNIQUE,只能定义一个PRIMARY KEY; C.在空值列上允许定义UNIQUE,不能定义PRIMARY KEY; D.PRIMARY KEY 和UNIQUE都可以约束属性值的唯一性。 解析:
(1) 唯一性约束所在的列允许空值,但是主键约束所在的列不允许空值。
(2) 可以把唯一性约束放在一个或者多个列上,这些列或列的组合必须有唯一的。但是,唯一性约束所在的列并不是表的主键列。
(3) 唯一性约束强制在指定的列上创建一个唯一性索引。在默认情况下,创建唯一性的非聚簇索引,但是,也可以指定所创建的索引是聚簇索引。 (4)建立主键的目的是让外键来引用.
(5)一个表最多只有一个主键,但可以有很多唯一键
7.执行语句“CREATE INDEX in_dept ON tb_dept(telephone(6),DESC)”后,在tb_dept表的telephone属性上(A)
A.根据telephone属性前六个字符采用BTREE索引类型创建索引 B.根据telephone属性前六个字符采用HASH索引类型创建索引 C.根据前六条记录采用BTREE索引类型创建索引 D.根据前六条记录采用HASH索引类型创建索引 解析:
HASH索引适合等式比较的操作,不能用来加速order by操作,也不能确定在两个值之间大约有多少行,会影响一些查询的执行效率。而且只能使用整个关键字来搜索一行。 对索引字段进行范围查询的时候,只有BTREE索引可以通过索引访问。用B-Tree索引进行全关键字、关键字范围和关键字前缀查询。
※视图:视图是从一个或者几个基本表(或视图)导出的表。视图是一个虚拟表,并不是数据库真实存储的数据集。 ※视图的作用:
①能够简化用户的操作
②视图使用户以多种角度看待同一数据
③视图对重构数据库提供了一定程度的逻辑独立性。 ④视图能够对机密数据提供安全保护
⑤适当利用视图可以更加清晰地表达查询。 ※视图和基本表的区别:
基本表是本身独立存在的表,在 SQL 中一个关系就对应一个表。
视图是从一个或几个基本表导出的表。视图本身不独立存储在数据库中,是一个虚表。即数据库中只存放视图的定义而不存放视图对应的数据,这些数据仍存放在导出视图的基本表
中。视图在概念上与基本表等同,用户可以如同基本表那样使用视图,可以在视图上再定义视图。
※试述视图的优点。
①为用户集中数据,简化用户的数据查询和处理。 ②保证数据的逻辑独立性。
③重新定制数据,使得数据便于共享;合并分割数据,有利于数据输出到应用程序中。 ④数据保密。
※创建视图:CREATE VIEW <视图名> AS
①SELECT语句不能包含FROM子句中的子查询;
②定义中不能引用TEMPORARY表,不能创建TEMPORARY视图。
例1:在数据库mytest中创建视图students_view,该视图包含学生基本信息表students中所有男生的姓名、专业和年龄,并且要求今后对视图数据的修改都必须符合“性别=男”这一个条件。
MySQL>create view mytest.students_view——标明mytest表示视图属于这个数据库。 ->as
->select student_name,student_major,student_age,student_sex ->from mytest.students ->where student_sex='0' ->with check option;
with check option的意思是修改视图时,检查插入的数据是否符合WHERE设置的条件。 此外,由于对所有数据的修改都需要判断性别是否为男,所以性别作为一个条件也应该加入到视图当中去。
※删除视图:DROP VIEW<视图名>
例2:删除例1中创建的视图students_view。 Mysql>drop view mytest.students_view;
※修改视图:
①ALTER VIEW <视图名> AS
②使用DROP VIEW语句先删除视图,然后使用CREATE VIEW语句来创建一个新的视图。
※查看视图:
SHOW CREATE VIEW<视图名>
例3:查看数据库mytest中名称为students_view的视图结构。 方法一:
MySQL>use mytest;
Mysql>show create view students_view; 方法二:
Mysql>show create view mytest.students_view; ——把视图当做表一样。
※更新视图数据:某些视图是可以更新的,但某些特定的结构会使得视图变得不可更新,比如:
①聚合函数SUM(),MIN(),MAX(),COUNT()等; ②DISTINCT关键字;
③GROUP BY 子句; ④HAVING子句;
⑤UNION或UNION ALL运算符;
⑥位于选择列表中的子查询,FROM子句中不可更新视图或包含多个表; ⑦WHERE子句中的子查询;
⑧使用临时列表使视图成为不可更新的;
※使用INSERT语句通过视图向基础表插入数据;
例4:在数据库mytest中,向视图students_view插入下面一条记录:(‘刘强’,‘地理空间专业’,‘19’,‘0’)。
mysql> insert into mytest.students_view
-> (student_name,student_major,student_age,student_sex)
-> values('刘强','地理空间专业',19,'0');
※使用UPDATE语句通过视图修改基础表数据:
例5:将视图student_view的student_major字段值“化学专业”改为“材料化学专业”。 Mysql>update mytest.students_view
->set student_major='材料化学专业' ->where student_major='化学专业';
※使用DELETE语句通过视图删除基础表的数据:
例6:删除视图students_view中姓名为“王五”的学生的信息。 Mysql>delete from mytest.students_view where student_name='王五'; 注意:对于依赖于多个基础表的视图,不能使用DELETE语句;
※查询视图数据:
例7:在视图students_view中查找姓名为“张明”的学生,以及他的姓名和专业信息。 Mysql>select student_name,student_major from mytest.students_view
->where student_name='张明';
※视图不能索引,也不能有关联的触发器、默认值或者规则。
例8:基于视图students_view创建一个只包含专业为“物理专业”的子视图。 Mysql>create view mytest.students_phy ->as
->select * from mytest.students_view ->where student_major='物理专业';
课后总复习错题
3.下列关于视图的叙述,正确的是(A) A.使用视图,能够屏蔽数据库的复杂性;
B.更新视图数据的方式与更新表中数据的方式相同; C.视图可以建立索引;
D.使用视图,可以提高数据更新的速度。
解析:参见视图的优点——为用户集中数据,简化用户的数据查询和处理。
※数据库完整性:数据库完整性是指数据库中数据的正确性和相容性。数据库完整性由各种各样的完整性约束来保证,因此可以说数据库完整性设计就是数据库完整性约束的设计。 完整性有三类:实体完整性,参照完整性,用户定义完整性。 ①实体完整性:实体完整性要求每一个表中的主键字段都不能为空或者重复的值。规定基本关系R的主属性A不能取空值, 如:Create Table 学生
( 学号CHAR(10) PRIMARY KEY, 姓名 CHAR(20), ....... );
②参照完整性:规定若F是基本关系的外码,它与基本关系S的主码相对应,则对于R中每一个元组在F上的值必须取空值(F的每一个属性值均为空值),或等于S中某一个元组的主码值。
如:Create Table学生(学号CHAR(10) PRIMARY KEY, 姓名 CHAR(20), 课程号 CHAR(10),
FOREIGN KEY(课程号)REFERENCES 课程(课程号) ); Create 课程( 课程号 CHAR(10) PRIMATY KEY, ........);
※参照完整性简单来说就是表间主键外键的关系。当更新、删除、插入一个表中的数据时,通过引用相互关联的另一个表中的数据,来检查对表的数据操作是否正确。 ③用户定义完整性:就是针对某一具体的关系数据库的约束条件,反映某一具体应用所涉及的数据必须满足的语义要求,由应用环境决定,即属性值限定,包括:列值非空(NOT NULL), 列值唯一(UNIQUE),检查列值是否满足一个布尔表达式。 如:Create Table 学生_课程(学号 CHAR(10) NOT NULL, 课程号 CHAR(10) NOTNULL, 成绩 SMALLINT NOT NULL,
PRIMARY KEY(学号,课程号), ...... );
Mysql支持三种用户自定义完整性,分别是非空约束,CHECK约束和触发器。 ?非空约束:在某个列定义后加上NOT NULL即可; ?CHECK约束:CHECK<表达式>
※实体完整性约束的分类: ①主键约束:
例1:创建一个人和例3-5中基本学生信息表,相同结构的表students_new,以列的完整性约束定义主键。——也即是标明PRIMARY KEY。 mysql> create table mytest.students_new
-> (student_id int not null auto_increment primary key, -> student_name char(50) not null,
-> student_sex char(1) not null default 0, -> student_age int not null,
-> student_major char(50) not null,
-> student_contact char(50) null); ②候选键约束:
候选键可以在CREATE TABLE或ALTER TABLE语句中指定关键字UNIQUE来定义。一个表中只能有一个主键,但是可以有多个候选键。
※指定参照完整性约束的实现策略:
RESTRICT:限制策略,当要删除或者更新父表中被参照列上并在外键中出现的值时,系统拒绝对父表的删除或者更新操作。
CASCADE:级联策略,当父表中删除或更新记录行时,系统会自动删除或更新子表中匹配的记录行。
SET NULL:置空策略,当父表中删除或更新记录行时,设置子表与之对应的外键的列的值为NULL,该策略需要子表的外键没有声明限定词NOT NULL。
NOT ACTION:不采取实施策略,当一个相关的外键值在父表中时,不允许删除或更新父表中的键值,该策略动作语义与RESTRICT相同。
例2:在数据库mytest中创建一个成绩表grades,用于记录学生的成绩信息,该表包含的信息有:成绩序号grade_id,科目grade_obj,课程分数grade_score,学期grade_time。要求完成成绩表grades的所有学生姓名都在表students中对应记录。 mysql>use mytest;
Mysql>create table mytest.grades
->(grade_id int not null auto_increment, ->grade_obj char(50) not null, ->grade_score int not null, ->grade_time int not null,
->student_id int not null, /*有某一行在这里不是主键在另一个表students是主键*/ ->primary key(grade_id),
->foreign key(student_id) references students(student_id) on delete restrict ->on update restrict);
例3:向例2的表中grades插入一条记录:(1,'大学物理',89,2,1320) Mysql>insert into mytest.grades
->(grade_id,grade_obj,grade_score,grade_time,student_id) ->values(1,'大学物理',89,2,1320);
注意:此时若是输入一个students中不存在的学号学生的成绩,则程序最出错。
①主键不能包含空值,但允许在外键中出现空值,也就是说,只要外键的每个非空值出现在指定的主键中,这个外键的内容就是正确的;
②外键中列的数目必须和父表的主键中列的数目相同;
③外键中列的数据类型必须和父表中对应列的数据类型相同。
※用户定义完整性实例:
例4:在数据库mytest中,创建成绩表grades_new,结构和成绩表grades相同,要求表grades_new的student_id列所有值来源于表students的student_id列。 MySQL>create table mytest.grades_new
->(grade_id int not null auto_increment, ->grade_obj char(50) not null, ->grade_score int not null, ->grade_time int not null,
->student_id int not null check (student_id in (select student_id from mytest.students)), ->primary key(grade_id));
本例中设置的check约束效果实质上与参照完整性作用相同,与外键作用相同。
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库计算机二级MySQL基本知识点(5)在线全文阅读。
相关推荐: