首页 > 代码库 > MySQL数据库面试题

MySQL数据库面试题

最近在换工作,虽然面试的不是dba,但是一些数据库的知识还是会有问到,然后百度了一下,结合我搜到的和被问到的总结一下。

1、mysql支持事务吗?

在缺省的模式下,是自动提交的,所有的数据库更新操作都会即时提交,但是当将表类型使用innodb或bdb就可进行事务处理;

set  autocommit=0;

start transaction;

select @a:=count(id) from table1 where name=‘aa‘;

update table2 set num=@a 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数据库面试题