1. char、varchar 的区别是什么?
    • varchar是变长而char的长度是固定的。如果创建的列是固定大小的,你会得到更好的性能
    1. truncate 和 delete 的区别是什么?
    • delete 命令从一个表中删除某一行,或多行,可以使用用where,truncate 命令清空表里的所有数据,再插入数据时自增 id 从 1 开始
    1. 什么是触发器,MySQL 中都有哪些触发器?
    • 触发器是指一段代码,当触发某个事件,自动执行这些代码(维护数据库的一致性的完整性)。MySQL中的触发器有如下六种:
    1. Before Insert
    2. After Insert
    3. Before Update
    4. After Update
    5. Before Delete
    6. After Delete
    1. float 和 double 的区别是什么?
    • float 类型数据可以存储之多8位十进制数,并在内存中占4字节
    • double类型数据可以存储至多18位十进制数,并在内存中占8字节
    1. 如何在 MySQL 中获取当前日期?
    • select curdate();
    • select current_date();
    • select date_format(now(), '%y%m%d');
    1. 如何查询第 n 高的工资?
    • select distinct(salary) from employee order by salary desc limit n-1, 1;
    1. 请写出下面 MySQL 数据类型表达的意义(int(0), char(16), varchar(16), datetime, text)
  • 数据类型考点:

    • 1、整数类型:包括 tinyint、smallint、mediumint、int、bigint、分别表示1字节、2字节、3字节、4字节、8字节整数。任何整数类型都可以加上unsigned,表示数据是无符号的,即非负整数。

      • 长度:整数类型可以被指定长度,例如:int(11)表示长度为11的int类型。长度在大多数场景是没有意义的,它不会限制值的合法范围,指挥影响显示字符的个数,而且需要和unsigned和zerofill属性配合使用才有意义。
      • 例子:假设数据类型为int(5),属性为unsigned zerofill,如果用户插入的数据为12的话,那么数据库实际存储数据为00012.
    • 2、实数类型:包括float、double、decimal。
      • decimal可以用于存储比bigint还大的整数,能存储精确的小数。
      • 而float和double是由取值范围的,并支持使用标准的浮点进行近似计算。
      • 计算时float和double相比decimal效率更高一些,decimal可以理解为用字符串进行处理(保证数据不会失真)
    • 3、字符串类型:包括varchar、char、text、blob
      • varchar 用于存储可变长字符串,比定长类型更节省空间
      • varchar 使用额外1个或2个字节存储字符串长度。列长度小于255字节时,使用1字节表示,负责小于2字节表示
      • varchar 存储的内容超出设置的长度时,内容会被截断
      • char 是定长的,根据定义的字符串长度分配足够的空间
      • char 会根据需要使用空格进行填充方便比较
      • char 适合存储很短的字符串,或者所有值都接近同一个长度
      • char 存储的内容超出设置的长度时,内容同样会被截断
    • 字符串使用策略:
      • 对于经常变更的数据来说,char比varchar更好,因为char不容易产生碎片
      • 对于非常短的列,char比varchar在存储空间上更有效率
      • 使用时要注意只分配需要的空间,更长的列排序时会消耗更多内存
      • 尽量避免使用text/blob类型,查询时会使用临时表,导致严重的性能开销
    • 4、枚举类型(ENUM):把不重复的数据存储为一个预定义的集合
      • 有时可以使用enum代替常用的字符串类型
      • enum存储非常紧凑,会把列表值压缩到一个或两个字节
      • enum在内部存储时,其实存的是整数
      • 尽量避免使用数字作为enum枚举的常量,因为容易混乱
      • 排序是按照内部存储的数据
    • 5、日期和时间类型:尽量使用timestamp,空间效率高于datetime,但是如果表中有timestamp类的列,每次更新时timestamp列都会自动更新为当前时间戳

MySQL基础操作

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存储引擎

  • 默认事物型引擎,最重要最广泛的存储引擎,性能非常优秀。
  • 数据存储在共享表空间,可以通过配置分开。也就是多个表和索引都存储在一个表空间中,可以通过配置文件改变此配置
  • 对主键查询的性能高于其他类型的存储引擎
  • 内部做了很多优化,从磁盘读取数据时会自动构建hash索引,插入数据时自动构建插入缓冲区
  • 通过一些机制和工具支持真正的热备份
  • 支持崩溃后的安全回复
  • 支持行级锁
  • 支持外键

2、MyISAM存储引擎

  • 拥有全文索引、压缩、空间函数
  • 不支持事物和行级锁、不支持崩溃后的安全恢复
  • 表存储在两个文件,MYD(MY date)和MYI(MY index)
  • 设计简单,某些场景下性能很好,例如获取整个表有多少条数据,性能很高。
  • 全部索引不是很常用,不如使用外部的ElasticSearch

3、其他引擎

Archive、Blackhole、CSV、Memory

使用策略:在大多数场景下建议使用InnoDB存储引擎

MySQL锁机制

表锁是日常开发中的常见问题,因此也是面试中最常见的考察点,当多个查询同一时刻进行数据修改时,就会产生并发控制的问题。共享锁和排它锁,就是读锁和写锁

  • 共享锁:不堵塞,多个用户可以同时读同一个资源,互不干扰
  • 排他锁:一个写锁会堵塞其他的读锁和写锁,这样可以只允许一个用户进行写入,防止其他用户读取正在写入的资源

    锁的粒度
  • 表锁:系统开销最小,会锁定整张表,MyISAM使用表锁
  • 行锁:最大程度的支持并发处理,但是也带来了最大的锁开销,InnoDB使用行锁

