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

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

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

CHECK约束还可以用于多个列设置限定条件。

例5:在数据库mytest中创建一个成绩表grades_new_two,和成绩表grades的结构相同,要求表grade_score字段值大于0且小于等于100. Mysql>create table mytest.grades_new_two

->(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(grade_score>0 and grade_score<=100));

※命名完整性约束:CONSTRAINT<约束名>;

此处如果没有给出明确的约束的名字,系统会自动创建一个约束名。

例6:在数据库mytest中创建一个成绩表grades_new_three,和成绩表grades的结构相同,将该表的主键约束名命名为PRIMARY_KEY_GRADES,并将它的外键命名为FOREIGN_KEY_ORDERS.

Mysql>create table mytest.grades_new_three

->(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,

->constraint PRIARY_KEY_GRADES primary key (grade_id), ->constraint FOREIGN_KEY_ORDERS foreign key(student_id) ->references students(student_id) on delete restrict on update restrict); 区别:就是比参照完整性多了定义名这一步。 ※更新完整性约束: ADD FOREIGE KEY DROP PRIMARY KEY

DROP FOREIGN KEY<外键名> 完整性约束不能直接被修改,如果要修改某个约束,实际上是用ALTER TABLE语句先删除该约束,然后再增加一个一个与该约束同名的新约束。 ※表维护语句——数据库优化的基础;

索引散列程度Cardinality——表示某个索引对应的列包含多少个不同的值。可以通过查看索引来得到索引的散列程度。

Mysql>show index from mytest.sudents;

※更新索引散列程度Cardinality可以用ANALYZE TABLE语句。 例8:更新数据库mytest中表students的索引散列程度。

Mysql>analyze table mytest.students; ——理解上是更新表的意思。

※CHECKSUM TABLE语句——数据可能在传输中造成损失或者破坏,为了保证数据的一致,可以使用CHECKSUM TABLE语句对数据库中的每一个表进行计算校检和。

CHECKSUM TABLE <表名>[QUICK|EXENDED] QUICK:表示返回已存储的校检和;

EXTENDED:整个表会一行一行被读取,并且计算校检和,对于较大的过程可能会比较慢。 例9:对数据库mytest的表students使用CHECKSUM TABLE语句获取一个校检和。 Mysql>checksum table mytest.students;

※CHECK TABLE语句:可以使用CHECK TABLE语句来检查一个或多个表是否有错误,该语句只对InnoDB、MyISAM、ARCHIVE、CSV起作用。

例10:使用CHECK TABLE语句检查数据库mytest中表students的相关检查信息。 MySQL>check table mytest.students;

例11:查阅数据库mytest中表students的相关检查信息。 MySQL>select table_name,check_time

->from information_schema.tables /*库·表(表可能多个,所以用到“s”)可以理解为schema.tables;*/ ->where table_name='students' and table_schema='mytest';

※REPAIR TABLE语句:可以使用REPAIR TABLE语句来尝试修复可能被损坏的表。该语句只对MyISAM和ARCHIVE表起作用。

※OPTIMIZE TABLE语句:重新利用未使用的空间,并整理数据文件的碎片,从而提高数据的读取效率。

例12:利用OPTIMIZE TABLE语句来优化数据库Mytest中的表students。

题目说明:如果在MySQL中开启了二进制日志文件,那么ANALYZE TABLE语句执行操作的结果也会写入二进制日志文件中。也可以在ANALYZE TABLE语句中添加NO_WRITE_TO_BINLOG或LOCAL选项来取消写入,其中两个关键字同义。 此处若是开启了二进制日志文件,则代码为:

Mysql>optimize no_write_to_binlog table mytest.students;

课后总复习错题

5.下列关于表级约束和列级约束的描述中,不正确的是(C) A.列级约束针对某个特定的列,包含在列定义中; B.表级约束与列定义相互独立,不包含在列定义中; C.列级约束可能涉及到多个列,也可能仅涉及一个列; D.表级约束可能涉及到多个列,也可能仅涉及一个列。

