mysql
文章平均质量分 60
Dongguabai
这个作者很懒,什么都没留下…
展开
-
每天学习一点点之 MySQL TINYINT
我已经不是第一次遇到关于TINYINT的问题了。在 MySQL 中,当我们将某个字段设置为TINYINT,随着业务的扩展,我们可能会发现TINYINT的范围无法满足需求。这时需要修改字段属性。但如果表的数据量很大,或者由于分表导致涉及的表数量众多,这个过程可能会变得比较复杂。更糟糕的是,如果代码中的数据类型为int,而 MySQL 中的数据类型为TINYINT,可能会导致存储异常数据。原创 2023-11-30 21:04:27 · 1911 阅读 · 0 评论 -
MySQL 大杂烩
记录 MySQL 相关的小知识点。原创 2023-07-07 17:36:06 · 550 阅读 · 0 评论 -
MySQL 同时删除和添加多个字段
将一个超大表的部分字段值设置为null。原创 2022-12-30 11:31:39 · 7917 阅读 · 0 评论 -
JDBC的超时时间和常用配置
连接池中的连接被数据库关闭了,应用通过连接池getConnection时,都可能获取到这些不可用的连接,且这些连接如果不被其他线程回收的话,它们不会被连接池被废除,也不会重新被创建,占用了连接池的名额。案例:2019年在对数据库中间件ProxySQL滚动升级时,另一台虚机意外重启导致ProxySQL服务不可用,上层服务出现大量异常访问慢的情况的,通过jstack分析线程情况发现业务系统停止在JDBC的调用上,日志中大量的waiting状态的线程;导致服务长时间处于不可以用的状态,后经过重启服务解决问题;..转载 2022-08-09 14:58:05 · 9207 阅读 · 0 评论 -
MySQL的TinyInt类型及JDBC的url中的tinyInt1isBit参数
一、问题描述问题:在使用Java的jdbc读取tinyint(1)类型的数据时,rs.getObject(i)的值为Boolean类型的true/false。而数据库中存储的是1或0,那为啥用JDBC读取到的就是true或false了呢?所以,JAVA数据类型 和 MYSQL的数据类型转换,要注意tinyInt 类型,且存储长度为1的情况。二、原因分析MYSQL官方的JDBC文档定义转换规则如下:官方文档地址:https://dev.mysql.com/doc/connector-j/5.1/en/co转载 2022-06-01 10:42:50 · 878 阅读 · 0 评论 -
一次彻底解决因数据库全表扫描引发系统卡顿问题的实践
问题所在相信大家都遇到过因为数据库全表扫描生成大对象,然后系统疯狂 GC,引发系统卡顿的问题。能看到这样的 GC 日志:2021-11-20T01:28:52.240+0800: 108542.888: [GC pause (G1 Humongous Allocation) (young) (initial-mark), 0.1276229 secs]然后就是常规操作,jmap 下,MAT 看看内存,看到底是哪条 SQL 搞的鬼。解决思路我们常常会陷入这种“知道系统可能出现这样的问题,但是无法预原创 2021-12-02 23:11:23 · 719 阅读 · 1 评论 -
Mysql 插入中文错误:Incorrect string value: ‘\xE7\xA8\x8B\xE5\xBA\x8F...‘
出现Incorrect string value: '\xE7\xA8\x8B\xE5\xBA\x8F...' for column 'course' at row 1错误的原因是,数据库的编码格式为latin1 而我要将utf8的中文插入到数据库中。开始修改 修改数据库的编码alter table 表名 default character set utf8;仍然不能输入继续下一步更改列的编码即可alter table 表名 change 输入中文的字段名 修改后的字段名 varchar(50)转载 2021-08-27 22:03:51 · 751 阅读 · 0 评论 -
关于多个事务并发执行的一个问题
今天群里一个哥们提了一个问题,他面试中遇到的,问题大概是这么个意思:现在有10个任务,每个任务需要执行10s,用线程池并发处理,每个线程会插入数据,需求:只要有一个线程插入数据失败了,其他的所有线程的数据都需要回滚。这个是一个并发事务问题,也可以说是一个分布式事务问题,解决方案也不少,这里基于一种两阶段提交的方式进行处理。即这里主线程作为事务协调者,多个线程作为参与者,直到参与者全部执行了事务操作后会给协调者返回执行结果,在此期间协调者会一直阻塞,同时参与者也会阻塞直到协调者收到所有参与者的执行结果,原创 2021-03-24 21:39:53 · 978 阅读 · 1 评论 -
MySQL · 引擎特性 · 基于GTID复制实现的工作原理
GTID (Global Transaction IDentifier) 是全局事务标识。它具有全局唯一性,一个事务对应一个GTID。唯一性不仅限于主服务器,GTID在所有的从服务器上也是唯一的。一个GTID在一个服务器上只执行一次,从而避免重复执行导致数据混乱或主从不一致。在传统的复制里面,当发生故障需要主从切换时,服务器需要找到binlog和pos点,然后将其设定为新的主节点开启复制。相对来说比较麻烦,也容易出错。在MySQL 5.6里面,MySQL会通过内部机制自动匹配GTID断点,不再寻找bin转载 2021-03-22 21:53:25 · 183 阅读 · 0 评论 -
一次大量删除导致MySQL慢查的分析
背景监控上收到了大量慢查的告警,业务也反馈查询很慢,随即打开电脑确认慢查的原因。现象描述通过平台的慢查分析之后,我们发现慢查有以下特征:慢查的表名都是sbtest1,没有其他的表 大部分的慢查都是查表最新的数据,例如select * from sbtest1 limit 1; rows examined 为1,没有扫描大量的数据问题分析通对慢查的大致分析,SQL本身没有发现问题。那么是不是主机或者网络等有问题呢?经过对网络和主机磁盘的IO等的分析,负载均正常,没有丢包的现象。转载 2021-03-22 21:34:12 · 829 阅读 · 0 评论 -
MySQL中的重做日志(redo log),回滚日志(undo log),以及二进制日志(binlog)的简单总结
MySQL中有六种日志文件,分别是:重做日志(redo log)、回滚日志(undo log)、二进制日志(binlog)、错误日志(errorlog)、慢查询日志(slow query log)、一般查询日志(general log),中继日志(relay log)。其中重做日志和回滚日志与事务操作息息相关,二进制日志也与事务操作有一定的关系,这三种日志,对理解MySQL中的事务操作有着重要的意义。这里简单总结一下这三者具有一定相关性的日志。重做日志(redo log)作用: 防止在发生故转载 2021-03-22 20:45:03 · 269 阅读 · 0 评论 -
innodb_io_capacity,innodb_io_capacity_max参数介绍
innodb_io_capacity参数定义了InnoDB后台任务每秒可用的I/O操作数(IOPS),例如用于从buffer pool中刷新脏页和从change buffer中合并数据。innodb后台进程最大的I/O性能指标,影响刷新赃页和插入缓冲的数量,在高转速磁盘下,尤其是现在SSD盘得到普及,可以根据需要适当提高该参数的值。innodb_io_capacity=2000(公司配置)innodb_io_capacity 磁盘配置200 单盘SAS/SATA2000 SAS*12 RA转载 2021-03-16 15:05:25 · 3753 阅读 · 0 评论 -
MySQL 实现类似 indexOf 的功能
需求是这样的,想看下我传入的参数是不是以数据库中某个字段开头的。找了一下可以使用 MySQL 的 LOCATE 函数实现,示例如下:select LOCATE('e', 'abcde'); -- 返回 5-- 也就是说 LOCATE 会返回子串在字符串中的位置(从1开始)那么想判断一个字符串是不是以某个子串开头可以这么用:select * from e_group where LOCATE(name, '测试新增分组adadadadad') = 1输出结果:...原创 2021-02-26 11:37:29 · 764 阅读 · 0 评论 -
MySQL 中 on 条件和 where 条件的使用总结
1. on条件先于where条件的执行。on条件是在生成临时表时候执行,where是在临时表生成后对数据进行筛选的。2. 先抛开where条件,看On条件。不管on条件是否成了,左表的所有行数据都会select出来(不管右表条件是否成立),右表成立就select对应数据,不成立就置null。有可能是一对多。当两张表是在left join来关联时,条件跟在on后面:无论on条件是否成立,都会返回左表的值;当两张表是在left join来关联时,当条件放在where后面时:只有满足条件的记录会返回.转载 2021-01-27 16:31:11 · 1312 阅读 · 0 评论 -
Navicat 12 展示 BLOB 内容
网上说的都是老版本,新版本不适用,找了半天,这里记录一下。选中要查看的数据(记录的那一个字段)后,点击这里可以查看内容:原创 2021-01-25 15:15:01 · 854 阅读 · 0 评论 -
MySQL 5.7 复制的一个小 bug-XA 事务
线上一个5.7从库复制中断:mysql>show slave status\G*************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 192.168.0.1 Master_User: repl转载 2020-12-21 00:00:40 · 1137 阅读 · 1 评论 -
MySQL 分布式事务 XA 语法
XA事务简介XA 事务的基础是两阶段提交协议。需要有一个事务协调者来保证所有的事务参与者都完成了准备工作(第一阶段)。如果协调者收到所有参与者都准备好的消息,就会通知所有的事务都可以提交了(第二阶段)。MySQL在这个XA事务中扮演的是参与者的角色,而不是协调者(事务管理器)。mysql的XA事务分为内部XA和外部XA。 外部XA可以参与到外部的分布式事务中,需要应用层介入作为协调者;内部XA事务用于同一实例下跨多引擎事务,由Binlog作为协调者,比如在一个存储引擎提交时,需要将提交信息写入二..转载 2020-12-20 21:05:11 · 681 阅读 · 0 评论 -
SQLException: The server time zone value ‘EDT‘ is unrecognized or represents more than one time zone
异常:java.sql.SQLException: The server time zone value 'EDT' is unrecognized or represents more than one time zone.You must configure either the server or JDBC driver (via the 'serverTimezone' configuration property) to use a more specifc time zone value i转载 2020-12-19 17:50:29 · 754 阅读 · 1 评论 -
如何查找 MySQL 数据库文件路径
可以用查询系统命令来查看数据库文件的路径:show global variables like '%datadir%';下图是小编的MySQL数据库目录在这里每一个数据库都会创建以数据库名为文件夹的目录每一个表都会在该目录下根据不同的数据库引擎类型创建不同的存储文件...转载 2020-12-11 17:17:29 · 3585 阅读 · 0 评论 -
MySQL 中有关 TIMESTAMP 和 DATETIME 的总结
一、MySQL中如何表示当前时间?其实,表达方式还是蛮多的,汇总如下:CURRENT_TIMESTAMPCURRENT_TIMESTAMP()NOW()LOCALTIMELOCALTIME()LOCALTIMESTAMPLOCALTIMESTAMP()二、关于TIMESTAMP和DATETIME的比较一个完整的日期格式如下:YYYY-MM-DD HH:MM:SS[.fraction],它可分为两部分:date部分和time部分,其中,date部分对应格式中...转载 2020-12-08 23:13:09 · 251 阅读 · 0 评论 -
MySQL 删除数据后释放磁盘空间
drop table table_name 立刻释放磁盘空间 ,不管是 Innodb和MyISAM ;truncate table table_name立刻释放磁盘空间 ,不管是 Innodb和MyISAM;delete from table_name 删除表的全部数据,对于MyISAM 会立刻释放磁盘空间 ,而InnoDB 不会释放磁盘空间;delete from table_name where xx 带条件的删除, 不管是innodb还是MyISAM都不会释放磁盘空间;delete操作后使用o转载 2020-12-07 17:48:16 · 1323 阅读 · 0 评论 -
mysql “Invalid use of null value“ 解决方法
1.问题描述因为要更改"information"表中的"编号"列为非空,使用数据库查询语句“alter table information modify '编号' varchar(255) not null”可以更改其他的列,但只是在编号列出错,错误信息为Invalid use of NULL value。很是奇怪,其他列使用该命令可以查,为什么仅有编号列无法查。2.错误原因出现该错误的原因可能是因为已存在的数据的‘编号’列为null,与not null的设置冲突。(查到的原因)。我自己转载 2020-10-23 14:05:38 · 4226 阅读 · 0 评论 -
MyBatis 和 MySQL 按 in 的参数顺序排序
前言:笔者在elasticsearch中查询出来的文章id,需要在mysql中连表查询,但是输出默认是按照主键id排序的,我是想按照es输出的id排序,毕竟es全文检索的内容是越像权值越大越在前面。所以笔者需要按in的参数顺序排序。1.按in的参数顺序排序,mysql中用field()函数,mybatis用foreach在mysql中按in的参数顺序排序其实很简单,只要用到field()函数就可以了SELECT a.article_id, a.title,转载 2020-10-23 13:55:02 · 1548 阅读 · 0 评论 -
MySQL 去除列的 on update current_timestamp 属性
所有修改列的属性都可以这个来操作:ALTER TABLE user MODIFY create_time datetime NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '创建时间';原创 2020-09-24 15:28:57 · 1119 阅读 · 0 评论 -
关于 SQL 中 ON DUPLICATE KEY UPDATE 的使用
语法如下:INSERT INTO table1 (a,b,c) VALUES (1,2,3) ON DUPLICATE KEY UPDATE c=c+1;假设table1表中的主键或unique索引是a字段的话,当执行上面sql时候,如果数据库table1表中已存在a=1的记录则更新这条记录的c字段的值为原来值+1,ON DUPLICATE KEY UPDATE 语法的目的是为了解决当表中UNIQUE索引或者primary key(主键)出现重复时,就会执行update操作,返回值2,如果没有出现.转载 2020-06-22 14:39:14 · 598 阅读 · 0 评论 -
小议 MySQL InnoDB 事务隔离 和 MyBatis 一级缓存
相关文章:一次群聊“事件”引发的对 @Transactional 和 MyBatis 的思考昨天跟一个同学探讨了一个问题,虽然是个小问题,但是牵扯的内容还是很多的,这里做一下总结。他的代码简化如下: @Autowired private UserMapper userMapper; @Transactional public void test(){ //此时数据库是没有 name 为 "test..." 的 User Strin原创 2020-06-17 18:16:12 · 567 阅读 · 3 评论 -
MySQL 创建表的时候,添加字段注释
#创建表的时候写注释CREATE TABLE userinfo( id INT COMMENT '编号', uname VARCHAR(40) COMMENT '用户名', address VARCHAR(120) COMMENT '家庭住址', hobby VARCHAR(200) COMMENT '爱好' )COMMENT = '用户信息表'; #修改表的注释ALTER TABLE userinfo COMMENT '用户信息资料表'; #修改字段的注释,注意:字段名和字段类型.转载 2020-05-21 13:40:58 · 901 阅读 · 0 评论 -
mysql中tinyint、smallint、int、bigint的区别
tinyint从 -2^7 (-128) 到 2^7 - 1 (123) 的整型数据。存储大小为1 个字节。unsigned 是从 0 到 255 的整型数据。所以建表的时候 只能是tinyint(3),哪怕你建tinyint(100),他最大还是3位这么多。smallint从 -2^15 (-32,768) 到 2^15 - 1 (32,767) 的整型数据。存储大小...转载 2019-09-10 18:43:34 · 678 阅读 · 0 评论 -
MySQL 的1093错误
1093错误为:但修改一个表的时候子查询不能是同一个表,解决办法:把子查询再套一层就可以了,例如:update mt_device set area_id=null WHERE reg_code in(select c.reg_code from (select reg_code from mt_device where area_id=19)c);这是对的但是 update mt_d...转载 2019-09-24 13:23:42 · 550 阅读 · 0 评论 -
MySQL in 排序按 in 里面的顺序来排序
转自:https://www.cnblogs.com/wayne173/p/6714259.htmlSQL: select * from table where id IN (3,9,6);这样的情况取出来后,其实,id还是按3,6,9,排序的,但如果我们真要按IN里面的顺序排序怎么办?SQL能不能完成?是否需要取回来后再foreach一下?其实可以这样sql: select * fro...转载 2019-07-17 16:06:23 · 387 阅读 · 0 评论 -
MySQL 中 filesort 优化
转自:https://blog.csdn.net/shengqianfeng/article/details/80804218用Explain分析SQL语句的时候,经常发现有的语句在Extra列会出现Using filesort,根据mysql官方文档对他的描述:MySQL must do an extra pass to find out how to retrieve the row...转载 2018-12-19 19:29:19 · 1144 阅读 · 0 评论 -
表情存储异常--mybatis抛出异常(java.sql.SQLException: Incorrect string value: '\xF0\x9F\x92\x94' for column 'na
背景iOS端测试时发现,在备注一栏输出emoji表情,保存时出现系统异常java项目架构 spring-boot+mybatis+德鲁伊连接池现象抛出java.sql.SQLException: Incorrect string value: '\xF0\x9F\x92\x94' for column 'name' at row 1定位1、数据库字段、表、数据库、mys...转载 2019-09-09 21:16:49 · 571 阅读 · 0 评论 -
The last packet successfully received from the server was xx milliseconds ago. The last packet sent
同组同事遇到的问题。完成异常信息如下:The last packet successfully received from the server was xxx milliseconds ago. The last packet sent successfully to the server was xxx milliseconds ago.### Error querying d...原创 2019-08-27 13:24:50 · 4388 阅读 · 0 评论 -
1217 - Cannot delete or update a parent row: a foreign key constraint fails
今天删除出现了这个异常:主要是有外键关联了。可以临时设置一下:SET FOREIGN_KEY_CHECKS = 0;执行完了再记得设置回来:SET FOREIGN_KEY_CHECKS = 1;其实我们从一些客户端导出 SQL 的时候也带了这个 SQL:...原创 2019-08-26 21:47:27 · 1362 阅读 · 0 评论 -
理解 MySQL 索引(一)
要理解 MySQL 的索引就需要先了解存储引擎。这个是网上找到的一张 MySQL 体系结构图: 可以看到 MySQL 的存储引擎是一种可插拔式的设计,包括常用的 InnoDB 也是第三方公司遵循 MySQL 规范实现的。MySQL 的索引机制就是靠这些可插拔式的存储引擎实现的。要注意的是 MySQL 的存储引擎是表级别的。正确的创建合适的索引是提升数据库查询性能的基础。索引是什...原创 2019-02-01 23:03:42 · 233 阅读 · 0 评论 -
浅谈 MySQL 中的 IN 和 OR
有的朋友总会纠结于到底是用 IN 好,还是 OR 好,其实理解清楚其中的原理后就很简单了。在很多关系型数据库中 IN 和 OR 的逻辑是一样的,即将 IN 转化为 OR。但是如果是使用的 MySQL,IN 和 OR 是不同的,特别是在做全表扫描的时候。假设 col 字段中有这么几条数据:查询 SQL 如下:--ORselect * from table where col ...原创 2019-01-03 20:36:59 · 1079 阅读 · 0 评论 -
MySQL SQL 语句最大长度设置方法
转自:https://www.cnblogs.com/qiumingcheng/p/10153701.html今天发现了一个错误:Could not execute JDBC batch update最后发现原因是SQL语句长度大于1M,而我机器上的mysql是默认设置,也就是说mysql通讯的数据包大小设置是1M,这就造成sql语句执行失败。于是把mysql的配置文件(my.ini)中的...转载 2019-01-03 17:59:49 · 1057 阅读 · 0 评论 -
MySQL 通信协议的半双工机制理解
转自:https://www.aliyun.com/jiaocheng/1110980.html一、通信知识中的半双工概念通信的方式分为:单工通信,半双工,全双工。全双工的典型例子是:打电话。电话在接到声音的同时也会传递声音。在一个时刻,线路上允许两个方向上的数据传输。网卡也是双工模式。在接收数据(比如一直在下载东西)的同时,又发送数据(比如请求网页)半双工:在同一个时刻只能进行一个动...转载 2019-01-03 17:52:37 · 416 阅读 · 0 评论 -
58到家数据库30条军规解读
原文地址:http://chuansong.me/n/1574852446614军规适用场景:并发量大、数据量大的互联网业务军规:介绍内容解读:讲解原因,解读比军规更重要 一、基础规范(1)必须使用InnoDB存储引擎解读:支持事务、行级锁、并发性能更好、CPU及内存缓存页优化使得资源利用率更高 (2)必须使用UTF8字符集解读:万国码,无需转码,无乱码风险...转载 2018-09-22 20:56:15 · 317 阅读 · 0 评论 -
SQL查询今天、昨天、7天内、30天
原文地址:https://www.cnblogs.com/EasyLive2006/p/8066224.html今天的所有数据:select * from 表名 where DateDiff(dd,datetime类型字段,getdate())=0昨天的所有数据:select * from 表名 where DateDiff(dd,datetime类型字段,getdate())=17天内...转载 2018-09-11 15:47:47 · 390 阅读 · 0 评论