mysql
文章平均质量分 62
jaryle
这个作者很懒,什么都没留下…
展开
-
mysql 5.7基于组提交的并行复制
mysql原创 2022-10-27 19:58:04 · 655 阅读 · 1 评论 -
mysql幻读问题
问题:什么样的情况叫做幻读? Mysql 可重复读隔离级别下,到底能不能阻止幻读? 什么是当前读,什么是快照读?幻读的定义:事务A 按照一定条件进行数据读取, 期间事务B 插入了相同搜索条件的新数据,事务A再次按照原先条件进行读取时,发现了事务B 新插入的数据 称为幻读如果事务A 按一定条件搜索, 期间事务B 删除了符合条件的某一条数据,导致事务A 再次读取时数据少了一条。这种情况归为 不可重复读准备工作:Mysql 隔离级别为 可重复读;CREATE TABLE `a.原创 2021-12-01 14:37:02 · 808 阅读 · 0 评论 -
mysql Innodb在RR级别如何避免幻读
什么是幻读 事务不是独立执行时发生的一种现象,例如第一个事务对一个表中的数据进行了修改,这种修改涉及到表中的全部数据行。 同时,第二个事务也修改这个表中的数据,这种修改是向表中插入一行新数据。那么,以后就会发生操作第一个事务的用户发现表中还有没有修改的数据行,就好象 发生了幻觉一样。 mysql如何实现避免幻读 在快照读读情况下,mysql通过mvcc来避免幻读。 在当前读读情况下,mysql通过next-key来避免幻读 什么是mvcc mvcc全称是multi v..原创 2021-07-23 11:18:47 · 415 阅读 · 0 评论 -
mysql主从复制(读写分离)数据不一致解决方案(^_^^_^^_^)
mysql引入redis后,暂不考虑主从复制和读写分离,我们的策略是:一、读的时候更新缓存呢(推荐)分析如下:我们在操作数据库写的时候,删除缓存,更新数据库,然后在读的时候,更新缓存(这个操作如果不是强一致性的情况下,我们这4步操作都不需要加锁,可以通过设置key的过期时间来解决数据的最终一致性)二、写的时候更新缓存呢(不推荐)分析如下:我们在操作数据库写的时候,去更新缓存,更新数据库,读的时候直接读缓存即可(这样在高并发的场景下,需要保证这二步操作的原子性,影响性能,不推荐)在读.原创 2020-12-10 15:30:38 · 3458 阅读 · 1 评论 -
在MySQL中重复的插入数据不抛异常(性能待验证)
最常见的方式就是为字段设置主键或唯一索引,当插入重复数据时,抛出错误,程序终止,但这会给后续处理带来麻烦,因此需要对插入语句做特殊处理,尽量避开或忽略异常,下面我简单介绍一下,感兴趣的朋友可以尝试一下:这里为了方便演示,我新建了一个user测试表,主要有id,username,sex,address这4个字段,其中主键为id(自增),同时对username字段设置了唯一索引:01 insert ignore into(这个可以使用下)即插入数据时,如果数据存在,则忽略此次插入,前提条件是插入的数原创 2020-11-12 17:25:10 · 3372 阅读 · 0 评论 -
MySQL中,当update修改数据与原数据相同时会再次执行吗?
一、背景本文主要测试MySQL执行update语句时,针对与原数据(即未修改)相同的update语句会在MySQL内部重新执行吗?二、测试环境MySQL5.7.25Centos 7.4三、binlog_format为ROW1、参数image2、测试步骤session1imagesession2imagesession1image3、总结在binlog_format=row和binlog_row_image=FULL时,由于MyS原创 2020-11-12 17:01:34 · 451 阅读 · 0 评论 -
Transactional超时时间控制与mysql事务超时时间
项目使用的是spring+mybatis+mysql,今天,我需要把处理一个业务就是,当用户出金失败时,事务能够回滚,同时减少用户的等待时间,因为我发现当处理失败时,用户需要等上1分钟以上的时间,这是不合理的。那么经过一系列的调查发现:spring的事务超时(使用Java注解方式)和mysql InnoDB事务超时是相互关联的。在一个需要进行事务回滚的方法上加入@Transactional的事务注解,timeout超时时间设置为2秒,也就是说发生事务回滚后,2秒钟后对用户响应。 @Trans.原创 2020-08-31 15:16:16 · 2232 阅读 · 0 评论 -
高一致性分布式galera cluster(多主)集群
何谓Galera Cluster?就是集成了Galera插件的MySQL集群,是一种新型的,数据不共享的,高度冗余的高可用方案,目前Galera Cluster有两个版本,分别是Percona Xtradb Cluster和MariaDB Cluster,都基于Galera,所以这里都统称为Galera Cluster,因为Galera本身具有多主特性,所以Galera Cluster也就是M原创 2017-09-05 11:17:16 · 7175 阅读 · 1 评论 -
mysql数据库root密码忘记怎么办
2.修改MySQL的登录设置: # vi /etc/my.cnf 在[mysqld]的段中加上一句:skip-grant-tables 例如: [mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock skip-grant-tables 保存并且退出vi。 3.重新启动mysqld #原创 2017-09-01 16:30:33 · 329 阅读 · 0 评论 -
mysql 存储过程中使用动态sql
--存储过程名和参数,参数中in表示传入参数,out标示传出参数,inout表示传入传出参数create procedure p_procedurecode(in sumdate varchar(10)) begin declare v_sql varchar(500); --需要执行的SQL语句 declare sym varchar(6);原创 2017-09-27 09:46:02 · 933 阅读 · 0 评论 -
mysql中count函数和sum函数的用法
mysql中用于统计的二个函数,而这二个函数通常和group by分组函数配合使用一、count(*)是统计每一组有多少行count(*)是将返回表格中所有存在的行的总数包括值为null的行。然而count(列名)将返回表格中除去null以外的所有行的总数(有默认值的列也会被计入)二、distinct 列名,得到的结果将是除去值为null和重复数据后的结果。三、sum()分组之后通...原创 2018-11-03 17:18:52 · 1673 阅读 · 0 评论 -
mysql5.6及以上版本安装后修改root密码
1.关闭mysql service mysql/mysqld stop(是mysql还是mysqld取决于你在chkconfig开机启动中添加的名字,可以使用chkconfig --list显示)2、跳过权限启动 mysql的bin目录下使用:mysqld_safe --skip-grant-table &3、mysql -u root mysql mysql原创 2017-08-11 12:06:27 · 4385 阅读 · 0 评论 -
centos下安装多个mysql数据库
MySQL的多实例有两种方式可以实现,两种方式各有利弊。 第一种是使用多个配置文件启动不同的进程来实现多实例,这种方式的优势逻辑简单,配置简单,缺点是管理起来不太方便。 第二种是通过官方自带的mysqld_multi使用单独的配置文件来实现多实例,这种方式定制每个实例的配置不太方面,优点是管理起来很方便,集中管理。 下面就分别来实战这两种多实例的安装和管理先来学习第一种使用多个原创 2017-08-16 13:25:10 · 2352 阅读 · 0 评论 -
mysql5.7修改用户的密码和给用户授权
一、修改密码mysql -u root -p update mysql.user setauthentication_string=password(“新密码”) where User=”test” and Host=”localhost”; flush privileges;mysql5.7以后mysql.user表中没有了password字段,而是使用authentic原创 2017-08-07 18:51:38 · 14934 阅读 · 1 评论 -
MySQL的btree索引和hash索引的区别
hash 索引结构的特殊性,其检索效率非常高,索引的检索可以一次定位,不像B-Tree 索引需要从根节点到枝节点,最后才能访问到页节点这样多次的IO访问,所以 Hash 索引的查询效率要远高于 B-Tree 索引。可 能很多人又有疑问了,既然 Hash 索引的效率要比 B-Tree 高很多,为什么大家不都用 Hash 索引而还要使用 B-Tree 索引呢?任何事物都是有两面性的,Has原创 2017-08-08 12:57:10 · 189 阅读 · 0 评论 -
学会4种备份MySQL数据库(基本备份方面没问题了)
前言我们试着想一想, 在生产环境中什么最重要?如果我们服务器的硬件坏了可以维修或者换新, 软件问题可以修复或重新安装, 但是如果数据没了呢?这可能是最恐怖的事情了吧, 我感觉在生产环境中应该没有什么比数据跟更为重要. 那么我们该如何保证数据不丢失、或者丢失后可以快速恢复呢?只要看完这篇, 大家应该就能对MySQL中实现数据备份和恢复能有一定的了解。为什么需要备份数据?其转载 2017-08-08 10:10:59 · 453 阅读 · 0 评论 -
mysql中的concat函数
MySQL中concat函数使用方法:CONCAT(str1,str2,…) 返回结果为连接参数产生的字符串。如有任何一个参数为NULL ,则返回值为 NULL。注意:如果所有参数均为非二进制字符串,则结果为非二进制字符串。 如果自变量中含有任一二进制字符串,则结果为一个二进制字符串。一个数字参数被转化为与之相等的原创 2017-07-23 15:47:49 · 273 阅读 · 0 评论 -
mysql存储过程中的on duplicate key update的用法
insert语句的末尾添加on duplicate key update语法:如果插入行出现唯一索引或者主键重复时,则执行旧的update;如果不会导致唯一索引或者主键重复时,就直接添加新行。例如:如果列a被定义成唯一索引(unique)或者主键(primary key),并且a=1,此时使用insert 语句的末尾加on duplicate key update语句时,INSERT IN原创 2017-07-23 14:45:42 · 3634 阅读 · 0 评论 -
mysql中表中操作有关键字的字段时,必须加撇号(·),否则会报错,语法正确也报错。
今天在操作数据库往表中插入数据时,表中有个key字段,怎么添加都不行,总是报错。搞了好长一段时间,郁闷呢,后来查资料才知道,key是mysql关键字insert into tb_config (key,val) values ('vm.0.8','192.168.137.188:9080');一直报错。修改为key二端加撇号(·)insert into tb_config (·ke原创 2017-10-13 17:12:58 · 7191 阅读 · 0 评论 -
mysql中in函数和find_in_set函数的区别详解
前段时间项目中使用到Mysql的FIND_IN_SET函数,感觉挺好用的。过一段时间,老大找到我说,这个需要改为IN,哈哈,只能改了,原因会在下面分析到!CREATE TABLE `test` ( `id` int(8) NOT NULL auto_increment, `name` varchar(255) NOT NULL, `list` varchar(255) NOT NU转载 2017-11-20 17:12:29 · 3483 阅读 · 0 评论 -
mysql读写分离和主从复制的基本原理
mysql的读写分离的基本原理是:让master(主数据库)来响应事务性操作,让slave(从数据库)来响应select非事务性操作,然后再采用主从复制来把master上的事务性操作同步到slave数据库中。《MySQL Proxy learns R/W Splitting》中详细的介绍了这种技巧以及连接池问题: 为了实现读写分离我们需要连接池。我们仅在已打开原创 2016-07-23 12:20:41 · 18437 阅读 · 1 评论 -
mysql 类型转换 使用CAST或者CONVERT把varchar类型转换int排序
1 BINARY[(N)]2 CHAR[(N)]3 DATE4 DATETIME5 DECIMAL6 SIGNED [INTEGER]7 TIME8 UNSIGNED [INTEGER]--使用CAST将varchar转换成int类型排序select server_id from cardserver where game_id = 1 order by CAST(serv...原创 2019-06-24 20:46:42 · 3416 阅读 · 0 评论 -
mysql union 和union all 的区别
MySQL UNION 用于把来自多个SELECT语句的结果组合到一个结果集合中。语法为:SELECT column,... FROM table1 UNION [ALL]SELECT column,... FROM table2...在多个 SELECT 语句中,对应的列应该具有相同的字段属性,且第一个 SELECT 语句中被使用的字段名称也被用于结果的字段名称。...原创 2019-06-21 14:30:11 · 233 阅读 · 0 评论 -
mysql sum(if())和count(if())用法
SELECT SUM(if(category=1,size,0)) ,COUNT(if(category=1,true,null)) FORM t_file;首先了解下:count函数mysql中count函数用于统计数据表中的行的总数,或者根据查询结果统计某一列包含的行数,常见的用法如下 count(*) 计算表的总行数,包括空值;count(字段名) 计算指定列下的总行数,忽略空...原创 2019-06-03 11:21:37 · 945 阅读 · 0 评论 -
嵌套事务未回滚解决方案(^_^)
首先想到的是事务的传播行为这里的Propagation是事务的传播行为,默认是REQUIRED,意思是如果当前没有事务,就开启一个事务,如果已经存在一个事务,就加入到这个事务中;REQUIRES_NEW,新建事务,如果当前存在事务,把当前事务挂起;意思是这里执行到child()方法时,parent所在的事务就会挂起,方法child就会起一个新的事务,等待方法child的事务完成以后,方法p...原创 2019-03-28 11:22:18 · 1869 阅读 · 2 评论 -
mysql新版本中对group by的新特性报错
mysql命令gruop by报错this is incompatible with sql_mode=only_full_group_by看一下ONLY_FULL_GROUP_BY的意思是:对于GROUP BY聚合操作,如果在SELECT中的列,没有在GROUP BY中出现,那么这个SQL是不合法的,因为列不在GROUP BY从句中,也就是说查出来的列必须在group by后面出现否则就会...原创 2018-11-22 00:28:08 · 1019 阅读 · 0 评论 -
mysql的悲观锁、乐观锁、死锁的处理(^_^)
首先来了解一下mysql的一些锁概念悲观锁,乐观锁,死锁,行锁,表锁,共享锁(又称读锁),排它锁(又称写锁)共享锁和排它锁都属于悲观锁范畴一、先来说说mysql for update 是mysql的一种加锁方式,排它锁,加锁后别的用户可以读取数据,但是不能更改数据。我们举一个项目中常见的应用场景吧。 比如有一张表 他有三个字段。id代表商品id ,name代表商品名字,coun...原创 2018-11-22 00:14:50 · 1654 阅读 · 1 评论 -
mysql的悲观锁和乐观锁
mysql的并发操作时而引起的数据的不一致性(数据冲突):丢失更新:两个用户(或以上)对同一个数据对象操作引起的数据丢失。 解决方案:1.悲观锁,假设丢失更新一定存在;sql后面加上for update;这是数据库的一种机制。 2.乐观锁,假设丢失更新不一定发生。update时候存在版本,更新时候按版本号进行更新。一、乐观锁乐观锁不是数据库自带的,需要我们...转载 2018-09-04 12:16:52 · 18174 阅读 · 10 评论 -
mysql 存储过程中游标cur和while循环的嵌套使用
本来对存储过程不是很精,我们现在做的项目,基本上好多都是使用存储过程来完成一些业务逻辑的处理等。这里举例使用存储过程来实现支付完成后商品库存减少的功能: 这里使用到了while循环和cur游标的循环嵌套。main:BEGIN #处理付款成功减库存功能 #传递参数是订单id(oid) DECLARE tpid varchar(100); #DECLARE rt int def...原创 2018-07-17 15:04:37 · 3473 阅读 · 0 评论 -
mysql ifnull函数的使用
在使用left join等联表查询时,常遇到某些字段为null,一般都在后台语言使用if a==null 判断做处理,其实MySQL本身也有一个ifnull函数可以处理。name表:mysql> select * from name;+------+-----------+| id | user |+------+-----------+| 1 | xiao原创 2017-12-12 10:32:24 · 507 阅读 · 0 评论 -
declare handler 声明异常处理的语法
声明异常处理的语法DECLARE{EXIT | CONTINUE}HANDLER FOR{error-number | SQLSTATE error-string | condition}SQL statement上述定义包括:Handler Type (CONTINUE,EXIT)//处理类型 继续或退出Handler condition (SQLSTAT原创 2017-07-23 12:12:24 · 4469 阅读 · 0 评论 -
使用mysql存储过程需要注意的
main:begin declare done int default 0; declare tid varchar(50); DECLARE cur CURSOR FOR select linkid from tmp_userservice_pool; #parse order content to get every parameter DECLARE CONTINUE HAN原创 2017-07-23 11:20:52 · 306 阅读 · 0 评论 -
SELECT INTO 和 INSERT INTO SELECT 两种表复制语句
SELECT INTO 和 INSERT INTO SELECT 两种表复制语句 Insert是T-sql中常用语句,Insert INTO table(field1,field2,...) values(value1,value2,...)这种形式的在应用程序开发中必不可少。但我们在开发、测试过程中,经常会遇到需要表复制的情况,如将一个table1的数据的部分字段复制到转载 2016-10-15 12:28:21 · 270 阅读 · 0 评论 -
数据库为什么需要锁机制?有哪些锁机制?
【为什么要锁】 数据库是一个多用户使用的共享资源,比如一个用户表t_user,两个浏览器前面的人登录了同个一个账号,把电话号码改了。当多个用户并发地存取数据时,在数据库中就会产生多个事务同时存取同一数据的情况。若对并发操作不加控制就可能会读取和存储不正确的数据,破坏数据库的一致性(脏读,不可重复读,幻读等),可能产生死锁。为了解决这个问题,加锁是一个非常重要的技术,对实现数据库并发控转载 2016-08-23 17:57:59 · 1643 阅读 · 0 评论 -
乐观锁和悲观锁的区别
悲观锁(Pessimistic Lock), 顾名思义,就是很悲观,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会block直到它拿到锁。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。乐观锁(Optimistic Lock), 顾名思义,就是很乐观,每次去拿数据的时候都认为别人转载 2016-08-23 10:01:31 · 338 阅读 · 0 评论 -
MySQL读写分离部署
场景描述:数据库Master主服务器:192.168.10.130数据库Slave从服务器:192.168.10.131MySQL-Proxy调度服务器:192.168.10.132以下操作,均是在192.168.10.132即MySQL-Proxy调度服务器 上进行的。3.1 MySQL的安装与配置具体的安装过程与上文相同。3.2 检查系统所需软件包通转载 2016-07-25 17:14:30 · 515 阅读 · 0 评论 -
tinyint(1)和tinyint(4)的区别和用法
1 bytes = 8 bit ,一个字节最多可以代表的数据长度是2的8次方 11111111 在计算机中也就是-128到1271.BIT[M]位字段类型,M表示每个值的位数,范围从1到64,如果M被忽略,默认为12.TINYINT[(M)] [UNSIGNED] [ZEROFILL] M默认为4很小的整数。带符号的范围是-128到127。无符号的转载 2016-07-25 16:39:24 · 105222 阅读 · 3 评论 -
mysql使用索引为什么查询速度变快很多?
首先来看看表是否有索引的命令show index from 表名;看到主键索引,索引类型是BTREE(二叉树)正是因为这个二叉树算法,让查询速度快很多,二叉树的原理,就是取最中间的一个数,然后把大于这个数的往右边排,小于这个数的就向左排,每次减半,然后依次类推,每次减半,形成一个树状结构图例如上面的例子,我们不使用索引的话,需要查询11次才把编号为4的数据取出,如果原创 2016-07-25 14:39:23 · 17259 阅读 · 2 评论 -
配置mysql5.5主从服务器(转)
教程开始:一、安装MySQL说明:在两台MySQL服务器192.168.21.169和192.168.21.168上分别进行如下操作,安装MySQL 5.5.22 二、配置MySQL主服务器(192.168.21.169)mysql -uroot -p #进入MySQL控制台create database osyunweidb; #建立数据库osyunweidb转载 2016-07-25 12:57:46 · 290 阅读 · 0 评论 -
mysql慢查询
首先我们需要慢查询定位可以通过show status 来查看数据库的当前连接数,运行了多长时间,执行select/insert/update/delete语句的次数等show status like "com_select";show status like "connections"; //多少连接数show status like "uptime";//数据库运行了多长时间原创 2016-07-24 21:06:42 · 298 阅读 · 0 评论