MySQL事物处理

  • MySQL提供事物处理的表引擎,InnoDB
  • 服务器层不管理事物,由下层的引擎实现,所以同一个事物中,使用多种引擎是不靠谱的
  • 需要注意,在非事物表上执行事物操作,MySQL不会发出提醒,也不会报错

存储过程

  • 为以后的使用保存的一条或多条MySQL语句的集合,因此也可以在存储过程中加入业务逻辑和流程
  • 可以在存储过程中创建表,更新数据,删除数据等等

使用策略

  • 可以通过把SQL语句封装在容易使用的单元中,简化复杂的操作
  • 可以保证数据的一致性
  • 可以简化对变动的管理

常问的MySQL面试题整理的更多相关文章

  1. 常问的MySQL面试题集合

    关注「开源Linux」,选择"设为星标" 回复「学习」,有我为您特别筛选的学习资料~ 除了基础题部分,本文还收集整理的MySQL面试题还包括如下知识点或题型: MySQL高性能索引 ...

  2. 企业面试题|最常问的MySQL面试题集合(二)

    MySQL的关联查询语句 六种关联查询 交叉连接(CROSS JOIN) 内连接(INNER JOIN) 外连接(LEFT JOIN/RIGHT JOIN) 联合查询(UNION与UNION ALL) ...

  3. 企业面试题|最常问的MySQL面试题集合(一)

    问题1:char.varchar的区别是什么?varchar是变长而char的长度是固定的.如果你的内容是固定大小的,你会得到更好的性能. 问题2: TRUNCATE和DELETE的区别是什么?DEL ...

  4. 企业面试题|最常问的MySQL面试题集合(三)

    分区表的原理 分库分表的原理 延伸: MySQL的复制原理及负载均衡 分区表的工作原理 对用户而言,分区表是一个独立的逻辑表,但是底层MySQL将其分成了多个物理子表,这对用户来说是透明的,每一个分区 ...

  5. 金九银十跳槽高峰,面试必备之 Redis + MongoDB 常问80道面试题

    前言 有着“金九银十”之称的招聘旺季已经开启,跳槽高峰期也如约而至. 本文为主要是 Redis + MongoDB 知识点的攻略,希望能帮助到大家. 内容较多,大家准备好耐心和瓜子矿泉水. Redis ...

  6. Java集合必会14问(精选面试题整理)

    前言:把这段时间复习的关于集合类的东西整理出来,特别是HashMap相关的一些东西,之前都没有很注意1.7 ->> 1.8的变化问题,但后来发现这其实变化挺大的,而且很多整理的面试资料都没 ...

  7. mysql面试题整理

    1 myisam 和 innodb 引擎的区别 innodb 支持事务,外键,myisam 不支持 innodb 支持 mvcc ,myisam 不支持 innodb 支持表锁.行锁,myisam 仅 ...

  8. android-------Java 常问的基础面试题

      1."=="和equals方法究竟有什么区别? ==操作符专门用来比较两个变量的值是否相等,也就是用于比较变量所对应的内存中所存储的数值是否相同,要比较两个基本类型的数据或两个 ...

  9. MySql面试题、知识汇总、牛客网SQL专题练习

    点击名字直接跳转到链接: Linux运维必会的100道MySql面试题之(一) Linux运维必会的100道MySql面试题之(二) Linux运维必会的100道MySql面试题之(三) Linux运 ...

随机推荐

  1. effective-java学习笔记---优先使用泛型方法30

    泛型类型比需要在客户端代码中强制转换的类型更安全,更易于使用. 当你设计新的类型时,确保它们可以在没有这种强制转换的情况下使用. 这通常意味着使类型泛型化. 如果你有任何现有的类型,应该是泛型的但实际 ...

  2. NOI ONLINE 提高组 序列 根据性质建图

    题目链接 https://www.luogu.com.cn/problem/P6185 题意 应该不难懂,跳过 分析 说实话第一眼看到这题的时候我有点懵,真不知道怎么做,不过一看数据,还好还好,暴力能 ...

  3. SG函数(斐波那契博弈) Fibonacci again and again

    https://zhuanlan.zhihu.com/p/53948422 HDU - 1848 将这篇文章认真的看了一遍 ,虽然不是很懂 ,但是脑子里有了一个模型,链接里的图 (看的顺序 是 0,1 ...

  4. js Object方法小结

    1. Object.defineProperty(obj,prop,{                 value:...,                 writable:boolean,//可写 ...

  5. 《Java多线程编程实战指南(核心篇)》阅读笔记

    <Java多线程编程实战指南(核心篇)>阅读笔记 */--> <Java多线程编程实战指南(核心篇)>阅读笔记 Table of Contents 1. 线程概念 1.1 ...

  6. C++ 简单信息的表示和基本运算

    一.算术运算和自增自减运算 二.关系运算 三.逻辑运算 四.位运算 五.特殊运算符 六.混合运算中的类型转换

  7. Supervisor 使用和进阶4 (Event 的使用)

    本文主要介绍 supervisor Event 的功能. supervisor 作为一个进程管理工具,在 3.0 版本之后,新增了 Event 的高级特性, 主要用于做(进程启动.退出.失败等)事件告 ...

  8. A. Array with Odd Sum Round #617(水题)

    A. Array with Odd Sum time limit per test 1 second memory limit per test 256 megabytes input standar ...

  9. Java 程序该怎么优化?(技巧篇)

    搬砖者:为什么程序总是那么慢?它现在到底在干什么?时间都花到哪里去了? 面试官:简单谈谈 Java 程序性能优化? 1. 字符串处理优化,乃优化之源. 研发过程中,String 的 API 用的应该是 ...

  10. debian10切换国内源

    Debian 10.3 下载地址: http://mirrors.163.com/debian-cd/10.3.0-live/amd64/iso-hybrid/debian-live-10.3.0-a ...