玖叶教程网

前端编程开发入门

MySQL 面试选择题15道(答案解释)


1、MySQL数据库四种特性,不包括()

A.原子性

B.事务性

C.一致性

D.隔离性

解释:事物的四种特性ACID,即:原子性、一致性、隔离性、持久性

2、MySQL报错error 1062 的意思是()

A.连接数据库失败,没有连接数据库的权限

B.字段值重复,入库失败

C.未定义用户对数据表的访问权限

D.删除数据库文件失败

解释:error 1062是最容易遇到的错误,即主键冲突引起的从库复制中断

3、MySQL主从架构如下:

主库 从库

192.169.1.1 192.168.1.2

需要在从库上采用mysqldump备份并记录主库binlog、Position点,需要加哪个参数(不考虑其他参数) ()

A.--master-date

B.--single-transaction

C.--dump-slave

D.--opt

解释:如果在从库备份并记录主库位点,需要加--dump-slave参数,一般添加新从库时使用,但需要注意此参数会引起备份的从库复制断开。

4、以下哪个不能有效减小从库延迟时间()

A.主库进行update操作时where后条件没有索引,添加索引

B.主库有大事物,增加缓存,异步写入数据库,减少直接对db的大量写入

C.主库并发更新写入频繁,从库设置innodb_flush_log_at_trx_commit=1及sync_binlog=1

D.数据库中存在大量myisam表,修改表结构为innodb存储引擎的表

解释:主库并发更新写入频繁,从库设置这两个参数0、0或者2、0;

innodb_flush_log_at_trx_commit=0 每秒将log_buffer刷新到logfile,并且将日志同步刷新到磁盘。该模式下,在事务提交的时候,不会主动触发写入磁盘的操作;

innodb_flush_log_at_trx_commit=1 每次commit将log_buffer刷新到logfile,并且将日志同步刷新到磁盘;

innodb_flush_log_at_trx_commit=2 每次commit将刷新到log_buffer,但是flush(刷到磁盘)操作并不会同时进行,每秒将日志刷新到磁盘;

sync_binlog=0 像操作系统刷其他文件的机制一样,MySQL不会同步到磁盘中去而是依赖操作系统来刷新binary log。

sync_binlog=1 MySQL在每写N次二进制日志binary log时,会使用fdatasync()函数将它的写二进制日志binary log同步到磁盘中去。如果启用了autocommit,那么每一个语句statement就会有一次写操作;否则每个事务对应一个写操作。

5、表test(a int,b int,time date)涉及以下3条sql:

select * from test where a=1 and b=1;

select * from test where b=1;

select * from test where b=1 order by time desc;

只建一个索引,如何建最优()

A.idx_ab(a,b)

B.idx_ba(b,a)

C.idx_abtime(a,b,time)

D.idx_btime(b,time)

解释:在有oracle by排序时,排序字段必须要有索引,第一条sql创建idx_ab(a,b)最优,但是第二条sql用不到,而idx_ba(b,a)索引排序用不到,综上idx_btime(b,time)最优

6、MySQL中InnoDB引擎的行锁是通过加在什么上完成(或称实现)的:()

A.数据块

B.索引值

解释:索引值,行级锁锁的是这条记录

7、关于MySQL权限说法正确的是()

A.管理权限(如super, process, file等)不能够指定某个数据库,on后面必须跟 *.*

B.如需要truncate权限只需授予drop权限

C.super权限允许用户终止任何查询,但不允许修改全局变量的set语句

D.建立一个用户时,需要单独授予usage连接权限

解释:truncate权限需要create和drop权限;super权限允许用户终止任何查询;修改全局变量的SET语句建立一个用户,就会自动授予其usage权限(默认授予),无需再单独授予。

8、关于select count(*)和select count(1)以及select count(column)区别,说法错误的是()

A.如果表沒有主键, 那么count(1)比count(*)快

B.如果表有主键,那主键作为count的条件时候count(主键)最快

C.如果表没有主键,只有一个column的话,那count(column)最快

D.count(*)跟count(1)的结果一样,都包括对NULL的统计,而count(column)是不包括NULL的统计

解释:如果表没有主键,只有一个column的话,那count(*)最快

