最近在换工做,虽然面试的不是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、服务器硬件优化