MySQL面试题及答案

  1. Mysql 中有几种锁?
1.表级锁:开销小,加锁快;不会出现死锁;锁的粒度大,发生锁冲突的概率最小,并发度最低
2.行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最大,并发度最高
3.页面锁:开销和加锁时间介于表锁和行锁之间;会出现死锁;锁定粒度介于表锁与行锁之间,并发度一般
  1. 简述在 MySQL 数据库中 MyISAM 和 InnoDB 的区别
MyISAM:
不支持事务,但是每次查询都是原子的
支持表级锁,即每次操作都是对整个表加锁
存储总行数
InnoDB:
支持ACID的事务,支持事务的四种隔离级别
支持行级锁及外键约束,因此可以支持并发访问
不存储总行数
  1. MySQL 中 InnoDB 支持的四种事务隔离级别名称,以及之间的区别
1. Read Uncommitted(读取未提交内容) 
>> 在该隔离级别,所有事 务都可以看到其他未提交事务的执行结果。本隔离级别很少用于实际应 用,因为它的性能也不比其他级别好多少。读取未提交的数据,也被称 之为脏读(Dirty Read)。
2. Read Committed(读取提交内容) 
>> 这是大多数数据库系统的默 认隔离级别(但不是 MySQL 默认的)。它满足了隔离的简单定义:一 个事务只能看见已经提交事务所做的改变。这种隔离级别也支持所谓的 不可重复读(Nonrepeatable Read),因为同一事务的其他实例在该 实例处理其间可能会有新的 commit,所以同一 select 可能返回不同结 果。
3. Repeatable Read(可重读) 
>> 这是 MySQL 的默认事务隔离级 别,它确保同一事务的多个实例在并发读取数据时,会看到同样的数据 行。不过理论上,这会导致另一个棘手的问题:幻读(Phantom Read)。简单的说,幻读指当用户读取某一范围的数据行时,另一个事 务又在该范围内插入了新行,当用户再读取该范围的数据行时,会发现 有新的“幻影” 行。InnoDB 和 Falcon 存储引擎通过多版本并发控制 (MVCC,Multiversion Concurrency Control 间隙锁)机制解决了 该问题。注:其实多版本只是解决不可重复读问题,而加上间隙锁(也 就是它这里所谓的并发控制)才解决了幻读问题。 
4. Serializable(可串行化)
>> 这是最高的隔离级别,它通过强制事务 排序,使之不可能相互冲突,从而解决幻读问题。简言之,它是在每个 读的数据行上加上共享锁。在这个级别,可能导致大量的超时现象和锁 竞争。 
  1. CHAR 和 VARCHAR 的区别?
char列长度固定为创建表时声明的长度,长度范围是1到255,当CHAR值被存储时,它们被空格填充到特定长度,检索CHAR值时需要删除尾随空格
  1. 如果有一个表的一列定义为 timestamp,将会发生什么?
每当行被更改时,时间戳字段将会获取当前时间戳
  1. 列设置为 auto_Increament 时,如果在表中达到最大值,会发生什么情况?
它会停止增长,任何进一步的插入都会产生错误,因为密钥已经被使用,last_insert_id将会返回由 auto_Increament分配的最后一个值,并且不需要指定表名称
  1. like 声明中的%和_是什么意思?
%对应0个或多个字符,_只是like语句中的一个字符
  1. blob 和 text 有什么区别?
blob是一个二进制对象,可以容纳可变数量的数据,Text是一个不区分大小写的blob
  1. 如何显示前50行?
select * from limit 0,50;
  1. 可以使用多少列创建索引?
任何标准表最多可以创建16给索引列
  1. now() 和 current_date() 有什么区别?
now()命令用于显示当前年份,月份,日期,小时,分钟和秒
current_date()仅显示当前年份,月份和日期
  1. MySQL有关权限的表有哪几个?
MySQL服务器通过权限表来控制用户对数据的访问,权限表存放在MySQL数据库里,有mysql_install_db脚本初始化。这些权限表分别为user,db,table_priv,columns_priv和host。
  1. 数据库三范式是什么?
1.第一范式(1NF):字段具有原子性,不可再分。(所有关系型数据库系 统都满足第一范式数据库表中的字段都是单一属性的,不可再分) 2. 第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足 
2.第二范式(2NF)必须先满足第一范式(1NF)。要求数据库表中的每 个实例或行必须可以被惟一地区分。通常需要为表加上一个列,以存储 各个实例的惟一标识。这个惟一属性列被称为主关键字或主键。 
3. 满足第三范式(3NF)必须先满足第二范式(2NF)。简而言之,第三 范式(3NF)要求一个数据库表中不包含已在其它表中已包含的非主关 键字信息。 
>所以第三范式具有如下特征: 
>>1. 每一列只有一个 值
>>2. 每一行都能区分。
>>3. 每一个表都不包含其他表已经包含 的非主关键字信息。 
  1. 请简述常用的索引有哪些种类?
1. 普通索引: 即针对数据库表创建索引 
2. 唯一索引: 与普通索引类似,不同的就是:MySQL 数据库索引列的值 必须唯一,但允许有空值 
3. 主键索引: 它是一种特殊的唯一索引,不允许有空值。一般是在建表的 时候同时创建主键索引 
4. 组合索引: 为了进一步榨取 MySQL 的效率,就要考虑建立组合索引。 即将数据库表中的多个字段联合起来作为一个组合索引。 
  1. mysql 中 myisam 与 innodb 的区别?
1. 事务支持 
> MyISAM :强调的是性能,每次查询具有原子性 , 其执行数 度比 InnoDB 类型更快,但是不提供事务支持。 
> InnoDB:提供事 务支持事务,外部键等高级数据库功能。 具有事务(commit)、回滚 (rollback)和崩溃修复能力(crash recovery capabilities)的事务安全 (transaction-safe (ACID compliant))型表。
2. InnoDB 支持行级锁,而 MyISAM 支持表级锁. 
> 用户在操作 myisam 表时,select,update,delete,insert 语句都会给表自动 加锁,如果加锁以后的表满足 insert 并发的情况下,可以在表的尾部插 入新的数据。
3. InnoDB 支持 MVCC, 而 MyISAM 不支持
4. InnoDB 支持外键,而 MyISAM 不支持 
5. 表主键 
> MyISAM :允许没有任何索引和主键的表存在,索引都是保 存行的地址。
> InnoDB:如果没有设定主键或者非空唯一索引,就会 自动生成一个 6 字节的主键(用户不可见),数据是主索引的一部分,附 加索引保存的是主索引的值。 
6. InnoDB 不支持全文索引,而 MyISAM 支持。 
7. 可移植性、备份及恢复 
> MyISAM :数据是以文件的形式存储,所以 在跨平台的数据转移中会很方便。在备份和恢复时可单独针对某个表进 行操作。 
> InnoDB:免费的方案可以是拷贝数据文件、备份 binlog,或者用 mysqldump,在数据量达到几十 G 的时候就相对痛 苦了 
8. 存储结构 
> MyISAM :每个 MyISAM 在磁盘上存储成三个文件。第一 个文件的名字以表的名字开始,扩展名指出文件类型。 .frm 文件存储表 定义。数据文件的扩展名为 .MYD (MYData) 。索引文件的扩展名 是 .MYI (MYIndex) 。 
> InnoDB:所有的表都保存在同一个数据文件 中(也可能是多个文件,或者是独立的表空间文件),InnoDB 表的大 小只受限于操作系统文件的大小,一般为 2GB
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值