9、使用SQL语句进行分组检索时,为了去掉不满足条件的分组,应当()

A.使用WHERE子句

B.在GROUP BY后面使用HAVING子句

C.先使用WHERE子句,再使用HAVING子句

D.先使用HAVING子句,再使用WHERE子句

解释:GROUP BY HAVING分组后过滤固定格式

10、关于SQL优化,以下说明哪个是错误的()

A.类似分页功能的SQL,建议先用主键关联,然后返回结果集,效率会高很多

B.通常情况下,join的性能比较差,建议改造成子查询写法

C.多表联接查询时,关联字段类型尽量一致,并且都要有索引

D.尽可能不使用TEXT/BLOB类型,确实需要的话,建议拆分到子表中,不要和主表放在一起,避免SELECT* 的时候读性能太差

解释:具体SQL具体分析,不一定join就比子查询快

11、Linux操作系统下,关于MySQL大写小问题正确的是()

A.column(包括别名)、index、storedroutine和event names的大小写敏感

B.database、table(包括别名)的大小写敏感性可以通过系统参数“lower_case_table_names”来配置,等于1时大小写敏感

C.trigger、identifiers(标识符)的大小写敏感性受lower_case_table_names参数影响

D.数据敏感性:校对字符集(Collation)可通过show collation查看,其中“_ci”代表case-insensitive大小写不敏感,“_cs”代表case-sensitive大小写敏感,“_bin”的大小写敏感依赖于character的二进制编码

解释:column(包括别名)、index、storedroutine和event names不区分大小写;lower_case_table_names = 1 表名存储在磁盘是小写的,但是比较的时候是不区分大小写;.trigger、identifiers(标识符)的大小写敏感性不受lower_case_table_names参数影响

12、MySQL delete from table where后哪项操作不会释放磁盘物理空间()

A.optimize table tablename;

B.alter table tablename add column ;

C.alter table tablename engine=innodb;

D.rename table tablename to tablename_new;

解释:前3个都会in-place数据,重新插入数据,从而达到释放碎片的目的,第四个只是修改元数据

13、MySQL在RR事物隔离级别下,更新条件为索引字段,并非唯一索引(包括主键索引)时,会通过Next-Key Lock解决幻读问题。以下哪项不会加此锁()

A.Inser into…

B.Select… from… for update;

C.Update…from… where

D.Insert into T select … from S where…;

解释:Inser into…只加行级锁,RR隔离级别通过MVCC避免

14、MySQLSleep线程过多,以下操作不正确的是()

A.设置interactive_timeout参数,减小wait_timeout等待超时时间

B.php程序不要使用长连接,java程序调整连接池

C.打开mysql慢查询

D.检查应用连接情况,增加连接数

解释:Sleep线程过多,主要是程序没有发送请求,可以缩短空闲超时时间,也可以从程序端配置间隔探活,而增加连接数不会从根本达到优化效果

15、表结构如下:

CREATE TABLE `test` (

`id`int(11) NOT NULL AUTO_INCREMENT,

`uid`int(11) DEFAULT NULL,

`name`char(20) DEFAULT '0' NOT NULL,

`phone` int(11) DEFAULT NULL,

`email`varchar(20) DEFAULT NULL,

PRIMARYKEY (`id`),

KEY`idx_name` (`name`(5)),

KEY`idx_phone` (`phone`),

KEY`idx_email` (`email`)

) ENGINE=InnoDB AUTO_INCREMENT=35 DEFAULTCHARSET=utf8;

请问idx_name、idx_phone及idx_email索引长度分别是多少 ()

A.15,4,62

B.15,5,63

C.16,4,62

D.16,5,63

解释:utf8占3个字节,NULL占一个字节,not null不占用字节,int固定占用4个字节,变长字段需要记录长度占用2个字节

idx_name(`name`(5)) 虽然name(5)只对前5个字符加索引 5*3 总共15;

idx_phone(`phone`) int固定4个字节,NULL占一个字节,总共5;

idx_email (`email`) varchar(20) *3,NULL占一个字节,变长字段需要记录长度占用2个字节,总共63


BBCCD BACBB DDADB

原文: MYSQL轻松学公众号

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言