MySql面试题

1、一张表里面有ID自增主键,当insert了17条记录之后,删除了第15,16,17条记录,再把mysql重启,再insert一条记录,这条记录的ID是18还是15 ? 

这个要看Mysql表的类型 我现在知道的有两种,一种是MyISAM,另一种是InnoDB 

MYSQL默认的就是InnoDB 
InnoDB是把表的主键最大值放到内存里面,所以MYSQL重启之后就会丢失(在WINDOW下,这是MYSQL默认的) 
MyISAM是把表的主键最大值放到文件里面,所以MYSQL重启之后不会丢失

所有列都有缺省值

2、mysql的技术特点是什么?

  •  它使用的核心线程是完全多线程,支持多处理器。
  • 它通过一个高度优化的类库实现SQL函数库并像他们能达到的一样快速,通常在查询初始化后不该有任何内存分配。没有内存漏洞
  • MySQL可以工作在不同的平台上。支持C、C++、Java、Perl、PHP、Python和TCL API

3、Heap表是什么?

 内存表,就是放在内存中的表

内存表的特性

    1. 内存表的表定义是存放在磁盘上的,扩展名为.frm, 所以重启不会丢失。
    2. 内存表的数据是存放在内存中的,所以重启会丢失数据。
    3. 内存表使用一个固定的记录长度格式。
    4. 内存表不支持BLOB或TEXT列,比如varchar与text字段就不会被支持。
    5. 内存表支持AUTO_INCREMENT列和对可包含NULL值的列的索引(网上大多说不支持,这是错误的)。内存表支持大于(>) 小于( <)操作,网上也说不支持。
    6. mysql重启后,主键、自增、索引仍然存在,只是数据丢失。这也是对网上的一些错误文字纠正。
    7. 内存表表在所有客户端之间共享(就像其它任何非TEMPORARY表)。
    8. MEMORY存储引擎执行HASH和BTREE索引。你可以通过添加一个如下所示的USING子句为给定的索引指定一个或另一个:

4、mysql服务器默认端口是什么?

 3306(Oracle:1521)

5、与Oracle相比,mysql有什么优势?

  •  中小型数据库,市场占有率高
  • Mysql有主键自增长,Oracle没有
  • Mysql占有空间小

6、如何区分FLOAT和DOUBLE?

 FLOAT和DOUBLE在不指定精度时,默认会按照实际的精度来显示,而DECIMAL在不指定精度时,默认整数为10,小数为0

7、区分CHAR_LENGTH和LENGTH?

一、char_length(str)

1、返回值为字符串str 的长度,长度的单位为字符,一个多字节字符算作一个单字符

2、不管汉字还是数字或者是字母都算是一个字符

3、任何编码下,多字节字符都算是一个字符

二、length(str)

1、utf8编码下,一个汉字是算三个字符,一个数字或字母算一个字符。

2、其他编码下,一个汉字算两个字符, 一个数字或字母算一个字符。

8、请简洁描述mysql中InnoDB支持的四种事务隔离级别名称,以及逐级之间的区别?

SQL标准定义的四个隔离级别为:

read uncommited

read committed

repeatable read

serializable

Read Uncommitted(读取未提交内容)

      在该隔离级别,所有事务都可以看到其他未提交事务的执行结果。本隔离级别很少用于实际应用,因为它的性能也不比其他级别好多少。读取未提交的数据,也被称之为脏读(Dirty Read)。

Read Committed(读取提交内容)

      这是大多数数据库系统的默认隔离级别(但不是MySQL默认的)。它满足了隔离的简单定义:一个事务只能看见已经提交事务所做的改变。这种隔离级别也支持所谓的不可重复读(Nonrepeatable Read),因为同一事务的其他实例在该实例处理其间可能会有新的commit,所以同一select可能返回不同结果。

