说说Mysql中有哪几种锁
- 表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,并发度最低。
- 行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,并发度也最高。
- 页面锁:开销和加锁时间界于表锁和行锁之间;会出现死锁;并发度一般。
说几种常见的存储引擎
- MyISAM
- InnoDB(常用)
- Memory
- 其他的不常用,面试中把这三种说出来基本ok了。
说说MySQL数据库中MyISAM和InnoDB的区别
MyISAM
- 不支持事务,但是每次查询都是原子的;
- 支持表级锁,即每次操作是对整个表加锁;
- 存储表的总行数;
- 一个MYISAM表有三个文件:索引文件、表结构文件、数据文件;
- 采用菲聚集索引,索引文件的数据域存储指向数据文件的指针。辅索引与主索引基本一致,但是辅索引不用保证唯一性。
InnoDB
- 支持ACID的事务,支持事务的四种隔离级别;
- 支持行级锁及外键约束:因此可以支持写并发;
- 不存储总行数;
- 主键索引采用聚集索引
Mysql中InnoDB支持的四种事务隔离级别名称,以及区别
- read uncommited(读未提交)
- read committed(读已提交)
- repeatable read(可重复读)
- serializable(串行事物)
CHAR和VARCHAR的区别
char固定长度,varchar可伸缩长度
当数据长度固定时,用char,长度变化大时用varchar
主键和候选键有什么区别
- 表格的每一行都由主键唯一标识,一个表只有一个主键。
- 主键也是候选键。按照惯例,候选键可以被指定为主键,并且可以用于任何外键引用。
BLOB和TEXT有什么区别
- BLOB是一个二进制对象,可以容纳可变数量的数据。TEXT是一个不区分大小写的BLOB。
- BLOB和TEXT类型之间的唯一区别在于对BLOB值进行排序和比较时区分大小写,对TEXT值不区分大小写。
最多可以使用多少列创建索引
任何标准表最多可以创建16个索引列。
mysql里记录货币用什么字段类型好
NUMERIC和DECIMAL类型被Mysql实现为同样的类型,这在SQL92标准允许。他们被用于保存值,该值的准确精度是极其重要的值,例如与金钱有关的数据。当声明一个类是这些类型之一时,精度和规模的能被(并且通常是)指定。
MySQL一天十万条以上的增量,怎么优化
- 设计良好的数据库结构,允许部分数据冗余,尽量避免join查询,提高效率。
- 选择合适的表字段数据类型和存储引擎,适当的添加索引。
- mysql库主从读写分离。
- 找规律分表,减少单表中的数据量提高查询速度。
- 添加缓存机制,比如memcached,apc等。
- 不经常改动的页面,生成静态页面。
- 书写高效率的SQL。比如 SELECT * FROM TABEL 改为 SELECT field_1, field_2, field_3 FROM TABLE.