《SQL优化面试专题及答案.》由会员分享,可在线阅读,更多相关《SQL优化面试专题及答案.(10页珍藏版)》请在金锄头文库上搜索。
1、1、一张表,里面有 ID 自增主键,当 insert 了 17 条记录之后,删除了第 15,16,17 条记录, 再把 Mysql 重启,再 insert 一条记录,这条记录的 ID 是 18 还是 15 ?(1)如果表的类型是 MyISAM,那么是 18因为 MyISAM 表会把自增主键的最大 ID 记录到数据文件里,重启 MySQL 自增主键的最大ID 也不会丢失(2)如果表的类型是 InnoDB,那么是 15InnoDB 表只是把自增主键的最大 ID 记录到内存中,所以重启数据库或者是对表进行OPTIMIZE 操作,都会导致最大 ID 丢失2、Mysql 的技术特点是什么?Mysql 数
2、据库软件是一个客户端或服务器系统,其中包括:支持各种客户端程序和库的多线程 SQL 服务器、不同的后端、广泛的应用程序编程接口和管理工具。3、Heap 表是什么?HEAP 表存在于内存中,用于临时高速存储。BLOB 或 TEXT 字段是不允许的只能使用比较运算符=,=,= HEAP 表不支持 AUTO_INCREMENT索引不可为 NULL4、Mysql 服务器默认端口是什么?Mysql 服务器的默认端口是 3306。5、与 Oracle 相比,Mysql 有什么优势?Mysql 是开源软件,随时可用,无需付费。Mysql 是便携式的带有命令提示符的 GUI。使用 Mysql 查询浏览器支持管
3、理6、如何区分 FLOAT 和 DOUBLE? 以下是 FLOAT 和 DOUBLE 的区别:浮点数以 8 位精度存储在 FLOAT 中,并且有四个字节。浮点数存储在 DOUBLE 中,精度为 18 位,有八个字节。7、区分 CHAR_LENGTH 和 LENGTH?CHAR_LENGTH 是字符数,而 LENGTH 是字节数。Latin 字符的这两个数据是相同的,但是对于 Unicode 和其他编码,它们是不同的。8、请简洁描述 Mysql 中 InnoDB 支持的四种事务隔离级别名称,以及逐级之间的区别?SQL 标准定义的四个隔离级别为:read uncommited :读到未提交数据re
4、ad committed:脏读,不可重复读repeatable read:可重读serializable :串行事物9、在 Mysql 中 ENUM 的用法是什么?ENUM 是一个字符串对象,用于指定一组预定义的值,并可在创建表时使用。Create table size(name ENUM(Smail,Medium,Large);10、如何定义 REGEXP?REGEXP 是模式匹配,其中匹配模式在搜索值的任何位置。11、CHAR 和 VARCHAR 的区别? 以下是 CHAR 和 VARCHAR 的区别:CHAR 和 VARCHAR 类型在存储和检索方面有所不同CHAR 列长度固定为创建表时
5、声明的长度,长度值范围是 1 到 255当 CHAR 值被存储时,它们被用空格填充到特定长度,检索 CHAR 值时需删除尾随空格。12、列的字符串类型可以是什么? 字符串类型是:SET BLOB ENUM CHAR TEXTVARCHAR13、如何获取当前的 Mysql 版本?SELECT VERSION();用于获取当前 Mysql 的版本。14、Mysql 中使用什么存储引擎?存储引擎称为表类型,数据使用各种技术存储在文件中。技术涉及:Storage mechanism Locking levels IndexingCapabilities and functions.15、Mysql 驱
6、动程序是什么?以下是 Mysql 中可用的驱动程序:PHP 驱动程序JDBC 驱动程序ODBC 驱动程序CWRAPPERPYTHON 驱动程序PERL 驱动程序RUBY 驱动程序CAP11PHP 驱动程序A5.mxj16、TIMESTAMP 在 UPDATE CURRENT_TIMESTAMP 数据类型上做什么?创建表时 TIMESTAMP 列用 Zero 更新。只要表中的其他字段发生更改,UPDATECURRENT_TIMESTAMP 修饰符就将时间戳字段更新为当前时间。17、主键和候选键有什么区别?表格的每一行都由主键唯一标识,一个表只有一个主键。主键也是候选键。按照惯例,候选键可以被指定
7、为主键,并且可以用于任何外键引用。18、如何使用 Unix shell 登录 Mysql? 我们可以通过以下命令登录:mysql dir/bin/mysql -h hostname -u19、 myisamchk 是用来做什么的?它用来压缩 MyISAM 表,这减少了磁盘或内存使用。20、MYSQL 数据库服务器性能分析的方法命令有哪些?21、如何控制 HEAP 表的最大尺寸?Heal 表的大小可通过称为 max_heap_table_size 的 Mysql 配置变量来控制。22、MyISAM Static 和 MyISAM Dynamic 有什么区别?在 MyISAMStatic 上的所有
8、字段有固定宽度。动态 MyISAM 表将具有像 TEXT,BLOB 等字段,以适应不同长度的数据类型。点击这里有一套最全阿里面试题总结。MyISAM Static 在受损情况下更容易恢复。23、federated 表是什么?federated 表,允许访问位于其他服务器数据库上的表。24、如果一个表有一列定义为 TIMESTAMP,将发生什么? 每当行被更改时,时间戳字段将获取当前时间戳。25、列设置为 AUTO INCREMENT 时,如果在表中达到最大值,会发生什么情况? 它会停止递增,任何进一步的插入都将产生错误,因为密钥已被使用。26、怎样才能找出最后一次插入时分配了哪个自动增量?LA
9、ST_INSERT_ID 将返回由 Auto_increment 分配的最后一个值,并且不需要指定表名称。27、你怎么看到为表格定义的所有索引? 索引是通过以下方式为表格定义的:SHOW INDEX FROM28.、LIKE 声明中的和_是什么意思?对应于 0 个或更多字符,_只是 LIKE 语句中的一个字符。29、如何在 Unix 和 Mysql 时间戳之间进行转换?UNIX_TIMESTAMP 是从 Mysql 时间戳转换为 Unix 时间戳的命令FROM_UNIXTIME 是从 Unix 时间戳转换为 Mysql 时间戳的命令30、列对比运算符是什么?在 SELECT 语句的列比较中使用
10、=,=, =,AND,OR 或 LIKE 运算符。31、我们如何得到受查询影响的行数? 行数可以通过以下代码获得:SELECT COUNT(user_id)FROM users;32、Mysql 查询是否区分大小写? 不区分SELECT VERSION(), CURRENT_DATE;SeLect version(), current_date; seleCt vErSiOn(), current_DATE;所有这些例子都是一样的,Mysql 不区分大小写。33.、LIKE 和 REGEXP 操作有什么区别?LIKE 和 REGEXP 运算符用于表示和。SELECT * FROM employ
11、ee WHERE emp_name REGEXP b; SELECT * FROM employee WHERE emp_name LIKE %b;34.、BLOB 和 TEXT 有什么区别?BLOB 是一个二进制对象,可以容纳可变数量的数据。有四种类型的 BLOB - TINYBLOBBLOBMEDIUMBLOB 和LONGBLOB它们只能在所能容纳价值的最大长度上有所不同。TEXT 是一个不区分大小写的 BLOB。四种 TEXT 类型TINYTEXTTEXTMEDIUMTEXT 和LONGTEXT它们对应于四种 BLOB 类型,并具有相同的最大长度和存储要求。BLOB 和 TEXT 类型之
12、间的唯一区别在于对 BLOB 值进行排序和比较时区分大小写,对 TEXT值不区分大小写。35、mysql_fetch_array 和 mysql_fetch_object 的区别是什么? 以下是 mysql_fetch_array 和 mysql_fetch_object 的区别:mysql_fetch_array() - 将结果行作为关联数组或来自数据库的常规数组返回。mysql_fetch_object - 从数据库返回结果行作为对象。36、我们如何在 mysql 中运行批处理模式? 以下命令用于在批处理模式下运行:mysql;mysql mysql.out37、MyISAM 表格将在哪里
13、存储,并且还提供其存储格式? 每个 MyISAM 表格以三种格式存储在磁盘上:“.frm”文件存储表定义数据文件具有“.MYD”(MYData)扩展名索引文件具有“.MYI”(MYIndex)扩展名38.、Mysql 中有哪些不同的表格? 共有 5 种类型的表格:MyISAMHeap Merge INNODB ISAMMyISAM 是 Mysql 的默认存储引擎。39、ISAM 是什么?ISAM 简称为索引顺序访问方法。它是由 IBM 开发的,用于在磁带等辅助存储系统上存储和检索数据。40、InnoDB 是什么?lnnoDB 是一个由 Oracle 公司开发的 Innobase Oy 事务安全
14、存储引擎。41、Mysql 如何优化 DISTINCT?DISTINCT 在所有列上转换为 GROUP BY,并与 ORDER BY 子句结合使用。1SELECT DISTINCT t1.a FROM t1,t2 where t1.a=t2.a;42、如何输入字符为十六进制数字?如果想输入字符为十六进制数字,可以输入带有单引号的十六进制数字和前缀(X),或者只用(Ox)前缀输入十六进制数字。如果表达式上下文是字符串,则十六进制数字串将自动转换为字符串。43、如何显示前 50 行?在 Mysql 中,使用以下代码查询显示前 50 行: SELECT*FROMLIMIT 0,50;44、可以使用多
15、少列创建索引?任何标准表最多可以创建 16 个索引列。45 、 NOW() 和 CURRENT_DATE() 有 什 么 区 别 ? NOW()命令用于显示当前年份,月份,日期,小时,分钟和秒。CURRENT_DATE()仅显示当前年份,月份和日期。46、什么样的对象可以使用 CREATE 语句创建? 以下对象是使用 CREATE 语句创建的:DATABASE EVENT FUNCTION INDEXPROCEDURE TABLE TRIGGER USERVIEW47、Mysql 表中允许有多少个 TRIGGERS?在 Mysql 表中允许有六个触发器,如下: BEFORE INSERTAFTER I