1.常用API

insert()
lower()
upper()
trim()
reverse()
length(字段名)
concat(字段名,“随便的字符”) 用于字段合并展示
substring(字段名,‘’,‘’)
replace(字段名,‘被替换字符’,‘替换字符’)
curdate() 返回当前时间,不带时间
now() 返回当前时间,带时间
sum(可以是字段,也可以是表达式)
if()
例:

IF(windWarningType = '1',1 ,2)  可用于 select 后,也可用于  where子句里

mysql时间加减
SYSDATE()是指当前时间
DATE_SUB()和DATE_ADD()函数,实现日期增减

DATE_SUB(SYSDATE(),INTERVAL 30 MINUTE) 当前时间减30分钟

DATE_SUB(SYSDATE(),INTERVAL 1 day) 当前时间减1天

DATE_SUB(SYSDATE(),INTERVAL 1 hour) 当前时间减1小时

DATE_SUB(SYSDATE(),INTERVAL 1 second) 当前时间减1秒

DATE_SUB(SYSDATE(),INTERVAL 1 week) 当前时间减1星期

DATE_SUB(SYSDATE(),INTERVAL 1 month) 当前时间减1个月

DATE_SUB(SYSDATE(),INTERVAL 1 quarter) 当前时间减1季度

DATE_SUB(SYSDATE(),INTERVAL 1 year) 当前时间减1年

相对DATE_ADD()是加时间

获取今天凌晨时间
获取今日凌晨时间

UNIX_TIMESTAMP(CAST(SYSDATE()AS DATE))

获取昨日凌晨时间

UNIX_TIMESTAMP(CAST(SYSDATE()AS DATE) - INTERVAL 1 DAY)

获取明日凌晨时间

UNIX_TIMESTAMP(CAST(SYSDATE()AS DATE) + INTERVAL 1 DAY)

获取的是时间戳
时间戳转换成datetime, datetime也就是我们说的日期格式 年-月-日 时-分-秒

FROM_UNIXTIME();
语法:from_unixtime(timestamp,date_format)
timestamp:为10位时间戳
date_format:不填写的话,默认为 "%Y-%m-%d %H:%i:%s"格式

datetime转时间戳

UNIX_TIMESTAMP();

2.常问类型

data 年月日 YYY-MM-DD
TIME 时分秒 HH:MM:SS
datatime 年月日时分秒 YYYY-MM-DD HH:MM:SS
TIMESTAME 年月日时分秒 YYYY-MM-DD HH:MM:SS 范围小

3.MySQL常见的两种存储引擎

MyISAM与InnoDB,默认是InnoDB
区别:
1.InnoDB是聚集索引,使用B+Tree作为索引结构,数据文件跟索引是存在一起的,必须要有主键,通过主键索引效率会很高。使用辅助索引的话需要查询两次,先查询到主键,再根据主键去查询数据
2.MyISAM是非聚集索引,索引和数据文件是分离的,索引保存的是数据文件的指针。主键索引和辅助索引是独立的。也就是说InnoDB的叶子节点存的就是数据文件,而MyISAM的叶子节点存储的是指向数据文件的指针
3.当你去创建的时候可以去mysql文件存放位置观察,当你创建的是InnoDB引擎,会有一个.frm 跟.opt文件,当你创建的是MyISAM引擎的话会有 .frm,.MYI.MYD.opt四个文件
4.InnoDB支持事务,而MyISAM不支持事务
5.InnoDB支持外键,而MyISAM不支持
6.InnoDB支持表、行(默认)级锁,而MyISAM支持表级锁
7.InnoDB表必须有唯一索引(如主键)(用户没有指定的话会自己找/生产一个隐藏列Row_id来充当默认主键),而Myisam可以没有

