mysql面试

本文探讨了float、double、decimal等数据类型的差异,并介绍了Bigdecimal、Biginteger的操作方法。此外,还对比了nvarchar与char的不同之处,阐述了Mysql查询语句的书写与执行顺序,并深入分析了myisam与innodb存储引擎的特点。最后,本文提供了SQL优化策略及对null值处理的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. 面试题
  1. float、double和decimal区别
  1. float 单精度浮点类型 double 双精度浮点类型 decimal定点类型
  2. double的范围和decimal一样 ,大于float
  3. 因为decimal是整数位和小数位分开存放,精度高,但占用空间较大。

Bigdecimal 和 Biginteger add加法 、subtract 减法、divide 除法、multiply 乘法

Bigdecimal(String s)      Biginteger(String s);

  1. varchar和char 的区别
  1. char:定长字符串  每个存储空间长度都一样 ,如果存储的字符小于指定的个数,会用空格在右侧补齐,取出时会自动去掉空格
  2. varchar:变长字符串   每个存储空间长度不一样,会预留1-2个字符串存储长度信息  如果存储的字符串本身右侧有空格,取出时不会被去掉
  3. 查询速度 char大于varchar
  4. char空间利用率可以达到100%,varchar不会达到100%
  5. char最多可以存储255个字节符,varchar可以最多存储65535个字符

Mysql查询语句书写顺序:select from join on where->group by->having->order by->limit

Mysql执行顺序:from ->on->join->where->group by->having(别名查询)->select->order by ->limit

  1. myisam 和innodb 的区别
  1. myisam 效率高,安全性差 , innodb 效率较低,安全性高
  2. myisam支持外键,innodb 支持外键
  3. myisam支持事务,innodb支持事务
  4. myisam支持行级锁,支持表锁,innodb支持行级锁
  1. 事务的特征(ACID)
  1. Atomicity原子性   事务中多个SQL不可分割,要么同时成功,要么同时失败
  2. Consistency一致性   事务执行前后,数据在逻辑上要保持一致
  3. Isolation   隔离性     在并发操作中事务之间是隔离的,不能被其他事物干扰。
  4. Durability持久性    一旦事务提交成功则无法回滚

  1. 如何优化SQL

Why? 有些情况即便添加了索引,也有部分不走索引的情况

  1. 使用order by 时不走索引,一般和where一起使用

Select age from person order by age;不走索引

Select  age from person where age >0 oredr by age ; 走索引

  1. 尽量避免字段为null,会降低查询效率
  2. 尽量避免 (不多于) != 或 <> ;
  3.   尽量让 or 前后的字段都是索引列 ,如果一个有索引,一个没有,则进行全表扫描。
  4. 尽量避免使用 in(1,2,3) 最好使用 between 1 and 3;
  5. 尽量避免使用模糊查询。
  6. 尽量避免在where子句中对条件进行运算或者使用函数,

如 where id>10*2; where id>floor(2.3);

  1. 尽量避免给重复率高的字段添加索引,如性别;
  2. 一张表的索引最好不要超过6个,如果超过可能需要重新设计表
  3. 尽量使用数字类型作为列类型
  4. 如果字符大小变化很频繁,建议使用varchar,而不用char.
  5. 不要使用select *;

  1. null、count

对于null的理解

  1. null与任何值运算结果都为null  

例如:select null+1;   select null=null;   select null*1;

  1. 查询为null的行和数据时 不能使用等号=,应该使用is null 和is not null;

例如:select *from t3 where username=null;错误;

           Select *from t3 where username is  null;正确

  1. 当统计有多少行时,不会统计null的行

count

select count(字段名)from 表名; 统计来自表的某个字段的个数

  1. 可以使用ifnull 函数把null 转换成指定的值

select 3+null;

select 3+ifnull(null,0);

  1. 表中有null时会影响查询效率
  2. Sum函数会自动把null转化成0;

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值