分类目录归档:技术栈

MySQL 锁




每个层级的锁数量是有限制的,因为锁会占用内存空间,锁空间的大小是有限的。
当某个层级的锁数量超过了这个层级的阈值时,就会进行锁升级。
锁升级就是用更大粒度的锁替代多个更小粒度的锁,比如InnoDB中行锁升级为表锁,这样做的好处是占用的锁空间降低了,但同时数据的并发度也下降了。

避免死锁

如果事务涉及多个表,操作比较复杂,那么可以尽量一次锁定所有的资源,而不是逐步来获取,这样可以减少死锁发生的概率;
如果事务需要更新数据表中的大部分数据,数据表又比较大,这时可以采用锁升级的方式,比如将行级锁升级为表级锁,从而减少死锁产生的概率;
不同事务并发读写多张数据表,可以约定访问表的顺序,采用相

Read more

MySQL 游标


MySQL 游标

CREATE PROCEDURE `calc_hp_max`()
BEGIN
       -- 创建接收游标的变量
       DECLARE hp INT;  

       -- 创建总数变量 
       DECLARE hp_sum INT DEFAULT 0;
       -- 创建结束标志变量  
     DECLARE done INT DEFAULT false;
       -- 定义游标     
       DECLARE cur_hero CURSOR FOR SELECT hp_max FROM heros;
       -- 指

Read more

MySQL 事务


MySQL 事务

START TRANSACTION 或者 BEGIN,作用是显式开启一个事务。
COMMIT:提交事务。当提交事务后,对数据库的修改是永久性的。
ROLLBACK 或者 ROLLBACK TO [SAVEPOINT],意为回滚事务。意思是撤销正在进行的所有没有提交的修改,或者将事务回滚到某个保存点。
SAVEPOINT:在事务中创建保存点,方便后续针对保存点进行回滚。一个事务中可以存在多个保存点。
RELEASE SAVEPOINT:删除某个保存点。
SET TRANSACTION,设置事务的隔离级别。
使用事务有两种方式,分别为隐式事务和显式事务。隐式事务实际上就是自动提交

Read more

MySQL 存储过程


存储过程

-- 创建
CREATE PROCEDURE 存储过程名称([参数列表])
BEGIN
    需要执行的语句
END 

-- eg1
DELIMITER //
CREATE PROCEDURE `add_num`(IN n INT)
BEGIN
       DECLARE i INT;
       DECLARE sum INT;

       SET i = 1;
       SET sum = 0;
       WHILE i <= n DO
              SET sum = sum + i;
              SET i = i 

Read more

MySQL 基础概念


SQL 全称

Structured Query Language

SQL标准

SQL有两个主要的标准,分别是SQL92和SQL99。92和99代表了标准提出的时间,SQL92就是92年提出的标准规范。当然除了SQL92和SQL99以外,还存在 SQL-86SQL-89SQL:2003SQL:2008SQL:2011SQL:2016 等其他的标准。

SQL标准 特点
SQL92 形式简单, SQL语句较长,可读性差
SQL99 语法复杂,可读性强

SQL 语句规范

在SQL中,关键字和函数名是不用区分字母大小写的。比如 MySQL 在 Linux 的环境下,数

Read more

SQL 执行流程


SQL 执行流程

Oracle 执行流程

语法检查:检查SQL拼写是否正确,如果不正确,Oracle会报语法错误。
语义检查:检查SQL中的访问对象是否存在。比如我们在写SELECT语句的时候,列名写错了,系统就会提示错误。语法检查和语义检查的作用是保证SQL语句没有错误。
权限检查:看用户是否具备访问该数据的权限。
共享池检查:共享池(Shared Pool)是一块内存池,最主要的作用是缓存SQL语句和该语句的执行计划。Oracle通过检查共享池是否存在SQL语句的执行计划,来判断进行软解析,还是硬解析。那软解析和硬解析又该怎么理解呢?
在共享池中,Oracle首先对SQL语句进行Hash

Read more

深入理解 Java 虚拟机 读书笔记


本章是第二部分的第1章,笔者将从概念上介绍Java虚拟机内存的各个区域,讲解这些区域的作 用、服务对象以及其中可能产生的问题,这也是翻越虚拟机内存管理这堵围墙的第一步。

如果线程正在执行的是一个Java方法,这个计数器记录的是正在执行的虚拟机字节码指令的地 址;如果正在执行的是本地(Native)方法,这个计数器值则应为空(Undefined)。 此内存区域是唯 一一个在《Java虚拟机规范》中没有规定任何OutOfMemoryError情况的区域。

每个方法被执行的时候,Java虚拟机都 会同步创建一个栈帧1用于存储局部变量表、操作数栈、动态连接、方法出口等信息。每一个方法被调用直至执行完毕

Read more

关于sql语句连表查询的一个问题


问题链接

https://segmentfault.com/q/1010000019472412

MySQL 前缀索引大小限制

是否支持前缀索引以及前缀索引长度大小,依赖于数据表使用的存储引擎。
对于INNODB存储引擎而言,默认前缀长度最大能支持767字节;而在开启innodb_large_prefix属性值的情况下,最大能支持3072字节。
对于MyISAM存储引擎而言,前缀长度限制为1000字节。
对于NDB存储引擎而言,并不支持前缀索引。

SELECT
    post.id,
    post.title,
    post.content,
    GROUP_CONCAT( NA

Read more

小马哥 spring 笔记


课件

https://github.com/geektime-geekbang/geekbang-lessons

大纲

Java 语言特性:反射、动态代理、枚举、范型、注解、ARM(Automatic Resourse Management)、lambda
设计思想和设计模式:OOP、IOC、DDD、TDD、GoF23
Java API 的封装与简化: JDBC、事务 Transaction、servlet、JPA、JMX、Bean Validation
JSR 规范的适配与实现
三方框架的整合:Mybitis 整合 hibernetes、Redis
其它:AOP、Spring EL 事务、W

Read more