mysql
叹人间,美中不足今方信
这个作者很懒,什么都没留下…
展开
-
java字段数据转义为mysql字段数据
package com.idea.plugin.ext.jdbc;import java.nio.ByteBuffer;import java.nio.CharBuffer;import java.nio.charset.CharsetEncoder;/** * sql转义 * * @author yanzhao * @date 2021/12/29 16:05 * @since 1.0.0 */public class SQLEscape { /** * @原创 2022-01-16 00:34:25 · 734 阅读 · 0 评论 -
MySQL多个left join on关联条件的顺序
注意:下面的案例特别重要!请重视!SQL有点长,但确实是干货!结论如果存在多个left join on,请注意on后面的条件与哪个表关联。这一条统计的SQL很重要!例如表A,B,C,A left join B on A.x = B.x left join C on A.x = C.x,B和C的都要和A建立关联,B和C之间是没有任何数据上的关系。但是 如果把A.x = C.x改成B.x = C....原创 2019-12-18 11:49:14 · 16713 阅读 · 2 评论 -
MySQL InnoDB(Spring)并发事务导致的死锁及解决方案
用MySQL客户端模拟并发事务操作数据时,如下表按照时间的先后顺序执行命令,会导致死锁。数据库数据如下select * from a ;+----+| id |+----+| 3 |+----+| 8 |+----+| 11 |+----+时间会话A会话B1begin;2delete from a where id = 4;...原创 2019-01-01 16:18:04 · 11246 阅读 · 14 评论 -
MySQL删除重复数据只保留最新的一条
MySQL删除重复数据并保留最新的一条,网上有些博客写的有问题,因为他们只考虑到或者说他们的重复数据最多只有两条,当重复数据大于2时,就会出现问题。案例描述:按天删除表中重复数据只保留最新的一条(这里按照id越大,数据越新),注意,一天中可能出现多条数据。重复数据以name为准,即name相同视为重复案例表结构和数据CREATE TABLE `test` ( `id` int(11) ...原创 2019-04-17 19:00:37 · 7058 阅读 · 0 评论 -
MySQL常见死锁及解决方案
批量更新,使用in导致的死锁批量更新数据时,我猜你会使用in关键字,这种批量更新,可能会导致MySQL死锁,为什么?因为间隙锁的问题,导致间隙锁的范围会重叠。解决方案:使用INSERT INTO ... VALUES ... ON DUPLICATE KEY UPDATE ...的语法,当键重复时更新某些值,详细用法参见MySQL ON DUPLICATE KEY UPDATE的用法 。在...原创 2019-07-09 09:41:02 · 2195 阅读 · 0 评论 -
MySQL按时间查询,date、datetime和timestamp类型查询参数和返回的数据范围是不同的
按时间范围查询,你一定纠结过开始时间和结束时间要不要格式化为00:00:00和23:59:59,也一定纠结过数据库的时间是按照什么类型比较的,between and可以用吗?反正我是纠结过,但是自己模拟一下不就清楚了吗?数据库时间比较是按照什么类型去比较?你一定见过按时间查询的SQL,时间参数用''修饰,那我们可以理解为数据库时间表面上是按字符串类型(字典顺序)去比较的,实战中我们也是这样用的...原创 2019-07-18 17:40:03 · 16322 阅读 · 2 评论 -
InnoDB引擎之索引的优化及有效使用
Innodb 存储引擎的表数据和索引是存储在同一个表空间里面,在一定程度上索引的效率没有MyISAM快,但这丝毫不影响InnoDB存储引擎成为主流的存储引擎。拓展:MyISAM 存储引擎的表的数据和索引是分开存储的,即每个 MyISAM 在磁盘上存储 .frm(存储表定义)、.MYD(存储数据)、.MYI(存储索引),数据和索引存放在不同的文件里,获取速度更快。EXPLAIN 查看执行计划信息...原创 2019-07-24 15:23:10 · 220 阅读 · 0 评论 -
覆盖索引及应用案例
通常情况下,我们都会根据where条件来创建合适的索引,这是索引优化的一个方面,但数据库通过索引查询数据后要不要回表查询,这也是索引优化的方面,也就是说MySQL通过索引查数据时,索引的叶子节点上已经包含要查询的数据,这样就不需要回表查询了。这就是著名的覆盖索引。MySQL的InnoDB引擎只有B-Tree类型的索引具有覆盖索引,哈希索引、空间索引和全文索引都没有覆盖索引。优化模糊查询se...原创 2019-07-26 17:23:44 · 1083 阅读 · 0 评论 -
InnoDB引擎之Order By排序优化
InnoDB引擎有两种排序方式对返回的数据进行排序,Explain的Extra列显示using filesort,所有不是通过索引直接返回排序结果的排序都称为Filesort通过有序索引顺序扫描直接返回有序数据,Explain的Extra列显示using indexMySQL优化排序的思路:尽量减少额外的排序,或者通过有序索引直接返回有序数据。通常情况下,where条件和order by...原创 2019-08-22 15:24:03 · 863 阅读 · 0 评论 -
MySQL的MVCC和InnoDB的非一致性锁定读
在MySQL并发事务导致的死锁中提到InnoDB存储引擎默认事务隔离级别为 Repeatable Read,在这种情况下,select 查询记录时,不会存在锁,除非显示的调用lock in share mode或者for update。本文来说一下为什么查询记录时不存在锁。InnoDB事务回滚时,从哪里获取旧数据?事务具有4个特性:原子性、一致性、隔离性和持久性。事务的隔离性由锁实现,原...原创 2019-01-10 21:42:41 · 2958 阅读 · 2 评论 -
MySQL ON DUPLICATE KEY UPDATE的用法
当我们插入数据时,如果发生主键冲突或者具有唯一索引冲突时,我们不希望数据库操作报错,而是更新这条记录的某些值,此时我们可以使用ON DUPLICATE KEY UPDATE来达到我们的目的。注意:mysql会优先校验非null字段,然后才会执行ON DUPLICATE KEY UPDATE,如果校验不通过,那么抛出异常注意:如果表同时存在主键、唯一索引、联合唯一索引的一个或多个时,只要其中的一...原创 2018-12-17 17:48:35 · 2038 阅读 · 0 评论 -
MySQL 修改有数据的数据库的字符集
我们创建表结构时可能没有指定表的字符集,导致数据乱码。如果之前的数据库中存在数据,那么不能直接用命令修改字符集,如果直接修改,只会对新创建的表或记录有效,原有数据还是之前的字符集。以 latin1 字符集的数据库为例,修改成 utf8 字符集的数据库步骤: 1、导出表结构mysqldump -uroot -p --default-cha...原创 2018-03-15 12:53:24 · 3285 阅读 · 0 评论 -
MySQL使用exists优化in查询
    MySQL 优化时,总是说在某些情况下要用 exists 代替 in,下面我会介绍一下,exists 替换 in 时需要注意的问题。1、创建表结构# 用户信息表CREATE TABLE `user_info` ( `id` CHAR (36) NOT NULL, `name` VARCHAR (20) NOT NULL,...原创 2018-03-19 11:46:08 · 4198 阅读 · 0 评论 -
MySQL case when 用法
MySQL 的 case when 的语法有两种:CASE [col_name] WHEN [value1] THEN [result1]…ELSE [default] ENDCASE WHEN [expr] THEN [result1]…ELSE [default] END这两种语法有什么区别呢?CASE [col_name] WHEN [value1] THEN [resul...原创 2018-03-19 15:09:13 · 157080 阅读 · 21 评论 -
MySQL实战开发技巧
1、命令行登录客户端mysql -h localhost -u root -p database_name2、命令行客户端修改密码# 其中PASSWORD是一个加密函数update mysql.user set password=PASSWORD('123') where user='root';flush privileges;3、delete 删除数据需要注意别名问...原创 2019-04-24 15:33:28 · 1745 阅读 · 0 评论 -
InnoDB引擎之大批量数据导入导出
SQL 优化的一般步骤    SQL 优化,首先查看数据库的哪种 DML 执行次数多,然后查看 mysql 的慢查询日志,分析 SQL 语句是否可以优化,通过调整数据库结构、存储引擎和 SQL 语句达到数据库优化和 SQL 优化。 常用命令:show status、show variablesshow status 查看 mysql 状态列表,不...原创 2019-07-20 23:43:57 · 1417 阅读 · 1 评论 -
MySQL中left join on后面的条件与where后面的条件的区别
表:A、B A 字段:id,name B 字段:id,a_id 关键名词:主表、关联表、关联条件、筛选条件 例子:# 主表:A、关联表:B、关联条件:A.od=B.a_id、筛选条件:B.id=1A left join B on A.id=B.a_id and B.id=1结论:表 A 和表 B 的连接依靠关联条件主表的筛选条件,应该放置在 where 条件后on ...原创 2018-03-29 12:53:41 · 16894 阅读 · 11 评论 -
count(*)、count(1)、count(column)执行效率高低比较
count(*)、count(1)、count(column)区别    count(column) 会忽略为 null 的列,其他两个不会。执行效率   &am原创 2018-09-04 16:58:48 · 4936 阅读 · 0 评论 -
MySQL带有通配符的模糊查询
通常我们使用like concat拼接模糊查询的字符串,但是如果用户输入_下划线,那么模糊查询的条件为like %_%,此时_下划线会被当做通配符,所以模糊查询就会出现问题。<select id="findForGuestInfo" parameterType="java.lang.String" > SELECT user_id, NAME, sex FROM tb_pms_us..原创 2018-12-04 18:46:42 · 3850 阅读 · 0 评论 -
linux下修改mysql服务器的编码格式
当发现navicat中创建的数据库编码和表编码都是utf8,但通过web端或者其他方式保存的数据是乱码,这时就要考虑是否是安装mysql时,没有配置mysql服务器的编码格式。检查mysql服务器的编码格式 1)登录mysql客户端:mysql -uroot -p 2)查询编码格式:show variables like ‘character%’; 编辑mysql的my.cnf文件(...原创 2018-02-26 13:34:24 · 6225 阅读 · 1 评论