77范文网 - 专业文章范例文档资料分享平台

计算机二级MySQL基本知识点(5)

来源:网络收集 时间:2019-04-10 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

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)在线全文阅读。

计算机二级MySQL基本知识点(5).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/zonghe/584083.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: