鲸英训练营 0531作业

一、单选题(每题5分,总分25分)

  1. 1. 在MySQL中,一般使用( A )语句来指定一个已有数据库作为当前工作数据库。

    A.USED

    B.USE

    C.BEGIN

    D.GO

  2. 在关系型数据库中,( B )能够唯一标识一个记录的属性或属性的组合。

    A.属性

    B.主码

    C.列

    D.元组

  3. 在MySQL的安装过程中,若选用"启用TCP/IP网络",则MySQL会默认选用的端口号是( B

    A.1433

    B.3306

    C.52

    D.1587

  4. SQL语句"delete from student"的作用是(A

    A.删除当前数据库中student表内的所有行

    B.删除当前数据库中整个student表,包括表结构

    C.由于没有where子句,因此不删除任何数据

    D.删除当前数据库中student表内的当前行

  5. 以下哪一个属于DML语句?( C
    1. Create
    2. Drop
    3. Delete
    4. Grant

二、简答题(总分25分)

1.在mysql中常用存储引擎包括:MyISAM、InnoDB和MEMORY,请您写出每个存储引擎的特点。(10分)

1 InnoDB

从MySQL5.5.8,InnoDB成为MySQL默认的存储引擎。MySQL从3.23.34a开始支持InnoDB。

InnoDB支持事务,主要面向OLTP数据库应用。支持行锁,支持外键,并支持类似于Oracle的行锁定读,即默认读取操作不会产生锁。

InnoDB存储引擎中支持自动增长列AUTO_INCREMENT。自动增长列的值不能为空,且值必须唯一,且必须为主键。在执行插入操作时,若不指定自动增长列的值,或自动增长列的值为0或NULL,则插入的值为自动增长后的值。

若插入任意值,该值在该列中没有出现过,则可以直接插入。

InnoDB存储引擎中,创建的表的结构存储于.frm文件中。数据和索引存储在innodb_data_home和innodb_data_path表空间中。

对于表的数据存储,InnoDB存储引擎采用了聚集的方式,每张表的存储都是按主键顺序进行存放。若没有显示地在表定义时指定主键,InnoDB会为每一行生成一个6字节的ROWID,并以此作为主键。

InnoDB支持外键。外键所在的表为子表,外键依赖的表为父表。父表中被主表外键支持的字段必须为主键。当删除、更新浮标的某条信息时,子表也必须有相应的改变。

InnoDB通过多版本并发控制(MVCC)来获得高并发性,并实现了SQL标准的4种隔离机制,默认为REPEATABLE级别。同时使用一种被称为next-key locking的策略来避免幻读。InnoDB还提供了插入缓冲、二次写、自适应哈希索引、预读等高性能和高可用的功能。

2 MyISAM

MySQL5.5.8之前MyISAM是MySQL默认的存储引擎。

MyISAM不支持事务,不支持外键,支持全文索引,处理速度快。主要面向OLAP数据库应用。

MyISAM存储引擎的表存储成3个文件,文件名与表名相同,扩展名分别为:frm,MYD,MYI。

frm文件:存储表的结构。

myd文件:存储数据。

myi文件:存储存储索引。

MySQL 5.0版本之前,MyISAM默认支持的表大小为4GB,若需要支持大于4GB的MyISAM表时,则需要指定MAX_ROWS和AVG_ROW_LENGTH属性。从MySQL5.0开始,MyISAM默认支持256T的单表数据。

MyISAM的缓冲池只缓存索引文件,而不缓存数据文件。数据文件的缓存交给操作系统完成。这与大多数使用LRU算法缓存数据的数据库都不同。在MySQL5.1.23之前,无论32位系统或64位系统,缓存最大只能设置为4GB,在之后的版本中,64位的系统可以支持大于4GB的索引缓冲区。

3 MEMORY

MEMORY存储引擎(之前被称为HEAP存储引擎)将表中的数据存储在内存中。表结构以文件存储于磁盘。文件名与表名相同,后缀名为frm。服务器需要有足够的内存来维持MEMORY存储引擎的表的使用。如果不需要使用了,可以释放这些内容,或删除不需要的表。

MEMORY存储引擎默认使用哈希索引,可以按需求指定索引类型。

只支持表锁,并发性能较差。不支持VARCHAR、BLOB和TEXT的列类型。

MEMORY存储引擎通常很少用到。由于基于内存,所以响应速度非常快。但若内存出现异常就会影响到数据的完整性。若重启机器或者关机,或当mysqld守护进程崩溃时,所有的MEMORY数据都会丢失。

MEMORY表的大小主要取决于两个参数,分别是max_rows和max_heap_table_size:

max_rows可以在创建表时指定;

max_heap_table_size的大小默认为16MB,可以按需要进行扩大。

若数据超过了设置的值,则MySQL数据库会把其转换到MyISAM存储引擎表,存放在磁盘中。这导致访问性能的降低。

当数据有如下情况时,可以考虑使用MEMORY表:

临时的数据:目标数据只是临时需要,在其生命周期中必须立即可用。

相对无关的数据:存储在MEMORY表中的数据如果突然丢失,不会对应用服务产生实质的负面影响,而且不会对数据完整性有长期影响。

如果使用MySQL4.1及以之前版本,MEMORY的搜索比MyISAM表的搜索效果要低,因为MEMORY表只支持哈希索引,这需要使用整个键进行搜索。但是,4.1之后的版本同时支持散列索引和B树索引。B树索可以使用部分查询和通配查询,也可以使用 < 、> 和 >= 等操作符。

2.如果要在关系型数据库中修改数据,被修改的数据都会先存放在数据缓冲区高速缓存(内存)中,当检查点(checkpoint)到达后,才会将内存中的数据重新写入硬盘。为什么不直接写入到硬盘?如果数据驻留在内存中,此时数据库服务器宕机了,是不是就意味着数据丢失?为什么?(15分)

答:

(1)为什么不直接写入硬盘:效率低,存储速度慢且损伤硬盘寿命,所以先放在内存里;

(2)宕机后并未丢失;原因:可以通过binary log日志恢复数据到某一个具体的时间节点。

三、实操题(总分50分)

实验一:使用SQL语句创建一张名为"学生"的表,属性包括:学号、姓名、性别、班级和出生日期。学号的数据类型为char (10),姓名的数据类型为char (8),性别的数据类型为char (2),班级的数据类型为char (8),出生日期的数据类型为datetime。表创建完成后,往里面插入两行数据(插入的数据自行定义即可),并使用select语句进行全表查询。(25分)

mysql> set default_storage_engine=InnoDB;

Query OK, 0 rows affected (0.00 sec)

mysql> CREATE table students(

-> ID char(10),

-> name char(8),

-> sex char(2),

-> class char(8),

-> birth datetime

-> );

insert into students (ID,name,sex,class,birth) values ("002","Lucy","GL","8",'2002-01-01 10:10:30');


实验二:将虚拟机还原到"Linux安装配置好的初始状态",使用二进制安装的方法,安装并配置好MySQL。需要完成的步骤包括:1.安装MySQL软件;2.初始化MySQL数据库(安装数据库);3.配置环境变量;4.重置默认管理员密码;5.创建mysql账号,实现远程登录mysql。【以上5个步骤完成后,均需将最后结果截图】(25分)




环境变量更改:

直接启动:

重启后:

远程登录并创建数据库成功:



Linux下mysql的二进制安装与部分练习的更多相关文章

  1. linux下mysql多实例安装

    1.MySQL多实例介绍 1.1.什么是MySQL多实例 MySQL多实例就是在一台机器上开启多个不同的服务端口(如:3306,3307),运行多个MySQL服务进程,通过不同的socket监听不同的 ...

  2. linux下mysql多实例安装(转)

    转自:http://www.cnblogs.com/xuchenliang/p/6843990.html   1.MySQL多实例介绍 1.1.什么是MySQL多实例 MySQL多实例就是在一台机器上 ...

  3. linux下mysql基础从安装到基本使用

    在LINUX下安装MYSQL #需要的安装包(按照先后顺序) libdbi-devel--2.1 libdbi--2.1 libdbi-drivers- perl-DBI-.el5 perl-DBD- ...

  4. linux 下mysql多实例安装

    1.软件下载 https://dev.mysql.com/downloads/file/?id=479096 免编译二进制包 mysql-5.6.21-linux-glibc2.5-x86_64.ta ...

  5. linux下mysql 最新版安装图解教程

    1.查看当前安装的linux版本 命令:lsb_release -a 如下图所示 通过上图中的数据可以看出安装的版本为RedHat5.4,所以我们需要下载RedHat5.4对应的mysql安装包 2. ...

  6. Linux下Mysql5.6 二进制安装

    1.1下载二进制安装包 wget https://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.40-linux-glibc2.12-x86_64.t ...

  7. linux下mysql开启二进制日志

    mysql的查询日志,慢查询日志,错误日志,网上的设置方法是正确的.但在二进制日志上设置有问题.正确的设置方法如下, 在/etc/my.cnf文件中[mysqld]下加上: server-id = 1 ...

  8. Linux下mysql 多实例安装配置

    首先我们要清楚什么是多实例?所谓多实例就是用多个配置文件来启动多个不同端口的进程,以不同的端口的形式为外提供服务.明白了多实例 我们下面的操作和配置就一目了然了首先我们要安装一套基础的应用程序,也就是 ...

  9. 三、Linux下mysql的完整安装

    参考资料:http://www.cnblogs.com/fly1988happy/archive/2011/11/21/2257682.html http://www.cnblogs.com/xion ...

  10. Linux下MySQL的数据库安装

    centos7 + mysql5.7 tar包解压安装 先执行wget https://dev.mysql.com//Downloads/MySQL-5.7/mysql-5.7.18-linux-gl ...

随机推荐

  1. 迁移到 Eclipse: Eclipse 对 IntelliJ IDEAA 评估开发指南

    为何考虑 Eclipse 以及它与 IntelliJ IDEA 有什么不同 Eclipse 是一个免费的.正日益流行起来的 Java 集成开发环境,最新版本的 Eclipse 中提供了很多特性,这些特 ...

  2. 面试:10亿数据如何最快速插入MySQL?

    转载:https://mp.weixin.qq.com/s/kL1srP3FZjaTSXLULsUS5g 最快的速度把10亿条数据导入到数据库,首先需要和面试官明确一下,10亿条数据什么形式存在哪里, ...

  3. golang模板库之fasttemplate

    简介 fasttemplate是一个比较简单.易用的小型模板库.fasttemplate的作者valyala另外还开源了不少优秀的库,如大名鼎鼎的fasthttp,前面介绍的bytebufferpoo ...

  4. php-fpm相关操作

    php-fpm常用操作 一. php5.3.3之后使用新号方式控制php-fpm进程 INT, TERM 立即终止 QUIT 平滑终止 USR1 重新打开日志文件 USR2 平滑重启所有worker进 ...

  5. AtCoder Beginner Contest 295

    Three Days Ago 我们定义一个只由数字构成的字符串中的字符能够被重排成相同的两份,我们称这个字符串是个好字符串,比如12341234 现在给定一个字符串\(S\),找出所有的\([l,r] ...

  6. windows下python批量更新软件包

    前言 相信很多小伙伴都遇到过python有些软件包版本过低导致无法安装一些模块的问题,刚好我前两天也遇到了,这里写个文章记录一下 一.更新pip版本 打开命令控制面板,输入: python -m pi ...

  7. Beautiful of programming

    作者:Linus Torvalds 我不知道该如何清楚地描述我对编程的痴迷.对编程的人来说,这是世界上最有趣的事情.这是一个比国际象棋更复杂的游戏,在这个游戏中,你可以制定自己的规则,并基于这些规则得 ...

  8. Java基础面试:Java中的方法

    Java 中的方法 什么是方法 方法是 Java 中的一段可重用的代码块,用于执行特定的任务,是程序中的最小执行单元. 参数:方法可以接受一个或多个参数,这些参数是传递给方法的值,用于方法内部的逻辑运 ...

  9. Ant Design Pro项目ProTable怎么实现单元格合并效果

    前情 公司有经常需要做一些后台管理页面,我们选择了Ant Design Pro,它是基于 Ant Design 和 umi 的封装的一整套企业级中后台前端/设计解决方案. 产品效果图 最新接到的一个后 ...

  10. dfm格式初解之TTreeView

    TTreeView 的 Items.NodeData 值解析: Items.NodeData = { 0302000000200000000000000000000000FFFFFFFFFFFFFFF ...