4.锁的区别

  • MyISAM采用表级锁(table-level locking)。

  • InnoDB支持行级锁(row-level locking)和表级锁,默认为行级锁
    表级锁和行级锁对比:

  • 表级锁:是粒度较大的锁,它锁的是整张表,实现简单,资源消耗也比较少,加锁快,不会出现死锁。触发锁冲突的概率高,并发度最低

  • 行级锁:是粒度较小的锁,只针对当前操作的行进行加锁。 行级锁能大大减少数据库操作的冲突,但加锁的开销也最大,加锁慢,会出现死锁。

5.什么是索引,索引都有哪些

概念:官方的讲,索引是帮助MySQL高效获取数据的数据结构,通俗的讲就是好比一本书的目录,能够加快查询速度。Mysql索引使用的数据结构主要有BTree索引 和 哈希索引,
InnoDB跟MyISAM都是BTree索引,不支持hash索引,memory引擎支持hash索引
优势:能够提高数据检索速度,降低IO成本
缺点:索引是会占据磁盘空间的,所以提高了查询效率,降低了更新表的效率
在MySQL中, 索引有两种分类方式:逻辑分类和物理分类。

按照逻辑分类,索引可分为:

主键索引:一张表只能有一个主键索引,不允许重复、不允许为 NULL;

唯一索引:数据列不允许重复,允许为 NULL 值,一张表可有多个唯一索引,但是一个唯一索引只能包含一列,比如身份证号码、卡号等都可以作为唯一索引;

普通索引:一张表可以创建多个普通索引,一个普通索引可以包含多个字段,允许数据重复,允许 NULL 值插入;

全文索引:让搜索关键词更高效的一种索引。

按照物理分类,索引可分为:

聚集索引:一般是表中的主键索引,如果表中没有显示指定主键,则会选择表中的第一个不允许为 NULL 的唯一索引,如果还是没有的话,就采用 Innodb 存储引擎为每行数据内置的 6 字节 ROWID 作为聚集索引。每张表只有一个聚集索引,因为聚集索引的键值的逻辑顺序决定了表中相应行的物理顺序。聚集索引在精确查找和范围查找方面有良好的性能表现(相比于普通索引和全表扫描),聚集索引就显得弥足珍贵,聚集索引选择还是要慎重的(一般不会让没有语义的自增 id 充当聚集索引);

非聚集索引:该索引中索引的逻辑顺序与磁盘上行的物理存储顺序不同(非主键的那一列),一个表中可以拥有多个非聚集索引。
————————————————
版权声明:本文为CSDN博主「曲鸟」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/momoda118/article/details/119535217

6.B+树 哈希树的区别

B+树:是B-树的变体,有着比B-树更好的查询效率,B+树主要有几个特点
1.中间节点不保存数据,只用来做索引
2.叶子节点包含了全部元素信息,并且是有序的,是以自小而大的顺序链接的
3.所有中间节点元素都存在于子节点,并且是子结点中最大的元素
4.数据库的聚集索引中,叶子节点直接包含卫星数据,而非聚集索引中,叶子节点包含的是指向卫星数据的索引。
(卫星数据:索引元素所指向的数据记录)

优势:
1.B+树查询更加稳定,因为都需要遍历到叶子节点获取数据
2.因为叶子节点是有序的,所以更适用于范围查询
3.因为B+树比较矮胖,所以IO次数比较少

哈希树
1.结构简单
2.查找迅速
3.在删除的时候,不做任何结构调整,采取的是一种“见缝插针”的算法
4.最大的缺点就是 非排序性,哈希树不支持排序,没有顺序特性。

7.为什么要使用递增主键?

因为自增ID可以保证每次插入时B+索引是从右边扩展的,可以避免B+树和频繁合并和分裂,如果使用字符串主键和随机主键,会使得数据随机插入,效率比较差。

8.mysql跟oracle的区别

