MySQL⾯试题及答案
1. Mysql 中有⼏种锁?
1.表级锁:开销⼩,加锁快;不会出现死锁;锁的粒度⼤,发⽣锁冲突的概率最⼩,并发度最低
2.⾏级锁:开销⼤,加锁慢;会出现死锁;锁定粒度最⼩,发⽣锁冲突的概率最⼤,并发度最⾼
3.页⾯锁:开销和加锁时间介于表锁和⾏锁之间;会出现死锁;锁定粒度介于表锁与⾏锁之间,并发度⼀般
2. 简述在 MySQL 数据库中 MyISAM 和 InnoDB 的区别
MyISAM:
不⽀持事务,但是每次查询都是原⼦的
⽀持表级锁,即每次操作都是对整个表加锁
存储总⾏数
InnoDB:
⽀持ACID的事务,⽀持事务的四种隔离级别
⽀持⾏级锁及外键约束,因此可以⽀持并发访问
不存储总⾏数
3. 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(可串⾏化)
>> 这是最⾼的隔离级别,它通过强制事务排序,使之不可能相互冲突,从⽽解决幻读问题。简⾔之,它是在每个读的数据⾏上加上共享锁。在这个级别,可能导致⼤量的超时现象和锁竞争。球铰式联轴器
4. CHAR 和 VARCHAR 的区别?
char列长度固定为创建表时声明的长度,长度范围是1到255,当CHAR值被存储时,它们被空格填充到特定长度,检索CHAR值时需要删除尾随空格
5. 如果有⼀个表的⼀列定义为 timestamp,将会发⽣什么?
每当⾏被更改时,时间戳字段将会获取当前时间戳
6. 列设置为 auto_Increament 时,如果在表中达到最⼤值,会发⽣什么情况?
它会停⽌增长,任何进⼀步的插⼊都会产⽣错误,因为密钥已经被使⽤,last_insert_id将会返回由 auto_Increament分配的最后⼀个值,并且不需要指定表名称
7. like 声明中的%和_是什么意思?
%对应0个或多个字符,_只是like语句中的⼀个字符
8. blob 和 text 有什么区别?
blob是⼀个⼆进制对象,可以容纳可变数量的数据,Text是⼀个不区分⼤⼩写的blob
9. 如何显⽰前50⾏?自学初高中课程免费软件
select*from limit0,50;
10. 可以使⽤多少列创建索引?
任何标准表最多可以创建16给索引列
11. now() 和 current_date() 有什么区别?
now()命令⽤于显⽰当前年份,⽉份,⽇期,⼩时,分钟和秒
current_date()仅显⽰当前年份,⽉份和⽇期
12. MySQL有关权限的表有哪⼏个?
MySQL服务器通过权限表来控制⽤户对数据的访问,权限表存放在MySQL数据库⾥,有mysql_install_db脚本初始化。这些权限表分别为user,db,table_priv ,columns_priv和host。
13. 数据库三范式是什么?
select男装
1.第⼀范式(1NF):字段具有原⼦性,不可再分。(所有关系型数据库系统都满⾜第⼀范式数据库表中的字段都是单⼀属性的,不可再分)
2. 第⼆范式(2NF)是在第⼀范式(1NF)的基础上建⽴起来的,即满⾜
2.第⼆范式(2NF)必须先满⾜第⼀范式(1NF)。要求数据库表中的每个实例或⾏必须可以被惟⼀地区分。通常需要为表加上⼀个列,以存储各个实例的惟⼀标识。这个惟⼀属性列被称为主关键字或主键。
3. 满⾜第三范式(3NF)必须先满⾜第⼆范式(2NF)。简⽽⾔之,第三范式(3NF)要求⼀个数据库表中不包含已在其它表中已包含的⾮主关键字信息。
>所以第三范式具有如下特征:
>>1. 每⼀列只有⼀个值
>>2. 每⼀⾏都能区分。
>>3. 每⼀个表都不包含其他表已经包含的⾮主关键字信息。
14. 请简述常⽤的索引有哪些种类?
1. 普通索引: 即针对数据库表创建索引
2. 唯⼀索引: 与普通索引类似,不同的就是:MySQL 数据库索引列的值必须唯⼀,但允许有空值
3. 主键索引: 它是⼀种特殊的唯⼀索引,不允许有空值。⼀般是在建表的时候同时创建主键索引
4. 组合索引: 为了进⼀步榨取 MySQL 的效率,就要考虑建⽴组合索引。即将数据库表中的多个字段联合起来作为⼀个组合索引。
15. mysql 中 myisam 与 innodb 的区别?
1. 事务⽀持
printing的中文> MyISAM :强调的是性能,每次查询具有原⼦性 , 其执⾏数度⽐ InnoDB 类型更快,但是不提供事务⽀持。mysql面试题sql
> InnoDB:提供事务⽀持事务,外部键等⾼级数据库功能。具有事务(commit)、回滚 (rollback)和崩溃修复能⼒(crash recovery capabilities)的事务安全 (trans action-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

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。