Repeatable Read(可重读)

      这是MySQL的默认事务隔离级别,它确保同一事务的多个实例在并发读取数据时,会看到同样的数据行。不过理论上,这会导致另一个棘手的问题:幻读(Phantom Read)。简单的说,幻读指当用户读取某一范围的数据行时,另一个事务又在该范围内插入了新行,当用户再读取该范围的数据行时,会发现有新的“幻影” 行。InnoDB和Falcon存储引擎通过多版本并发控制(MVCC,Multiversion Concurrency Control 间隙锁)机制解决了该问题。注:其实多版本只是解决不可重复读问题,而加上间隙锁(也就是它这里所谓的并发控制)才解决了幻读问题。

Serializable(可串行化)

这是最高的隔离级别,它通过强制事务排序,使之不可能相互冲突,从而解决幻读问题。简言之,它是在每个读的数据行上加上共享锁。在这个级别,可能导致大量的超时现象和锁竞争。

       

对于不同的事务,采用不同的隔离级别分别有不同的结果。不同的隔离级别有不同的现象。主要有下面3种现在:

1、脏读(dirty read):一个事务可以读取另一个尚未提交事务的修改数据。

2、非重复读(nonrepeatable read):在同一个事务中,同一个查询在T1时间读取某一行,在T2时间重新读取这一行时候,这一行的数据已经发生修改,可能被更新了(update),也可能被删除了(delete)。

3、幻像读(phantom read):在同一事务中,同一查询多次进行时候,由于其他插入操作(insert)的事务提交,导致每次返回不同的结果集。

不同的隔离级别有不同的现象,并有不同的锁定/并发机制,隔离级别越高,数据库的并发性就越差,4种事务隔离级别分别表现的现象如下表:

隔离级别 脏读 非重复读 幻像读
read uncommitted 允许 允许 允许
read committed   允许 允许
repeatable read     允许
serializable      

9、在mysql中ENUM的用法是什么?

10、如何定义REGEXP?

 应用示例,查找用户表中Email格式错误的用户记录:

SELECT * 
FROM users
WHERE email NOT REGEXP '^[A-Z0-9._%-]+@[A-Z0-9.-]+.[A-Z]{2,4}$'

11、CHAR和VARCHAR的区别?

  •  CHAR的长度是固定的,而VARCHAR2的长度是可以变化的
  • CHAR的效率比VARCHAR2的效率稍高

12、列的字符串类型可以是什么?

 在SQL中,将字符串类型分为了六类:char,varchar,text,blob,enum和set。

13、如何获取当前的mysql版本?

select version()

14、mysql中使用什么存储引擎?

(1):MyISAM存储引擎:不支持事务、也不支持外键,优势是访问速度快,对事务完整性没有 要求或者以select,insert为主的应用基本上可以用这个引擎来创建表

支持3种不同的存储格式,分别是:静态表;动态表;压缩表

静态表:表中的字段都是非变长字段,这样每个记录都是固定长度的,优点存储非常迅速,容易缓存,出现故障容易恢复;缺点是占用的空间通常比动态表多(因为存储时会按照列的宽度定义补足空格)ps:在取数据的时候,默认会把字段后面的空格去掉,如果不注意会把数据本身带的空格也会忽略。

动态表:记录不是固定长度的,这样存储的优点是占用的空间相对较少;缺点:频繁的更新、删除数据容易产生碎片,需要定期执行OPTIMIZE TABLE或者myisamchk-r命令来改善性能

压缩表:因为每个记录是被单独压缩的,所以只有非常小的访问开支

(2)InnoDB存储引擎*

该存储引擎提供了具有提交、回滚和崩溃恢复能力的事务安全。但是对比MyISAM引擎,写的处理效率会差一些,并且会占用更多的磁盘空间以保留数据和索引。 
InnoDB存储引擎的特点:支持自动增长列,支持外键约束

(3):MEMORY存储引擎

Memory存储引擎使用存在于内存中的内容来创建表。每个memory表只实际对应一个磁盘文件,格式是.frm。memory类型的表访问非常的快,因为它的数据是放在内存中的,并且默认使用HASH索引,但是一旦服务关闭,表中的数据就会丢失掉。 
MEMORY存储引擎的表可以选择使用BTREE索引或者HASH索引,两种不同类型的索引有其不同的使用范围

