Linux下mysql的二进制安装与部分练习
鲸英训练营 0531作业
一、单选题(每题5分,总分25分)
- 1. 在MySQL中,一般使用( A )语句来指定一个已有数据库作为当前工作数据库。
A.USED
B.USE
C.BEGIN
D.GO
- 在关系型数据库中,( B )能够唯一标识一个记录的属性或属性的组合。
A.属性
B.主码
C.列
D.元组
- 在MySQL的安装过程中,若选用"启用TCP/IP网络",则MySQL会默认选用的端口号是( B )
A.1433
B.3306
C.52
D.1587
- SQL语句"delete from student"的作用是(A )
A.删除当前数据库中student表内的所有行
B.删除当前数据库中整个student表,包括表结构
C.由于没有where子句,因此不删除任何数据
D.删除当前数据库中student表内的当前行
- 以下哪一个属于DML语句?( C )
- Create
- Drop
- Delete
- 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分)
环境变量更改:
直接启动:
重启后:
远程登录并创建数据库成功: