Linux下mysql的二进制安装与部分练习

鲸英训练营 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分)

 

 

 

 

 

 

环境变量更改:

直接启动:

 

 

 

 

重启后:

 

 

 

 

 

 

 

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

 

不积跬步,无以至千里;不积小流,无以成江海。
posted @ 2021-07-26 18:11  小白冲  阅读(11)  评论(0编辑  收藏  举报