MySQL数据库面试题

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

一、mysql支持事务吗?面试

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

set  autocommit=0;数据库

start transaction;编程

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

update table2 set num=@a where id='123'安全

二、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和内存。缺点:不支持热备份系统正常运行时的备份),安全系统复杂而非标准;

三、varchar 和char 区别

char是一种固定长度类型,varchar是一种可变长度类型

四、数据库事务种类:

隔离性、持续性、一致性、原子性

五、innodb中四种事务的隔离级别

read uncommited :读取未提交,读取未提交的数据(脏读);实际应用少

read committed:读取提交内容,大多数据库默认的隔离级别

repeatable read,可重复读(mysql 默认的事务隔离级别),多线程就显示出来了,多个

实例在并发读取数据的时候,会看到一样的数据行,但另外一个事务已经插入了新数据(幻读),加上间隙锁解决幻读。

serializable:可串行化,强制事务排序(每一个读的数据上加上共享锁,可是可能致使超时和锁竞争)

六、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支持

七、mysql 数据表修复及数据恢复

服务器忽然断电,强制关机以前没有关闭mysql服务。

使用myisamchk来修复

1)将mysql服务中止

2)cmd-进入mysql的bin目录下

3)执行myisamchk -recover 数据库所在的路径/*.myi

使用 repair table 或者optimize table

八、mysql记录货币用什么字段

NUMERIC和DECIMAL类型被MySQL实现为一样的类型,能够指定小数点的位数,当超过指定位数的时候会四舍五入

九、drop、delete、truncate区别

drop直接删表,truncate  删除数据,所占的空间(表和索引)也会删除,入自动增长的id删除以后从1开始,不可与where

delete 能够与where,可是不删除所占空间

十、索引

优势:有效的使用能够增快查询速度

缺点:增长数据库存储空间,在插入和修改是时候索引随之变更,花费更长时间

普通索引:不肯定是不是可重复的,可用普通索引,惟一所引,肯定是不可重复的好比身份证号,组合索引,多个索引一块儿建立,注意最左原则

十一、数据库优化:

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、服务器硬件优化

相关文章
相关标签/搜索