![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
DB
文章平均质量分 69
loopnz_
这个作者很懒,什么都没留下…
展开
-
insert on duplicate key update多个唯一索引踩坑
可以看出,id=1和id=2两行都匹配到了,但是只更新了一行数据,受影响的行数为2。(按索引被添加到表上的顺序排序)。on duplicate key update 这个语义的逻辑是,插入一行数据,如果碰到唯一键约束,就执行后面的更新语句。这里需要注意的是:如果行作为新记录被插入,则受影响行的值为1;如果原有的记录被更新,则受影响行的值为2。举例:表test_tbl有如下数据,但是有两个唯一索引:UNIQUE KEY a (如果该表中,由多个唯一索引,需要特别注意,出现重复时则该语句只能更新其中一行记录。原创 2023-08-15 00:02:53 · 1579 阅读 · 0 评论 -
MySQL的日志系统
MySQL体系结构与查询流程不一样的是,更新流程还涉及两个重要的日志模块,它们正是我们今天要讨论的 主角:redo log(重做日志)和 binlog(归档日志)。如果接触 MySQL,那这两个词肯 定是绕不过的,我后面的内容里也会不断地和你强调。不过话说回来,redo log 和 binlog 在设计上有很多有意思的地方,这些设计思路也可以用到你自己的程序里。原创 2023-08-13 16:53:09 · 117 阅读 · 0 评论 -
MySQL join是怎么工作的
首先准备t1 t2表可以看到,这两个表都有一个主键索引 id 和一个索引 a,字段 b 上无索引。存储过程 idata() 往表 t2 里插入了 1000 行数据,在表 t1 里插入的是 100 行数据。原创 2023-08-13 16:46:44 · 45 阅读 · 0 评论 -
MySQL order by是怎么工作的
Extra 这个字段中的“Using filesort”表示的就是需要排序,MySQL 会给每个线程分配一块内存用于排序,称为 sort_buffer。满足 city='杭州’条件的行,是从 ID_X 到 ID_(X+N) 的这些记录。我们暂且把这个排序过程,称为全字段排序,执行流程的示意图如下所示,下一篇文章中我们还会用到这个排序。“按 name 排序”这个动作,可能在内存中完成,也可能需要使用外部排序,这取决于排序所需的内存和参数 sort_buffer_size。原创 2023-08-13 16:44:14 · 43 阅读 · 0 评论 -
MySQL数据库编码
其他类型的排序规则是cs(区分大小写),用于区分大小写的文本数据,以及bin(编码需要匹配),逐位排序,适用于真正编码的二进制数据(例如,包括Base64)的字段。区分大小写的排序会导致一些奇怪的结果,区分大小写的比较会导致重复的值只在字母大小写上有所不同。utf8mb4_unicode_ci:是基于标准的Unicode来排序和比较,能够在各种语言之间精确排序,Unicode排序规则为了能够处理特殊字符的情况,实现了略微复杂的排序算法。UTF-8是使用1~4个字节,一种变长的编码格式,字符编码。原创 2023-08-06 23:41:16 · 130 阅读 · 0 评论 -
彻底搞懂MySQL TimeStamp的时区问题
MySQL驱动在发送sql前,会将jdbc中的Date对象参数,根据serverTimeZone配置的时区转化为日期字符串后,再发送sql请求给MySQL server,同样在MySQL server返回查询结果后,结果中的日期值也是日期字符串,MySQL驱动会根据serverTimeZone配置的时区,将日期字符串转化为Date对象。因此,当serverTimeZone与数据库实际时区不一致时,会发生时区转换错误,导致时间偏差,如下:比如一个时间值是东8区的。原创 2023-08-06 23:39:13 · 3495 阅读 · 0 评论 -
如何解决MySQL深分页
在每次返回数据的时候,都将当前页的最大id和最小id返回给前端,然后前端在请求上一页/下一页数据的时候,带上这个minId和maxId,这样使用id进行过滤,这样能有效避免大量数据排序问题。原创 2023-08-06 23:27:43 · 130 阅读 · 0 评论