1.宏观上:
(1)mysql是开源的,而oracle是收费的,oralce出了问题可以找售后,mysql出了问题自己百度
(2)mysql是中小型数据库,而oralce是大型数据库
(3)oralce支持大并发
2.微观上:
(1)mysql即支持表级锁,也支持行级锁,而oracle只支持行级锁
(2)oracle的行级锁锁的是数据行,不依赖于索引,所以并发性会更好一些
(3)事务默认的隔离级别不同,mysql默认是可重复读,而oracle默认是读已提交
(4)数据安全问题,mysql默认是自动提交的,而oralce是需要手动提交的,所以如果在更新中,如果发生宕机问题,mysql可能会造成数据丢失问题,而oracle会把提交的sql操作写到在线联机日志文件中,保存到磁盘上,所以即使发生了宕机,也可以根据日志文件去恢复数据
(5)mysql的语句更加灵活,比如分页的话 mysql使用关键字limit,而oracle的分页是通过伪列和子查询完成的
(6)性能诊断方面,oracle有很多调优工具,而mysql只能根据慢查询日志去优化sql

9.大表优化

1.限定数据范围,限制不带任何条件的查询,比如查询历史订单的话限制查询一个月
2.读/写分离: 经典的数据库拆分方案,主库负责写,从库负责读
3.使用MySQL的缓存,另外对重量级、更新少的数据可以考虑使用应用级别的缓存;
4.垂直分区:根据数据库里面数据表的相关性进行拆分。 例如,用户表中既有用户的登录信息又有用户的基本信息,可以将用户表拆分成两个单独的表。
5.水平拆分:是指数据表行的拆分,表的行数超过200万行时,就会变慢,这时可以把一张的表的数据拆成多张表来存放。水平拆分能够 支持非常大的数据量存储,应用端改造也少,但 分片事务难以解决 ,跨界点Join 性能较差,逻辑复杂。
主要实现有两种方案:
(1)客户端代理: 分片逻辑在应用端,封装在jar包中,通过修改或者封装JDBC层来实现。
(2)中间件代理: 在应用和数据中间加了一个代理层。分片逻辑统一维护在中间件服务中。比如Mycat

10.mysql缓存

my.cnf加入以下配置,重启Mysql开启查询缓存

query_cache_type=1
query_cache_size=600000

或执行sql语句开启

set global  query_cache_type=1;
set global  query_cache_size=600000;

开启查询缓存后在同样的查询条件以及数据情况下,会直接在缓存中返回结果。这里的查询条件包括查询本身、当前要查询的数据库、客户端协议版本号等一些可能影响结果的信息。因此不满足条件的查询不会命中缓存。
**缓存虽然能够提升数据库的查询性能,但是缓存同时也带来了额外的开销,每次查询后都要做一次缓存操作,失效后还要销毁。**因此,开启缓存查询要谨慎,并控制缓存空间的大小。可以通过sql_cache和sql_no_cache来控制某个查询语句是否需要缓存:

select sql_no_cache count(*) from usr;

看到最后的帅哥们记得点赞哦!还有想了解的知识点请评论,博主会更新哟

mysql,windows下默认是大小写不敏感的,因此迁移表,会自动将大写改为小写
这个配置为1时,既大小写不敏感

需要在my.ini文件中加如下一句,然后重新初始化一下mysql

# 区分大小写
lower_case_table_names=0

