面试题: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*