解析:列约束是对某一个特定列的约束,包含在列定义中,表约束与列定义相互独立,不包括在列定义中,通常用于对多个列一起进行约束。

※触发器是被指定关联到一个表的数据库对象,当一个表的特定时间发生时,它将会被激活。 语法格式:

?CREATE <触发器名>ON <表名> FOR EACH ROW <触发器主体> 其中:

INSERT:将新行插入表时激活触发器;

DELETE:从表中删除某一行时激活触发器; UPDATE:更改表中某一行数据时激活触发器。

FOR EACH ROW:使用INSERT语句向某个表插入多行数据时,触发器会对每一行数据的插入都执行相应的触发器动作。

每个表支持INSERT、UPDATE和DELETE的BEFORE与AFTER,因此每个表最多支持6个触发器。每个表的每个事件每次只允许一个触发器,单一触发器不能与多个事件或则多个表关联。 例1:在数据库mytest中表students中,创建一个触发器students_insert,用于每次向表students中插入一行数据时,将用户变量str设置成“add a new student”。 Mysql>create trigger mytest.students_insert after

->insert on mytest.students

->for each row set @str='add a new student'; 接着向students表插入一行数据: Mysql>insert into mytest.students

->(student_name,student_sex,student_age,student_major,student_contact) ->values ('王媛','1','22','生物专业',null);

最后执行命令mysql>select @str,查看用户变量str,验证触发器是否执行。

※若是需要查看数据库中已有的触发器,可以使用SHOW TRIGGER语句。 Mysql>show create trigger mytest.students_insert; 关于show create 的另外一些应用:

show create database database_name; -- 显示create database语句是否能够创建指定的数据库。 show create table table_name; -- 显示create database 语句是否能够创建指定的数据库。 show engines; -- 显示安装以后可用的存储引擎和默认引擎。

※删除触发器:DROP TRIGGER [IF EXISTS][数据库名]<触发器名> 例2:删除例1所创建的触发器students_insert。 Mysql>drop trigger if exists mytest.students_insert;

当删除一个表的同时,也会自动删除该表上的触发器,另外,触发器不能更新或覆盖,为了修改一个触发器,必须先删除它,然后再重新创建。

※使用触发器:

INSERT触发器:在INSERT语句执行之前或之后响应的触发器; UPDATE触发器:在UPDATE语句执行之前或之后响应的触发器; DELETE触发器:在DELETE语句执行之前或之后响应的触发器; 例3:在数据库mytest中表students中重新创建触发器students_insert,用于每次向表中插入一行记录时,将用户变量str设置为新插入的学生的student_id。 Mysql>create trigger mytest.students_insert

->after insert on mytest.students

->for each row set @str=new.student_id; 然后插入一行新的记录:

Mysql>insert into mytest.students

->(student_id,student_name,student_sex,student_age,student_major) ->values('1356','李鸣','0','21','计算机专业');

最后输入代码mysql>select @str ; 来查看用户变量str,验证触发器是否执行。 注意:可以引用一个名为new的虚拟表,来访问更新的值;

可以引用一个名为old的虚拟表来访问UPDATE语句执行前的值。

例4:将数据库mytest中表students,创建一个触发器students_update,用于每次更新表数据时,将student_age的值加1.

可以理解为再更新数据前将年龄加上1. Mysql>create trigger mytest.students_update

->before update on mytest.students

->for each row set new.student_age=old.student_age+1;

找到student_id为1322的学生信息,接着将该记录的姓名改为“张亮”。

mysql>select student_name,student_age from mytest.students where student_id='1322'; Mysql>update mytest.students

->set student_name='张亮' where student_id='1322'; 最后再重新执行这条程序,看年龄是否增大一岁。

mysql>select student_name,student_age from mytest.students where student_id='1322';

※DELETE触发器:在DELETE触发器代码内,可以引用一个名为OLD(不区分大小写)的虚拟表来访问被删除的行。

