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轻松学公众号