面试题:float,double和decimal的区别
1.float单精度浮点类型,double双精度浮点类型,decimal称为定点类型
2.double的范围和decimal一样,其范围大于float
3.decimal的整数位和小数位分开存放,精度高,占用空间大
面试题:char和varchar的区别
1.char称为定长字符串,每个存储空间都一样,如果存储的字符小于指定个数会用空格在右侧补齐,取出时会自动去掉右侧补的空格
2.varchar称为变长字符串,每个存储空间不一样,会预留1到2个字节存储字符串长度信息,如果存储的字符串右侧有空格,取出时不会被去掉
3.查询时,char的速度大于varchar
4.从空间利用率来说,char类型可以达到100%,对于varchar来说不会达到100%
5.Char类型最多可以存储255个字符,对于varchar来说最多可以存放65535个字符
面试题:谈一谈你对null的理解
1.null和任何运算符运算的结果都为null
2.查询为null的数据时不能使用=,应该使用is null或者is not null
select*from t3 where username = null; #错误写法
select*from t3 where username is null; #正确写法
3.统计数据时,不会统计为null的行
select count(*)from t3; #此时不会统计为null的行
4.可以使用ifnull()函数把null转换成指定的值
select 3+null; #null
select 3+ifnull(null,0); #3
5.表中有null时会影响查询效率
6.Sum函数可以自动把为空的列转换成0
面试题:
mysql语句的书写顺序:where->group by->having->order by->limit
mysql语句的执行顺序:from->on->join->where->group by->having->select->order by->limit
面试题:myisam和innodb的区别?
1.myisam效率高,安全性差
2.innodb效率低,安全性好
3.myisam不支持外键,innodb支持外键
4.myisam不支持事务,innodb支持事务
5.myisam不支持行级锁,支持表锁,innodb支持行级锁
面试题:事务的特征(ACID)张三给李四转账的例子
1.原子性(A):事务中多个sql不可分割,要么同时成功,要么同时失败回滚数据
2.一致性(C):事务执行前后,数据在逻辑上要保持一致
3.隔离性(I):在并发操作中事物之间是被隔离的,
4.持久性(D):一旦事务提交成功则无法回滚
面试题:谈一谈如何优化sql
为什么要优化sql,有哪些情况即使添加索引,也有部分不走索引的情况
1.使用order by时不会走索引,一般和where一起使用
select age from person order by age #不走索引
select age from person where age > 0 order by age #走索引
2.尽量避免字段为null,会降低查询效率
3.尽量避免!=或者<>,查询范围过大
4.尽量让or前后的字段都是索引,如果一个有索引一个没有索引,会进行全表扫描
5.尽量避免使用 in(1,2,3),最好使用between 1 and 3
6.尽量避免模糊查询
7.尽量避免where子句中对条件进行运算或者使用函数(where id > 10*2或者where id>floor(2.3))
8.尽量不给重复率比较高的字段添加索引(加了和没加一样)
9.一张表上的索引最好不超过6个,如果超过可能得重新设计表格
10.尽量使用数字作为列类型
11.如果字符变化很频繁,建议使用varchar不要使用char
12.不要使用select*