※触发器进阶:创建触发器可能需要特殊的安全访问权限,但是触发器的执行时自动的,也就是说,如果INSERT、DELETE和UPDATE语句能够执行,那么相关的触发器也能执行。应该多用触发器来保证数据的一致性、完整性和正确性。

课后总复习错题

※触发器不可以建立在视图上。

7.在MySQL中,INSERT 触发器操作数据时,可以使用的临时表是(A) A.NEW B.OLD C.NEW和OLD D.LAST INSERT触发器操作数据时可使用的临时表是NEW

UPDATE触发器操作数据时可使用的临时表是NEW和OLD

4.当触发器涉及对触发表自身的更新操作时,使用的触发器必须是(A) A.BEFORE UPDATE B.AFTER UPDATE C.UPDATE BEFORE D.UPDATE AFTER

※时间调度器可以进行监视,并判断是否需要调用事件,可以在指定的时刻执行某些特定的任务,并以此取代原先只能由操作系统的计划任务来执行的工作。这种需要在指定时刻才被执行的任务就是事件,这些特定的任务通常是一些特定的SQL语句。 时间也被称作临时触发器。 ※时间和触发器的区别:

时间是基于特定时间周期来执行某些任务;而触发器是基于某个表所产生的时间触发。 ※由于事件调度器默认是关闭的,需要手工打开,所以我们可以先查看当前是否已经开启事件调度器。

Mysql>show variables like 'event_scheduler'; 或者是查看系统变量event_scheduler:

Mysql>select @@event_scheduler; ——此处@@event_scheduler是一个整体,不分开的。 若系统返回的结果是OFF,则表示时间调度器没有开启,此时我们可以打开事件调度器。 Mysql>set global event_scheduler=true; 如果想要关闭时间调度器的话则是:

Mysql>set global event_scheduler =false;

※创建事件的语法格式:

CREATE EVENT<事件名> ON SCHEDULEDO<事件主体>; 其中schedule的介绍如下:

①AT子句:用于指定事件在某个时刻发生;

②EVERY子句:用于表示事件在指定时间区间内每间隔多长时间发生一次。 此外事件名前面可以用if not exists来修饰。 例1:在数据库mytest中创建一个事件,用于每个月向表students中插入一条学生基本信息。 Mysql>create event if not exists event_add /*if not exists表明如果不存在的话就创建*/

->on schedule every 1 month ->do

->insert into mytest.students(student_name,student_sex,student_age,student_major) ->values('王维','0',24,'自动化专业');

※修改事件:事件被创建以后可以通过ALTER EVENT语句来修改其定义和相关属性。 语法格式:

ALTER EVENT<事件名>[RENAME TO <新事件名>][DO<事件主体>][ENABLE|DISABLE] 一个事件最后一次被调用后,它是无法被修改的,因为此时它已不存在了。 例2:临时关闭例1创建的时间event_add。 Mysql>alter event event_add disable;

例3:再次开启例2关闭的事件event_add。 Mysql>alter event event_add enable;

例4:将事件event_add的名字修改为event_new。 Mysql>alter event event_add

->rename to event_new;

※删除事件的语法格式:

DROP EVENT[IF EXISTS]<事件名> 例5:删除名为event_new的事件。

Mysql>drop event if exists event_new; /*如果存在的话就删除掉*/

课后总复习错题

1.以下有关mysql事件的叙述中,错误的是(A) A.事件是由操作系统调用的过程 ※不是系统调用的,而是按照计划自动运行的。或者可以理解为在创建事件的时候就已经调用了,只是没有运行。

B.事件能够按照设定的事件自动执行 C.在事件中可以调用存储过程

D.在事件中可以对数据表进行数据更新操作 ※事件是按计划运行工作,事件是按建立事件时设定的时间来执行,事件可调用存储过程及对表进行更新

2.以下不能开启事件调度器的语句是(C) A.SET GLOBAL EVENT_SCHEDULER=TRUE;

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库计算机二级MySQL基本知识点(6)在线全文阅读。

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