
mysql
三爷麋了鹿
技术不一定能改变世界,但能改变你的人生。
展开
-
MySQL存储引擎的选择
介绍如何选择MySQL存储引擎原创 2022-12-04 22:20:17 · 894 阅读 · 0 评论 -
解决报错Rsa Public Key not Find
解决Rsa Public Key not Find出现这个问题的原因,我发现是因为没有把注册机放到Navicat安装路径下面导致的。解决:需将注册机复制到Navicat安装目录中。解决No All Pattern Found! File Already Patched?出现此提示,是因为之前在电脑上已经使用注册机注册过了,无法重新进行注册。解决:1.使用WIN+R输入regedit指令,编辑注册表;2.在注册表中找到HKEY_CURRENT_USER\SOFTWARE\PremiumSof原创 2022-05-11 21:52:57 · 19723 阅读 · 10 评论 -
MySQL之为什么不建议使用外键约束
接上篇短文中提到我们项目中不会设置外键,这里简单谈下原因。外键的优点外键能够保证数据的一致性和完整性,通过设置外键,数据库就会判断数据的完整性,不需要在应用代码里实现。外键的缺点性能问题比如table_a和table_b通过外键关联,当往table_a插入数据时,数据库就会去查询外键关联的table_b里面有没有对应数据,没有对应数据是没法入库成功的。同时,在大数据量入库的情况下,每次入库都需要先查询会导致性能瓶颈。因此,阿里巴巴Java开发手册里建议,不得使用外键与级联,一切外键概念必须在应原创 2022-03-07 11:36:54 · 1470 阅读 · 0 评论 -
导出excel数据查询超时问题排查
最近遇到一个导出Excel文件时报超时的问题,经过排查,最终发现是MySQL索引失效导致的。排查思路Excel导出这个功能是先将数据查询出来组装好,再通过POI方式写入到Excel文档中,生成的Excel文件放到FastDFS文件服务器,最后把文件服务器中的文件地址返回给浏览器,供浏览器下载。首先是怀疑Excel导出数据量过大,服务器承受不了导致超时,但一问人家测试人员才导出5K+的数据,完全不至于;怀疑导出没有使用异步进程,没有使用多线程,查看源代码是使用了CompletableFuture.原创 2022-03-04 23:13:22 · 3760 阅读 · 0 评论 -
MySQL索引类型简介
MySQL索引的作用数据库系统在查询数据时,是按照当前行的所有列数据进行匹配。当对某一列设置了索引后,就可以只针对当前索引列进行查询,这样可以提升查询效率。索引实质上是一张描述索引列的列值与原表数据行一对一关系的关系数据表。就好比是字典里的音序检索,根据拼音首字母能够快速找到文字所在的页码位置。索引是MySQL数据库性能调优的基础。MySQL有哪些索引类型MySQL主要有五种索引类型:普通索引[index]唯一索引[unique]主键索引[primary key]组合索引[index]原创 2022-03-04 21:52:49 · 4163 阅读 · 0 评论 -
使用Navicat复制数据到excel表格
Navicat复制功能通过select * from table where 1=1;筛选出数据后,我们可以将字段名和数据很便捷地复制到excel表格中。方法:选中需要复制的数据源,右键选择复制为-制表符分隔值(字段名和数据)。...原创 2022-01-05 17:38:13 · 1425 阅读 · 0 评论 -
MySQL如何实现select into 临时表的功能
select into 临时表最近在写sql脚本时遇到需要将数据放到临时表中,供后续insert数据时使用。首先想到的是使用select into这个写法:select * into temp_test from user where id=007;写完在Navicat执行报错,发现MySQL居然是不支持select into这种写法的,没办法,只能转换思路。这个时候我又想起来有一个create table as select * from old_table的用法,想着是不是可以通过select原创 2021-11-14 20:38:18 · 4596 阅读 · 0 评论 -
mysql如何交换两列的值
最近遇到了需要将表里的两列值进行互换,原因是存库时值存放反了。在编码语言中,我们一般可以通过定义一个临时变量c,将b赋值给c,a赋值给b,c赋值给a就能实现a和b的值互换。那么,在mysql中,非储存过程的sql语句,没有定义变量的过程,如何实现呢?我们可以将原表选择出一张临时表,再根据临时表字段的值进行交换。UPDATE t as t1, t as t2 set t1.a=t1.b,t2.b=t2.a where t1.id=t2.id;...原创 2021-10-31 18:42:23 · 1241 阅读 · 0 评论 -
MySQL使用JSON_EXTRACT获取json字符串某个键的值
JSON_EXTRACTMySQL5.7版本以后增加了JSON_EXTRACT函数,可用于获取json字符串中某个键的值。示例:JSON_EXTRACT('{"typeId": "001", "code": "C01"}', "$.typeId")获取到的typeId值为"001",带有双引号,我们可以再用REPLACE函数去掉双引号。REPLACE(JSON_EXTRACT('{"typeId": "001", "code": "C01"}', "$.typeId"), '"', '')运原创 2021-10-07 11:34:07 · 906 阅读 · 0 评论 -
MySQL创建唯一索引时报错Duplicate entry * for key
场景在MySQL表创建唯一索引时,出现报错Duplicate entry * for key.使用show index from table确认table中并不存在重名的唯一索引名称。解决仔细看报错信息,根据那串ID数字,发现是表中出现违反创建的唯一索引键规则的重复数据,将此数据删除后创建唯一索引成功。ALTER TABLE person ADD UNIQUE `UNI_person_area`(`person_id`, `area_id`) USING BTREE COMMENT "人员重复"原创 2021-09-20 16:43:23 · 10859 阅读 · 0 评论 -
MySQL异常Lock wait timeout exceeded解决办法
问题现象最近在做数据删除的时候,MySQL抛出MySQLTransactionRollbackException异常:Cause: com.mysql.cj.jdbc.exceptions.MySQLTransactionRollbackException: Lock wait timeout exceeded; try restarting transaction;解决过程查询资料,得知可以到information_schema中查找被锁的语句。information_schema 这个库里原创 2021-08-13 11:55:40 · 2587 阅读 · 0 评论 -
MySQL DUAL表的作用
虚拟表 DUALMySQL中使用select 1;不加 from table就可以执行,而在Oracle中需要满足select * from table;这样的结构,因此Oracle引入虚拟表DUAL来表示select 1 from dual;MySQL 5.5以上版本也引入了类似的虚拟表DUAL,但是在MySQL中执行select * from dual;会报错:插入数据前判断是否存在如果需要在插入数据前判断数据表中是否已经存在此条记录,MySQL中语法如下:insert into `User原创 2021-07-31 17:04:56 · 5134 阅读 · 0 评论 -
decimal(19,8)是什么意思
MySQL数据库表字段设置decimal(19,8)是什么意思呢?decimal(19,8)表示字段总共可储存19位数字,其中8位小数,11位整数,小数位数不足8位的。原创 2021-05-31 11:32:44 · 1988 阅读 · 0 评论 -
sql查询的基本原理
单表查询:根据where条件过滤表中的记录,形成中间表(这个中间表对用户是不可见的);然后根据select的选择列选择相应的列进行返回最终结果。 两表连接查询:对两表求积(笛卡尔积)并用on条件和连接类型进行过滤形成中间表;然后根据where条件过滤中间表的记录,并根据select指定的列返回查询结果。 多表连接查询:先对第一个和第二个表按照两表连接做查询,然后用查询结果和第三个表做连接查询,以此类推,直到所有的表都连接上为止,最终形成一个中间的结果表,然后根据where条件过滤中间表的记录,并根据..原创 2020-10-27 22:59:33 · 372 阅读 · 0 评论 -
mysql解压版安装
解压后,将\bin添加到path环境中; 5.6版本后修改my-default.ini:[mysqld] basedir = D:\MySQL\Server\mysql-5.6.20-win32 datadir = D:\MySQL\Server\data port = 3306以管理员运行cmd,cd到bin目录下,执行mysqld -installbin目录执行:mysql -u root -p,提示输入密码,初始为空,直接enter即可成功。 修改默认密码,bin目录执行:原创 2020-10-26 22:55:43 · 74 阅读 · 0 评论 -
MySQL内连接的使用
方法一:用 = 号内连接不管最终查询的列是否在某个表中,只要这个查询的条件中涉及到了这张表,那么就一定要在from中添加进来这张表。select *from user u, job j, section swhere u.job_id = j.idand j.section_id = s.id;方法二:用 inner join内连接这个连接的过程是前面两张表先连接好了,然后再来连接第三张表,还可以用where来添加新的条件。select *from user u joi原创 2020-10-25 22:47:16 · 560 阅读 · 0 评论 -
MySQL简明教程
1.net start mysql开启服务2.D:\MyServer\MySQL5.1.29\bin>mysql -u root -p进入bin目录,请求打开数据库,会弹出Enter password命令让用户输入密码3.show databases;显示所有数据库 use ex4_11;使用哪个数据库 show tables;显示数据库中的表 desc job;显示其中一张表中的所有字段 insert into job values(3,'haha')...原创 2020-10-20 22:56:27 · 132 阅读 · 1 评论 -
MySQL常用开发技巧之join从句
最近在复习mysql的相关知识,发现之前没写在博客里,今天开始会将2016年3到4月的几篇基础学习笔记陆续补上来。inner join从句select a.id,a.username,a.content,a.jid from user a inner join manager b on a.username = b.username;left join从句left join左外连接以a为基础;select a.id,a.username,b.username,a.jid .原创 2020-10-18 22:58:51 · 137 阅读 · 0 评论 -
关于如何提高sql语句执行效率(网上整理)
1.任何地方都不要使用 select * from t ,用具体的字段列表代替“*”,不要返回用不到的任何字段。2.应尽量避免在where子句中对字段进行函数操作,这将导致引擎放弃使用索引而进行全表扫描。3.in 和 not in 也要慎用,否则会导致全表扫描。4.尽量不要使用 or,使用or会引起全表扫描,将大大降低查询效率。原创 2016-04-10 12:05:42 · 575 阅读 · 0 评论