Mysql常见面试题(进阶知识点)相关推荐

  1. mysql关于时间的面试题,mysql时间设置默认值MySQL常见面试题

    1.limit(选出10 到20 条) select * from students order by id limit 9,10; 2.MySQL 会使用索引的操作符号 =,>,=,betwe ...

  2. mysql常见面试题及答案_MySQL常见面试题与答案整理

    1.MySQL 中有哪几种锁? 1.表级锁: 开销小, 加锁快: 不会出现死锁: 锁定粒度大, 发生锁冲突的概率最高, 并发度最低. 2.行级锁: 开销大, 加锁慢: 会出现死锁: 锁定粒度最小, 发 ...

  3. MySQL常见面试题及答案汇总1000道(春招+秋招+社招)

    MySQL面试题以及答案整理[最新版]MySQL高级面试题大全(2021版),发现网上很多MySQL面试题都没有答案,所以花了很长时间搜集,本套MySQL面试题大全,汇总了大量经典的MySQL程序员面 ...

  4. mysql数据库工程师考证题_100道MySQL常见面试题总结

    原文链接:https://juejin.im/post/5d351303f265da1bd30596f9 前言 本文主要受众为开发人员,所以不涉及到MySQL的服务部署等操作,且内容较多,大家准备好耐 ...

  5. MySQL常见面试题(2023年最新)

    目录 前言 1.char和varchar的区别 2.数据库的三大范式 3.你了解sql的执行顺序吗? 4.索引是什么 5.索引的优点和缺点 6.索引的类型 7.索引怎么设计(优化) 8.怎么避免索引失 ...

  6. MySQL常见面试题汇总(建议收藏!!!)

    目录 一.索引相关 (1)什么是索引? (2)索引是个什么样的数据结构呢? (3)为什么使用索引? (4)Innodb为什么要用自增id作为主键? (5)Hash 索引和 B+ 树索引有什么区别或者说 ...

  7. 程序员面试系列,MySQL常见面试题?

    原文链接 一.索引相关的面试题 (1)索引失效的情况有哪些 在MySQL查询时,以下情况可能会导致索引失效,无法使用索引进行高效的查询: 数据类型不匹配:如果查询条件中的数据类型与索引列的数据类型不匹 ...

  8. MySQL资料总结(下)—— MySQL常见面试题

    mysql 中 myisam 与 innodb 的区别 1. InnoDB支持事务,MyISAM不支持,对于InnoDB每一条SQL语言都默认封装成事务,自动提交,这样会影响速度,所以最好把多条SQL ...

  9. mysql常见面试题(持续更新)

    1.mysql隔离级别有哪些?为什么要设计这几种隔离级别?默认隔离级别是啥?默认价格是如何避免幻读的?有哪些级别用了mvcc?不同级别的mvcc的区别?如果让你来设计,你还会想到其他方式达到这个效果嘛 ...

最新文章

  1. 【转】js frame 框架编程
  2. springboot 项目将本地引用打进jar包
  3. opencv findContours 崩溃CrtDbgBreak
  4. 服务器对搜索引擎有哪些影响,实录:网站换服务器后对搜索引擎的影响
  5. 单例设计模式八种方式——5) 懒汉式(线程安全,同步代码块) 6) 双重检查 7) 静态内部类 8) 枚举
  6. 1 分钟 Serverless 极速抽盲盒,自己部署自己抽
  7. 2018 Multi-University Training Contest 6-oval-and-rectangle(hdu 6362)-题解
  8. boost::mp11::mp_any_of_q相关用法的测试程序
  9. dll文件懒加载_一步步学习NHibernate(5)——多对一,一对多,懒加载(2)
  10. timm 视觉库中的 create_model 函数详解
  11. xargs 和 exec详解
  12. js时间搓化为今天明天_做猪皮冻,记住“泡一泡,刮一刮,搓一搓”,皮冻晶莹剔透无异味...
  13. 【算法07】求子数组的最大和
  14. RabbitMQ 中的 7 种队列模式,写得太好了!
  15. 下载Chrome历史版本
  16. win7 IIS误删default website的恢复方法
  17. Redis Cluster集群(Linux设计搭建)
  18. android dlna uri,android DLNA投屏
  19. android 横竖屏固定,Android——设置固定横竖屏
  20. P4799 [CEOI2015 Day2] 世界冰球锦标赛

热门文章

  1. SpringCloud-5-Hystrix
  2. 为什么A能ping通B,B不能ping通A?
  3. C语言 大整数运算(加、减、乘)
  4. 实现python调用Matlab的.m文件
  5. 新型勒索软件PYSA浅析
  6. CSS基础综合案例1-新闻
  7. java--获取当前时间
  8. Fourier变换基础
  9. 对不起navicat我投入了DataGrip的怀抱
  10. 一个关于SDWAN单臂部署方案验证的实验