![8b093bc4c22266218c1f5678cebb8aee.png](https://img-blog.csdnimg.cn/img_convert/8b093bc4c22266218c1f5678cebb8aee.png)
mysql小知识
1. int(1)能限制数据的长度是一位吗?
int的长度是固定的四个字节,取值范围有符号(-2147483648,2147483647)无符号是(0,4294967295),int后面的n只是表示显示的宽度,在zerofill的情况,不足的部分显示时前面补零,超出了完整显示,所以这个n没有什么具体的用处,在使用时可以任意指定,为了表示真实,我们通常设置为10
2.decimal的长度是多少?
在要求精度很高的情景,float与double会出现数据误差,decimal类型是必须的,decimal有两个参数,decimal(M,N),长度M,表示整个数据的长度,整数部分与小数部分之和,小数部分的长度为N,那么整数部分为M-N,如果插入的数据超出这个范围,将会失败
3. datetime与timestamp如何选择?
datetime表示的时间范围为1000-9999年,而timestamp的时间范围是1970-2038年,如果自信能做到百年老店,timestamp肯定是不能用的
datetime的长度5.6版本之前是8个字节,之后是5个字节,timestamp是四个字节,如果对空间非常敏感,timestamp占用的空间少那么一点点,需要抠这一个字节码吗?
执行效率上在有索引的情况下差距不大
在排查问题时的直观上,datetime一眼就看出是哪个时间,timestamp通常表示为一个整数,需要转化
所以怎么选择了,我推荐就用datetime,直观、范围大、效率不错、空间上差距不大
4. 业务表中需要text或blob类型数据类型怎么办?
text和blob类型都是固定长度,不管有无数据,都会占用指定的空间,在生产环境中,需要把大字段放在单独的表中,用主键关联
5. varchar(n)中的n代表什么意思?
代表字符的个数,并不是占用空间的字节数
6. 可以用varchar(60000)吗?
mysql中每一行数据都有65535字节的限制,还有其他的字段需要占用空间,每个字符占用2/3个字节,编码方式不一样,所以达不到理想的长度,上述的60000当然也用不了,用提示超出长度的错误
7.emoji表情如何存储?
emoji表情看起来是字符串,是一种特殊的字符,utf-8存储会报编码错误,utf-8的超级utf8mb4可以存储,每个字符占用四个字节,要将表的编码集设置为utf8mb4,仅仅设置字段的编码集可能不生效,mysql5.7以后推荐使用utf8mb4编码集了。
8. 如何修改索引?
先删除在新建
drop index index_name on table_name;
create index index_name on table_name(column);
9.主键索引与唯一索引谁的效率高?
mysql的数据是按照主键索引组织的,如果指定了主键就使用指定的主键,如果没有指定主键,采用第一个唯一索引作为索引内部主键索引,如果不存在唯一索引,mysql自动生成一个主键作为索引组织,这个索引是聚集索引,对于其他的非聚集索引来说,索引的B+树叶子节点存储的是主键索引的主键。在效率上,主键索引效率与没有主键的第一个唯一索引相同,比其他索引的效率高。
10.在建索引的过程中,哪些列应该被索引了?
被查询作为条件的列;用于被关联表的列;用于排序分组的列;
11. 哪些字段不必要创建索引?
选择性低的字段;很少查询的列;大数据类型字段;含null值的字段;
12. 哪些索引会失效?
扫描的记录数超过全表的30%;联合索引中第一个条件不是最左索引列;模糊查询中左侧使用了%;使用了函数运算;使用了or/!=/not null;
13.事物的特性是什么?
ACID的表示的是原子性(Atomicity)、一致性(consistency)、隔离性(isolation)、持久性(Durability)
14. truncate与delete的区别?
truncate删除全表的内容,效率比较高,连带自增计数也会被重置;delete可以指定删除的数据,删除后会出现存储碎片,效率比较低
15.innoDB的事物隔离级别有哪些?各有什么特点?
未提交读(read uncommitted) 读到别人未提交的,会产生脏读
提交读(read committed)解决了脏读问题,会产生幻读
可重复读(repeatable read), 解决脏读与幻读,mysql的默认隔离级别,采用MVCC多版本并发控制解决幻读的问题,同时使用了间隙锁结合行级锁,会锁定一个上下区间;
串行化(serializable)串行操作,不会产生问题,但是效率比较低,不能很好的利用多核cpu