mysql之面试问题总结

问题1、char 与varchar的区别?

       varchar是变长而char的长度是固定的。如果你的内容是固定的大小,char性能更好。

      char[4] 与varchar[4]   存储字母a a占一个字符  varchar长度为4但是占此时为一个字符长度   而char则占4个字符

问题2、truncate 和delete 区别是什么?

     delete 命令是从表中删除一行或者多行,truncate是从表中永远的删除每一行,truncate是将整个表删除后重新创建当前表结构

问题3、什么是触发器、mysql中都有哪些触发器。

    触发器是一行代码  ,当触发了某个事件的时候自动触发的这一段代码。

    mysql中有6中触发器

    1)before insert

    2) after insert

    3) before update

    4) after update

    5)before delete

     6)after delete

问题4、float 和double区别

   float可以存储至多8位十进制数,并且内存占4字节

    double 至多可以18位十进制数,并且内存占8字节

问题5、mysql获取当前日期的函数

       select current_date();

问题6、now() 与sysdate()区别

     select now() 执行语句前就获取时间    select sysdate() 在执行过程中获取时间

问题7、如何查找第n高的工资

    select distin(salary) from employee order by salary desc limit n-1,1

问题8、请写出下面mysql数据类型表达的意义int(0) char(16) varchar(16) datetime text

     int表示int类型长度为0  char(16) 表示固定长度字符串  长度为16 varchar(16)表示可变长度字符串,长度为16  datetime表示时间类型   text表示字符串类型 能存储大字符串,最多存65535字节数据

   1)   整数类型,包括tinyint  smallint mediumint int bigint 分别1字节  2字节  3字节  4字节  8字节整数。任何整数类型都可以加上unsigned属性,表示数据类型无符号,也就是非负数

    长度:整数类型可以被指定长度,比如int(11) 表示长度为11的int 类型。

   2) 实数类型  包括double  float decimal 

        decimal 可以用来存储比bigint还打的整型,能存储精确的小数

        float 和double 是由取值范围的,并支持使用标准的浮点进行近似计算,计算时float 和double 相比decimal效率更高一些,decimal可以理解为用字符串进行处理

    3)字符串类型 包括 varchar char text blob 

          varchar 用于存储长度可变的字符串,它比定长的数据类型更节省空间

          varchar使用额外1或2个字节存储字符创长度,varchar 存储长度超过设置长度后会被截断

          char 是定长的需要使用空格惊醒填充,适合存储短字符串,或者所有值都近似一个长度

          char 存储内容超过设置长度,内容同样会被截断

        使用策略:

         对于经常变更的数据来说,char比varchar更好,因为char不容易产生碎片。对于非常短的列char比varchar存储空间上更有效率。

         使用的时候注意分配需要的空间,更长的类排序的时候会消耗更多内存。

         尽量避免使用text blob类型,查询时会使用临时表,导致严重的性能开销。

     4)枚举类型,不能重复的数据存储一个预定义的集合。

         有时候可以使用enum代替常用的字符串类型

         enum存储非常紧凑,会把列表值严肃哦到一个或两个字节

       5)日期和时间类型  尽量使用timestamp 空间效力高于datetime  用整数保存时间戳通常不方便处理 如果需要存储微秒,可以使用bigint存储

   常见操作

   mysql 常见的连接和关闭;mysql -u -p -h -P

     -u 用户名

    -p 密码

    -h  主机

    -P 端口

   进入mysql命令后   G   c q  s h d

   G 打印结果垂直显示

   c 取消当前mysql命令

   q 退出mysql连接

    s 显示服务器状态

    h 帮助信息

    d 改变执行符

mysql 存储引擎

   1 、 innoDB存储引擎

     1) 默认的存储引擎,最重要最广泛的存储引擎,性能非常优秀

     2)数据存储在共享空间,可以通过配置分开,也就是多个表和索引都存储在一个表空间中,可以通过配置文件改变此配置。

    3)对主键查询性能高于其他存储引擎

    4)内部做了很多优化,从磁盘读取数据时会自动构建hash索引,插入数据时自动构建插入缓冲区

    5)通过一些机制和工具支持真正的热备份

     6)支持崩溃后的安全恢复

     7)支持行级锁

     8)支持外键

    2 MyISAM 存储引擎

  • 拥有全文索引  压缩 空间函数
  • 不支持事务和行级锁、不支持崩溃后的安全恢复
  • 表存储在两个文件  myd 和myl
  • 设计简单,获取整个表多少条数据性能很高
  • 全文索引不是很常用  
  •  不如使用elasticsearch或luncene

    3 其他引擎

      Archive  Blackhole csv  memory

      在大多数场景下建议使用innodb引擎

MySQL锁机制

     共享锁和排他锁 就是读锁和写锁

     共享锁,不阻塞,多用户可以同时读一个资源,互不干扰

    排他锁,一个写锁会阻塞其他的读锁和写锁,这样可以只允许一个用户进行写入,防止其他用户读取正在写入的资源

锁的粒度

    表锁,系统开销小,会锁定整张表 myisam使用表锁

    行锁,最大程度支持并发处理,但是带来最大锁开销,innodb使用行锁

MySql 事务处理

   mysql 提供事务处理表引擎,也就是innodb

   服务器层不管理事务,由下层的引擎实现,所以同一个事务中,使用多种引擎是不靠谱的

   需要注意,在非事务表上执行事务操作,mysql不会发出提示,也不会报错。

存储过程

 为以后使用保存的一条或多条mysql语句的集合  因为可以在存储过程加上业务逻辑和流程

  可以在存储过程中创建表,更新数据  删除数据等

  使用策略:

    可以通过把sql语句封装在容易使用的单元中,简化复杂的操作

    可以保证数据的一致性

    可以简化对变动的管理

猜你喜欢

转载自www.cnblogs.com/lwdmaib/p/9292045.html