MySQL
joexk
点滴记录
展开
-
MySQL A表的字段值更新为B表的字段值
MySQL数据库涉及到多表更新方法方法一通过子查询关联UPDATE tableA a set a.b_rel_field = (SELECT b.id from tableB b where a.name = b.name);方法二使用逗号操作符的内连接UPDATE tableA a, tableB b SET a.price=b.priceWHERE ia.id = b.id;方法三使用SELECT语句中允许的任何类型的联接,比如内连接,左连接update tableA a原创 2020-07-31 23:55:10 · 9423 阅读 · 0 评论 -
基于MySQL正则表达式实现类似全库搜功能
一 需求项目要做一个类似Elasticsearch全库搜的小功能,但是数据存放在MySQL里面,数据量不是很大,使用模糊查询性能也还可以接受。一开始想直接用like,但是为了支持多个关键字查询,用like的话要循环字段进行拼装成如下的SQL语句:SELECT * from tableName WHERE field_a like '%关键字1%' OR field_a like '%关键字2%' OR field_a like '%关键字3%' OR field_b like '%原创 2020-06-30 21:58:11 · 352 阅读 · 0 评论 -
MySQL 列转行用法实现
需求需要将如下所示原始表数据转为结构化的数据按行显示:转为结构化数据:解决方法如果是单条记录通过SUBSTRING_INDEX容易实现,SQL语句如下:select name,SUBSTRING_INDEX(accounts,',',1) account from personAccounts where id=1UNIONselect name,SUBSTRING_INDEX(...转载 2019-09-30 23:13:37 · 1286 阅读 · 0 评论 -
#1093 - You can't specify target table 'tablename' for update in FROM clause 解决办法
MySQL版本:5.7.20操作表数据结构如下:一 需求将下级部门和上级部门关联,更新下级部门的parent_id 字段为上级部门的id字段值,SQL语句如下:UPDATE department set parent_id= (select id from department where department_name = 'dep_1')where department_leve...原创 2019-08-18 17:21:21 · 873 阅读 · 0 评论 -
MySQL生成32位UUID
有时MySQL数据库某些表的ID需要使用UUID值(由一组32位数的16进制数字所构成)作为唯一识别码。可以通过MySQL自带的UUID() 函数来生成:select UUID();结果为:0a3eed30-9ad5-11e9-9835-b8ee6591991d这样获取的是带 “-” 分隔符的UUID,32位字符加上分隔符共36位,不符合要求,可以通过replace() 函数对获取到的U...原创 2019-06-30 09:36:49 · 11502 阅读 · 0 评论 -
MySQL索引背后的数据结构及算法原理
原文:MySQL索引背后的数据结构及算法原理摘要本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题。特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引类型,如BTree索引,哈希索引,全文索引等等。为了避免混乱,本文将只关注于BTree索引,因为这是平常使用MySQL时主要打交道的索引,至于哈希索引和全文索引本文暂...转载 2018-11-17 17:13:05 · 1064 阅读 · 0 评论 -
MySQL 通过子查询批量插入数据
1 需求需要将 a 表的数据插入 b 表,其中 a 表的数据很多是冗余的,是原始的多级分类数据,b 表相当于是对 a 表的简化,去掉冗余的数据,两表的 pdm 如下图:2 方法将 a 表的各级编码、名称无重复的插入 b 表,并设置对应的级别,通过子查询批量插入无重复数据的SQL如下:INSERT into category_b (id, name, level) select D...原创 2018-10-30 22:29:35 · 13377 阅读 · 1 评论 -
MySQL 按指定分隔符截取字符串函数substring_index
需求需要显示人员及其所有的社交账号处于同一行。表结构如下:解决方法SELECT hi.houseCode,SUBSTRING_INDEX(hi.houseCode,’-’,1) AS lou,SUBSTRING_INDEX(SUBSTRING_INDEX(hi.houseCode,’-’,2),’-’,-1) AS men,SUBSTRING_INDEX(hi.houseCode,’-’...原创 2018-10-27 22:38:37 · 31470 阅读 · 0 评论 -
多线程查询MySQL大数据量单表导致OOM及线程卡死
1 需求对数据进行迁移,需要将MySQL中的一张大表数据(亿级)读出并插入另一个数据库。2 问题对数据分组后,然后开启对应个数的线程,每个线程处理一个分组数据的任务(每个分组后的数据量从几十万至千万级),最初思路是从原库取出1000条数据后,再进入入库,设置了PreparedStatement 的 fetchSize为1000, 但是很快就报“ java.lang.OutOfMemoryEr...原创 2018-10-28 20:14:36 · 6110 阅读 · 0 评论 -
MySQL 将查询到的一列数据合并成字符串
需求需要显示人员及其所有的社交账号处于同一行。表结构如下: 解决方法使用 group_concat 函数实现。函数语法:group_concat( [DISTINCT] 要连接的字段 [Order BY 排序字段 ASC/DESC] [Separator ‘分隔符’] )SQL语句如下:select a.`id` 序号, a.`name` 姓名, GRO...原创 2018-05-24 00:01:07 · 27680 阅读 · 3 评论 -
MySQL 表增加字段,修改字段名、字段类型,删除字段语句整理
1、表(t_tbl)增加字段– 添加一个名为 col_name_add 的字符字段 alter table t_tbl add column col_name_add varchar(20);2、修改字段名– 将 col_name_old 的字段名改为 col_name_new 的字段名 alter table t_tbl change column col_name_old ...原创 2018-03-10 19:00:47 · 15961 阅读 · 0 评论