Hash索引优点: 
Hash 索引结构的特殊性,其检索效率非常高,索引的检索可以一次定位,不像B-Tree 索引需要从根节点到枝节点,最后才能访问到页节点这样多次的IO访问,所以 Hash 索引的查询效率要远高于 B-Tree 索引。 
Hash索引缺点: 那么不精确查找呢,也很明显,因为hash算法是基于等值计算的,所以对于“like”等范围查找hash索引无效,不支持;

Memory类型的存储引擎主要用于哪些内容变化不频繁的代码表,或者作为统计操作的中间结果表,便于高效地对中间结果进行分析并得到最终的统计结果,。对存储引擎为memory的表进行更新操作要谨慎,因为数据并没有实际写入到磁盘中,所以一定要对下次重新启动服务后如何获得这些修改后的数据有所考虑。

(4)MERGE存储引擎

Merge存储引擎是一组MyISAM表的组合,这些MyISAM表必须结构完全相同,merge表本身并没有数据,对merge类型的表可以进行查询,更新,删除操作,这些操作实际上是对内部的MyISAM表进行的。

15、mysql驱动程序是什么?

16、TIMESTAMP在UPDATE CURRENT_TIMESTAMP数据类型上做什么?

 在创建新记录的时候把这个字段设置为0,以后修改时刷新它 

17、主键和候选键有什么区别?

a.超键:在关系模式中,能唯一标识元组的属性集称为超键。
b.候选键 :如果一个属性集能唯一标识元组,且有不包含多余属性,那么这个属性集称为候选键;也即:候选键是没有多余属性的超键。
那么超键可以看作是带有其他有多余属性的候选键,也即候选键带上任意个其他属性可被视为超键。
c.主键:关系模式中用户正在使用的候选键称主键(primary key)。一般,如不加说明,键是指主键。

18、如何使用Unix shell登录mysql?

19、 myisamchk是用来做什么的?

20、mysql数据库服务器性能分析的方法命令有哪些?

21、如何控制HEAP表的最大尺寸?

22、MyISAM Static和MyISAM Dynamic有什么区别?

23、federated表是什么?

24、如果一个表有一列定义为TIMESTAMP,将发生什么?

25、列设置为AUTO INCREMENT时,如果在表中达到最大值,会发生什么情况?

26、怎样才能找出最后一次插入时分配了哪个自动增量?

27、你怎么看到为表格定义的所有索引?

28、LIKE声明中的%和_是什么意思?

29、如何在Unix和mysql时间戳之间进行转换?

30、列对比运算符是什么?

31、我们如何得到受查询影响的行数?

32、mysql查询是否区分大小写?

33、LIKE和REGEXP操作有什么区别?

34、BLOB和TEXT有什么区别?

35、mysql_fetch_array和mysql_fetch_object的区别是什么?

36、我们如何在mysql中运行批处理模式?

37、MyISAM表格将在哪里存储,并且还提供其存储格式?

38、mysql中有哪些不同的表格?

39、ISAM是什么?

40、InnoDB是什么?

41、mysql如何优化DISTINCT?

42、如何输入字符为十六进制数字?

43、如何显示前50行?

44、可以使用多少列创建索引?

45、NOW()和CURRENT_DATE()有什么区别?

46、什么样的对象可以使用CREATE语句创建?

47、mysql表中允许有多少个TRIGGERS?

48、什么是非标准字符串类型?

49、什么是通用SQL函数?

50、解释访问控制列表

51、mysql支持事务吗?

52、mysql里记录货币用什么字段类型好?

53、mysql数据表在什么情况下容易损坏?

54、mysql有关权限的表都有哪几个?

55、mysql中有哪几种锁?

原文地址:https://www.cnblogs.com/zyxiaohuihui/p/8191483.html