数据库
yxh13521338301
只分享干货的码农
展开
-
mysql事务隔离级别以及MVCC的底层原理
源于蚂蚁课堂的学习,点击这里查看(老余很给力)有猿友私信聊天说搞不明白事务隔离级别到底是什么意思,但面试又不可避免,只能死记硬背。但资深的面试官不讲武德,直接询问事务隔离级别底层原理,怎么办?来骗?来忽悠经验丰富的面试官?这好吗?这不好。我劝这些猿友,耗子尾汁,脚踏实地研究技术,不要搞窝里斗。本文帝都的雁为大家详细介绍一下mysql底层保证数据安全的原理。一、锁的分类万变不离其宗,锁是一个抽象的概念,按照不同的角度有不同的划分。1、以性能划分乐观锁:当线程获取不到...原创 2020-11-28 14:38:28 · 693 阅读 · 1 评论 -
mysql定位和优化慢查询的方案
源于蚂蚁课堂的学习,点击这里查看(老余很给力)是否遇到过这样的场景:因为一条sql查询耗时太长,降低用户体验;或者面对sql结合业务,不知道怎么写才能更高效地输出结果?今天帝都的雁为大家分享一下如何在千万级的数据量下输出高效的sql语句。(PS:需要有mysql执行流程原理的理论基础,可参考我的另一篇博文《mysql查询和修改的底层原理》)一、数据结构Mysql之所以可以快速地吞吐,很大程度上依赖于其底层的数据结构--B+树。首先我们先了解一下几种索引可选择的数据结构。...原创 2020-11-19 15:15:43 · 908 阅读 · 0 评论 -
mysql查询和修改的底层原理
源于蚂蚁课堂的学习,点击这里查看(老余很给力)Mysql作为主流数据库,有着强大的数据存储交互功能,成为当下程序猿必备的技能点。很多小伙伴可能对其了解仅限于sql的运用,但对其内部底层如何将数据存储和取出任然一知半解。本文,帝都的雁分享一下自己了解的mysql的底层原理。(PS:属于进阶知识,要对mysql的索引底层数据结构、存储引擎有一定概念)一、通讯方式Mysql采用半双工通讯。通讯方式分为单工、半双工和全双工。单工:请求方和接收方传输方向是单向的,比如遥控器。...原创 2020-11-12 10:22:52 · 2591 阅读 · 1 评论 -
浅谈mysql中的那些琐
读锁和写锁一种对行为的抽象描述,主流数据库引擎都是select为读锁,update/delete/insert为写锁表锁顾名思义,锁住整张表的数据行锁锁住数据所在行。表锁和行锁对比:性能:表锁<行锁锁的速度:表锁>行锁(表数据越大,开销越大,需找到表中所在行的数据,进行锁定)共享锁查询数据时,会对其加锁,期间可以有其它的读操作进入。(即共享锁之间可以共存)排它锁写入操作时,对数据进行的加锁处理,期间不允许其它请求访...原创 2020-05-09 14:04:58 · 135 阅读 · 0 评论 -
mysql存储过程空值赋值变量的问题
发现一个问题:mysql的存储过程,在赋值变量时,如果所赋值为空,则赋值失败,变量维持现状。比如:my_loop : LOOP IF(逻辑判断) TEHN leave my_loop; END IF; select id into my_id from user limit 1;END LOOP;假设第一次循环,查询my_id为1,则id被赋值为...原创 2019-09-03 16:06:29 · 2442 阅读 · 5 评论 -
mysql子程序的高级特性(二)
1.函数的只读高级特性DELIMITER $$CREATE FUNCTION test_1() RETURNS VARCHAR(111)READS SQL DATABEGIN DECLARE result VARCHAR(111) DEFAULT ''; SELECT NAME INTO result FROM test_score WHERE id < 20 LIMI...原创 2019-09-10 11:31:05 · 91 阅读 · 0 评论 -
mysql子程序的高级特性(三)
1.SQL SECURITY特性说明子程序运行使用创建者的许可来执行,还是使用调用者的许可来执行。默认是DEFINER(定义者)2.当SQL SECURITY是DEFINER时,即使是普通的只读用户,只要有这个子程序的执行权限,那么也能以定义者来执行sql,即便sql包含更新...原创 2019-09-25 10:38:30 · 125 阅读 · 0 评论 -
declare处理程序和处理条件
1.声明形式: DECLARE hander_type HANDLER FOR condition_value[...] sql_statement 例如: DECLARE CONTINUE HANDLER FOR NOT FOUND SET flag = true; 声明将一个句柄类型(处理程序)和指定的错误条件以及设置的变量关联起来2.处理程序han...原创 2019-09-25 13:08:50 · 282 阅读 · 0 评论 -
mysql之子程序的分支CASE
1.CASE分支子程序的case分支不同于select语句中的case分支delimiter $$create procedure test_case(my_id int)begin declare my_name varchar(255) default ''; select name into my_name from user where id = my...原创 2019-09-27 10:53:08 · 109 阅读 · 0 评论 -
mysql子程序的高级特性(一)
1.DETERMINISTIC特性(确定性)DELIMITER $$CREATE PROCEDURE test_prod()NOT DETERMINISTICBEGINUPDATE test_score SET SCORE = 6 WHERE ID < 5 LIMIT 1;END;$$DELIMITER ;NOT DETERMINISTIC 表示子程序包含了...原创 2019-09-03 13:16:40 · 457 阅读 · 0 评论 -
mysql触发器
示例1需求:往test_score插入数据的时候,把插入的id,name,status记录下来DELIMITER $$-- 触发器名称CREATE TRIGGER copy_score-- 触发在操作数据之前还是之后 after/beforeAFTER -- 触发动作 :insert/update/deleteINSERT -- 被触发的表ON test_score...原创 2019-09-03 10:46:47 · 101 阅读 · 0 评论 -
mysql函数之自定义函数应用综合示例(二)
1.示例1需求:输入ID,获得score、name、id组合的UUID值DELIMITER $$CREATE FUNCTION getuuid(my_id INT) RETURNS VARCHAR(300) READS SQL DATABEGIN DECLARE my_uuid VARCHAR(300) DEFAULT ''; SELECT CONCAT(id,'_',N...原创 2019-08-26 10:53:45 · 147 阅读 · 0 评论 -
mybatis批量操作出现BadSqlGrammarException
用过mybatis的猿友也许使用过它的批量操作(可以参考菜鸟程序猿之mybatis的批量操作),但是其实这个地方有个比较坑爹的问题,如下:这里为我的映射文件对应的sql <update id="testBatchUpd" parameterType="java.util.Map"> <foreach collection="dmsProdSkuStocks" ite...原创 2018-08-21 16:31:26 · 7265 阅读 · 1 评论 -
mysql存储过程之存储过程的参数(三)
1.存储过程的传入参数IN需求:传入数据的id返回对应的图片urlDELIMITER $$-- 入参CREATE PROCEDURE test(IN book_id BIGINT(11))BEGIN DECLARE url VARCHAR(255) DEFAULT ''; SELECT IMG_URL INTO url FROM book_mark WHERE id = ...原创 2019-08-16 11:27:38 · 467 阅读 · 0 评论 -
mysql存储过程之条件语句(四)
1.存储过程的条件语句需求:编写存储过程,传入ID如果是偶数,返回其url,否则返回IDDELIMITER $$CREATE PROCEDURE test3(IN BOOK_ID BIGINT(11))BEGIN -- 定义url DECLARE URL VARCHAR(255) DEFAULT ''; -- 判断语句 IF(BOOK_ID %2 ...原创 2019-08-16 17:33:41 · 586 阅读 · 0 评论 -
mysql存储过程之循环语句(五)
1.while循环语句需求:想数据库表插入20条数据DELIMITER $$CREATE PROCEDURE test_while()BEGIN -- 定义循环对象 DECLARE i INT DEFAULT 0; -- 判断是否执行下一次循环 WHILE(i<20) DO BEGIN -- 执行循环操作 SET i =...原创 2019-08-16 17:59:25 · 2675 阅读 · 0 评论 -
mysql存储过程之变量及其特点和应用(二)
案例1(变量及其特点和应用)通过存储过程获取id为2的表数据DELIMITER $$CREATE PROCEDURE test1()BEGIN-- 声明变量,一个declare只能声明一个遍历DECLARE NAME VARCHAR(32) DEFAULT '';-- 1、可以直接赋值-- set name = 'hahaha'; -- 2、可以通过查询将结果集赋值...原创 2019-08-13 10:07:33 · 224 阅读 · 0 评论 -
mysql存储过程之一个简单的存储过程(一)
1.语法结构-- 声明分隔符delimiter $$-- 创建存储过程create procedure 存储过程名称(参数列表)-- 开始执行存储过程begin-- 存储过程的逻辑select * from user;-- 结束存储过程end;--分隔符$$-- 重置分隔符delimiter ;案例如下:delimiter $$create...原创 2019-08-09 15:20:35 · 181 阅读 · 0 评论 -
mysql存储过程之游标使用(六)
1.什么是游标需求:修改id为偶数的记录分数DELIMITER &&CREATE PROCEDURE test_cur_1()BEGIN -- 定义开关 DECLARE stopflag INT DEFAULT 0; -- 定义数据存放的变量 DECLARE my_id VARCHAR(255) DEFAULT ''; -- 定义游标变量 DECLAR...原创 2019-08-22 17:51:47 · 151 阅读 · 0 评论 -
mysql函数之自定义简单的函数(一)
1.一个简单的函数需求:编写函数,传入ID, 返回nameDELIMITER $$-- 定义函数名称和参数列表CREATE FUNCTION getname(my_id INT)-- 定义函数返回值类型 RETURNS VARCHAR(255) -- 定义函数字符集 CHARSET utf8-- 定义函数访问数据的方式 READS SQL DATABEGIN D...原创 2019-08-26 10:25:56 · 370 阅读 · 0 评论 -
数据库的锁
写一篇数据库中的锁,方便以后回顾知识1、什么是数据库的锁 数据库是一个多用户使用的共享资源。当多个用户并发地存取数据时,在数据库中就会产生多个事务同时存取同一数据的情况。若对并发操作不加控制就可能会读取和存储不正确的数据,破坏数据库的一致性。 加锁是实现数据库并发控制的一个非常重要的技术。当事务在对某个数据对象进行操作前,先向系统发出请求,对其加锁。加锁后事务...原创 2018-12-11 15:06:43 · 151 阅读 · 0 评论