MySQL数据库面试题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL数据库面试题相关的知识,希望对你有一定的参考价值。
最近在换工作,虽然面试的不是dba,但是一些数据库的知识还是会有问到,然后百度了一下,结合我搜到的和被问到的总结一下。
1、mysql支持事务吗?
在缺省的模式下,是自动提交的,所有的数据库更新操作都会即时提交,但是当将表类型使用innodb或bdb就可进行事务处理;
set autocommit=0;
start transaction;
select @a:=count(id) from table1 where name=‘aa‘;
update table2 set [email protected] where id=‘123‘
2、mysql 与其他数据库比较的特点
mysql 是一个小型的关系型数据库管理系统,支持Linux,mac,windows等操作系统,与oracle,sqlserver,db2相比功能较弱
a、sql server 只能在Windows 上运行,开放性不够,但真正的c/s,图形化用户界面,有丰富的编程接口,与windNt完全集成,处理速度快一些,可以跨平台使用,具体的一些命令有所不同 比如分页 可以用 top
b、oracle 稳定性、安全机制,大数据方面,缺点价格昂贵,分页用 rownum
c、mysql 支持5000万条记录的数据仓库,适应所有平台,开源,缺省的桌面格式是MyISAM。MyISAM数据库 与磁盘非常地兼容而不占用过多的CPU和内存。缺点:不支持热备份系统正常运行时的备份),安全系统复杂而非标准;
3、varchar 和char 区别
char是一种固定长度类型,varchar是一种可变长度类型
4、数据库事务种类:
隔离性、持续性、一致性、原子性
5、innodb中四种事务的隔离级别
read uncommited :读取未提交,读取未提交的数据(脏读);实际应用少
read committed:读取提交内容,大多数据库默认的隔离级别
repeatable read,可重复读(mysql 默认的事务隔离级别),多线程就显示出来了,多个
实例在并发读取数据的时候,会看到同样的数据行,但另一个事务已经插入了新数据(幻读),加上间隙锁解决幻读。
serializable:可串行化,强制事务排序(每个读的数据上加上共享锁,但是可能导致超时和锁竞争)
6、mysql数据库引擎MyISAM和InnoDB的区别
修改mysql存储引擎alter table tablename type = innodb;
存储结构:
MyISAM在磁盘上存储成三个文件,.frm文件存储表定义,.myd数据文件,.myi索引文件
innodb:保存在同一数据文件中,受限于操作系统的大小,一般为2GB
存储空间:
MyISAM:可以被压缩,存储空间小,innodb需要更多的内存和存储
事务:
MyISAM强调性能,执行速度较快,但不支持事务,innodb支持事务,外部键等高级数据库功能
curd操作:
MyISAM查询较快(因为没有支持行级锁)增删慢(锁定了整个表格)
innodb在delete 不重新建表,而是一行一行的删除
外键:myisam:不支持外建,innodb支持
7、mysql 数据表修复及数据恢复
服务器突然断电,强制关机之前没有关闭mysql服务。
使用myisamchk来修复
1)将mysql服务停止
2)cmd-进入mysql的bin目录下
3)执行myisamchk -recover 数据库所在的路径/*.myi
使用 repair table 或者optimize table
8、mysql记录货币用什么字段
NUMERIC和DECIMAL类型被MySQL实现为同样的类型,可以指定小数点的位数,当超过指定位数的时候会四舍五入
9、drop、delete、truncate区别
drop直接删表,truncate 删除数据,所占的空间(表和索引)也会删除,入自动增加的id删除之后从1开始,不可与where
delete 可以与where,但是不删除所占空间
10、索引
优点:有效的使用可以增快查询速度
缺点:增加数据库存储空间,在插入和修改是时候索引随之变动,花费更长时间
普通索引:不确定是否是可重复的,可用普通索引,唯一所引,确定是不可重复的比如身份证号,组合索引,多个索引一起创建,注意最左原则
11、数据库优化:
1)sql优化
a、模糊查询,尽量避免左模糊
b、避免对索引字段进行计算操作;
避免在索引字段删使用not,<>,!=;
避免在索引字段上使用is null ,is not null;
避免在索引字段上出现类型转换
避免在索引字段上使用函数
c、尽量用union all 代替union
d、where 中避免使用 in ,not in,or 或 having
select car_no from a where EXISTS (select car_id from c where c.car_id=a.car_id)
e、不要对表做无需要的操作
2)索引优化
3)数据库优化
a、范式优化(消除冗余)
b、分表(垂直,水平)
c、服务器硬件优化
以上是关于MySQL数据库面试题的主要内容,如果未能解决你的问题,请参考以下文章