MySQL技术内幕:SQL编程

== 本文持续更新,建议关注收藏 ==

简述

本文记录一些关于sql语言的最根本的基础,堪称灵魂内幕。

适用人群:

适合对sql熟练使用的rd或者dba学习,功力深厚的大牛可以略读。

方式

将以小Tip、小问题的形式抛出知识点,进一步扩展。

Q&A

  • sql是一种语言?还是工具?和java、c++啥区别?

其实sql也是一种编程语言,这个纬度的话和java、c++没啥区别,也有自己的语法逻辑等,只是sql是用来解决数据库相关问题的,而java、c++解决的是业务逻辑层问题。

  • java是面向对象,php面向过程/对象,c++/c面向过程,sql呢?

sql是一种面向集合的语言。
因为sql是解决数据库相关问题而存在的,而数据库从模型上分为关系数据库、非关系数据库,而mysql属于关系型数据库,而关系型数据库是在数学基础上发展出来的【此处可以回想下大学里的高数及矩阵的知识了,谁说学高数这些没啥用…此处省略1w字】,而关系对应的就是数学中的集合【常见的操作对应集合的选择、投影、连接、交、并、差、除】,所以你虽然看到的是二维的表数据,但实质还是面向集合的产物。

  • sql引擎是啥?为啥经常被忽略?
  • sql查询语句执行的顺序是?每个过程中间差价你了解吗?

往下看,你会发现select语句,执行select的时候是在第八步,前前后后中间差价有很多,一些甚至相对rd是透明的。

1、from
笛卡尔积
2、on
3、join
4、where
5、group by
6、cube|rollup
7、having
8、select
9、distinct
若语句中含distinct,引擎会创建一张内存临时表【结构和上一步结果表一致,当然内存不够的情况下,临时表会在磁盘中】,在临时表中会对distinct操作列增加一个唯一索引,从而去除重复数据。
10、order by
11、limit

  • sql结果默认是主键排序?【不使用order by等排序语法】
  • sql的replace into高并发易造成死锁的原因?
  • 嵌套查询、非嵌套查询?
    一般情况下,嵌套查询要比非嵌套更慢,没错,是慢了,多了些相关子查询;
  • 相关子查询、独立子查询?

实用技巧

  • 在开发过程中,针对已有的业务迭代类项目,经常需要根据业务需求查询陌生的库表结构及数据case,进而快速熟悉原有业务数据结构,并基于扩展设计。常用的sql:

查看表结构:desc tableName;
查看创建表的语法:show create tbale tableName;

  • 有时候,你会发现查询的结果中存在乱码,不要紧,安排上:

可以改变当前会话的编码,不影响原库的一切:set names ‘utf8’;

  • 查看当前回话数据库隔离级别:

select @@tx_isolation

  • 查看全局数据库隔离级别:

select @@global.tx_isolation

附同名物料

SQL技术内幕:SQL编程
java面试灵魂:https://blog.csdn.net/qq_34417408/article/details/99936875

你可能感兴趣的:(数据库,进程死锁,Hibernate)