
MySQL
文章平均质量分 59
MySQL实战笔记
寒泉Hq
当你试图解决一个你不理解的问题时,复杂化就产生了
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
SQLAlchemy 报错 NotSupportedError: Authentication plugin ‘caching_sha2_password’ is not supported 解决方法
报错内容NotSupportedError: Authentication plugin ‘caching_sha2_password’ is not supported原因使用 mysql8.0 版本,登录失败,提示 Authentication plugin ‘caching_sha2_password’ is not supported。原因是在 MySQL 8.0 以后,默认的密码加密方式是 caching_sha2_password 而不是mysql_native_password。原创 2021-03-09 16:28:36 · 60981 阅读 · 1 评论 -
SQL 中 left join、right join、inner join 的区别
SQL 三个 join 的含义left join(左联接):返回左表中的所有记录以及和右表中的联接字段相等的记录。right join(右联接):返回右表中的所有记录以及和左表中的联接字段相等的记录。inner join(等值联接):只返回两个表中联接字段相等的记录。下面将以atable、btable为例进行讲解。atablebtable1、使用 left joinselect * from atable as aleft join btable as bon a.name =转载 2021-02-12 18:54:30 · 59880 阅读 · 1 评论 -
MYSQL: JOIN (SELECT … ) ue ON 1=1 的含义
QuestionI am reading an SQL query in Redshift and can’t understand the last part:...LEFT JOIN (SELECT MIN(modified) AS first_modified FROM user) ueON 1=1What does ON 1=1 mean here?It just ensures the join will return a match – 1=1 is the same as tr原创 2021-02-09 13:18:02 · 71612 阅读 · 0 评论 -
MySQL 行转列的方法
建表CREATE TABLE `score` ( `Id` int(11) NOT NULL AUTO_INCREMENT, `UserName` varchar(50) DEFAULT NULL, `Subject` varchar(50) DEFAULT NULL, `Source` decimal(18,0) DEFAULT NULL, PRIMARY KEY (`Id`)) ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=utf原创 2020-06-29 09:32:00 · 68775 阅读 · 0 评论 -
MySQL索引机制:索引分类、索引的实现原理、索引的优化 - 公开课笔记
概要oracle市场份额在降低,mysql变得越来越重要样本数据可以使用 sakila 数据库你会怎么设计索引?加索引目的是快速查找数据,最终要快速从文件中快速获取一条记录。如果使用id+偏移量+数据文件作为索引,会使得索引文件非常大,然后需要给索引文件加索引于是会产生索引,索引的索引,索引的索引的索引...OLAP:对历史数据的分析,比如HiveOLTP:关系型数据库都是OLTP,要求在最短时间内返回最终结果为什么选择B+树?MySQL B+ 树的根节点、叶子结点都存储与磁盘中。加载原创 2020-05-16 22:25:55 · 68276 阅读 · 0 评论 -
关于MySQL使用Float存储时的精度问题
官方文档https://dev.mysql.com/doc/refman/8.0/en/floating-point-types.html官方文档是这么说的:11.1.4 Floating-Point Types (Approximate Value) - FLOAT, DOUBLEThe FLOAT and DOUBLE types represent approximate numeric data values. MySQL uses four bytes for single-precisi原创 2020-05-15 23:33:15 · 71221 阅读 · 0 评论 -
【MySQL】触发器:让指定某一字段的值等于id
示例使用触发器CREATE TRIGGER order_id_trigger before INSERT ON user_table FOR EACH ROW SET new.order_id=(select max(id)+1 from user_table);附:快速创建表备份create table users_backup as select * from users;原创 2020-05-08 20:32:41 · 70611 阅读 · 1 评论 -
MySQL出现Waiting for table metadata lock的原因以及解决方法
MySQL在进行alter table等DDL操作时,有时会出现Waiting for table metadata lock的等待场景。而且,一旦alter table TableA的操作停滞在Waiting for table metadata lock的状态,后续对TableA的任何操作(包括读)都无法进行,因为他们也会在Opening tables的阶段进入到Waiting for tab...转载 2020-05-04 18:06:44 · 65980 阅读 · 0 评论 -
数据库设计原则:应该使用软删除吗?
在数据库设计中,当删除一条记录的时候,是加一个标记位还是直接删除这一行?物理删除:真删除,数据消失。逻辑删除:假删除,数据存在,只是用一个字段来标记该条数据“已删除”。参考了一些网络上的讨论如下:关于soft delete的好处,justjavac的介绍很棒。不过是否应该使用soft delete,还是需要慎重考虑。在关系型数据库中,软删除(soft delete)主要影响的是wri...原创 2020-04-24 09:28:47 · 73378 阅读 · 0 评论 -
【MySQL】深入浅出剖析mysql事务锁机制 - 笔记
事务的基本概念事务的特点(ACID)快照:之前的某一个历史的状态(类比虚拟机的快照),用于实现原子性隔离性:通过锁机制来实现锁:共享锁,排它锁,独占锁,临键锁,间隙锁,自增锁,意向锁持久性:使用来实现WAL日志:write ahead log,预写日志Hbase主要操作内存,因为速度快。也是用WAL来保证数据不丢失。数据在内存中,然后通过fsync写进磁盘。一致性:是数据库的...原创 2020-04-17 11:43:03 · 67773 阅读 · 0 评论 -
【MySQL】主从复制架构方案 - 笔记
主从架构设计查看binlogshow master status;show BINLOG events in 'BUUUG-bin.000120';主从同步需要考虑的风险突然断电导致主从数据不一致数据同步延迟问题(主库写,从库查)如何避免同步方式:异步同步(保证性能不会受到同步的影响)半同步:同步时等待,直到数据已经同步到relay binlog之后,才可以返回到We...原创 2020-03-28 11:02:56 · 63861 阅读 · 0 评论 -
【MySQL】Mysql索引优化与底层数据结构深入剖析 - 笔记
索引使用索引,会提前存储被索引字段对应行的磁盘文件地址指针,做一次IO就能查找到数据。二叉树递增的索引不适合用二叉树来维护,因为递增的id会导致二叉树退化成为链表,这样建立索引的效果和不建立索引的差别不大。因此MySQL不使用二叉树做索引。数据结构可视化网站红黑树单边增长不平衡时,红黑树会自动平衡。JDK1.8之后,HashMap使用的就是红黑树。在某些场景下,红黑树也会存在问...原创 2020-03-24 22:10:26 · 67544 阅读 · 0 评论 -
数据库规范设计说明书(参考阿里开发规范)
1.建表规约**【强制】**表达是与否概念的字段,必须使用is_xxx的方式命名,数据类型是tinyint(1)( 1表示是,0表示否)。说明:任何字段如果为非负数,必须是无符号。正例:表达逻辑删除的字段名is_deleted,1 表示删除,0 表示未删除。**【强制】**表名、字段名必须使用小写字母或数字,禁止出现数字开头,禁止两个下划线中间只出现数字。数据库字段名的修改代价很...原创 2020-03-16 15:25:27 · 66770 阅读 · 0 评论 -
【MySQL】查看 mysql 数据库最后修改时间、创建时间、表大小
查看 mysql 数据库最后修改时间、创建时间、表大小一个库有几十张表,有很多这样的库。想要查询一个库最近一次修改的时间,用以判断哪个是最近在使用的库。有什么办法可以查询一个库最近一次修改的时间?SELECT TABLE_SCHEMA,TABLE_NAME,TABLE_ROWS,DATA_LENGTH,CREATE_TIME,UPDATE_TIME FROM information_sch...原创 2020-03-11 09:59:22 · 73150 阅读 · 1 评论 -
【MySQL】MySQL出现Waiting for table metadata lock的原因、解决方法
Waiting for table metadata lockMySQL在进行alter table等DDL操作时,有时会出现Waiting for table metadata lock的等待场景。而且,一旦alter table TableA的操作停滞在Waiting for table metadata lock的状态,后续对TableA的任何操作(包括读)都无法进行,因为他们也会在Ope...原创 2020-01-21 21:30:23 · 69671 阅读 · 0 评论 -
【MySQL】[ERR] 1273 - Unknown collation: 'utf8mb4_0900_ai_ci'
使用 mysql workbench 运行 sql 文件出错[ERR] 1273 - Unknown collation: ‘utf8mb4_0900_ai_ci’生成转储文件的数据库版本为8.0,要导入sql文件的数据库版本为5.6,因为是高版本导入到低版本,引起1273错误解决方法:打开sql文件,将文件中的所有utf8mb4_0900_ai_ci替换为utf8_general_...原创 2020-01-06 19:11:47 · 67050 阅读 · 0 评论 -
【SQLAlchemy】MySQL server has gone away 原因分析、解决方法
SQLAlchemy报错:MySQL server has gone away 原因分析、解决方法conn.close() 是把连接放回连接池,不是真正的关闭;池子里的空闲连接在MySQL线程里sleep,长时间不操作,MySQL把连接一端关闭了,所以第二天SQLAlchemy再用这个连接的时候,抛出MySQL server has gone away…原创 2020-01-04 18:07:00 · 62465 阅读 · 1 评论 -
【MySQL】如何让数据库查询区分大小写
问题描述当我们输入不管大小写都能查询到数据,例如:输入 aaa 或者aaA ,AAA都能查询同样的结果,说明在MySQL中,查询条件对大小写不敏感。select * from some_table where str='abc';select * from some_table where str='ABC'; -- 查询结果相同解决方法方法一:查询时指定可以将查询条件用binar...原创 2020-01-03 08:16:23 · 56993 阅读 · 0 评论 -
【MySQL distinct的使用】如果指定了 SELECT DISTINCT,那么 ORDER BY 子句中的项就必须出现在选择列表中
错误语句SELECT distinct example_column1 FROM test.example_table where delisting_date>now() and product ='CU.SHF' ORDER BY `example_column2` ASC;报错信息如下:(MySQL-8.0.16可以正常运行,MySQL-5.7报错)Error Code: 3...原创 2019-12-19 16:12:25 · 33960 阅读 · 0 评论 -
【MySQL】数据库死锁查询及处理
数据库死锁数据库死锁是事务性数据库 (如SQL Server, MySql等)经常遇到的问题。除非数据库死锁问题频繁出现导致用户无法操作,一般情况下数据库死锁问题不严重。在应用程序中进行try-catch就可以。那么数据死锁是如何产生的呢?InnoDB实现的是行锁 (row level lock),分为共享锁 (S) 和 互斥锁 (X)。共享锁用于事务read一行。互斥锁用于事务updat...原创 2019-12-17 21:08:38 · 33845 阅读 · 0 评论 -
【MySQL】存储过程中,怎么把多个select结果,合并成一个结果集返回?
提问select userid,username,price,vol from table_a …select userid,username,price,vol from table_b…要让这两句形成一个结果集。怎么办?解答select userid,username,price,vol from table_a …union allselect userid,username,...原创 2019-12-09 21:10:03 · 32658 阅读 · 1 评论 -
【MySQL】ON DUPLICATE KEY UPDATE 解决重复插入问题
ON DUPLICATE KEY UPDATE开发过程中,可能会遇到这样的需求,先判断某一记录是否存在,如果不存在,添加记录,如果存在,则修改数据。在INSERT语句末尾指定ON DUPLICATE KEY UPDATE可以解决这类问题。其用法如下:如果在INSERT语句末尾指定了ON DUPLICATE KEY UPDATE,并且插入行后会导致在一个UNIQUE索引或PRIMARY KEY中...原创 2019-12-02 20:32:11 · 30046 阅读 · 0 评论 -
【SQL】查询DateTime类型的某一年数据
例如,查询2013年的数据:SELECT * FROM example.example_base where `日期列名` regexp "2013" order by `日期列名` desc;原创 2019-11-17 08:44:14 · 31309 阅读 · 1 评论 -
【数据库】MySQL创建视图(CREATE VIEW)
数据库视图是什么?创建视图是指在已经存在的 MySQL 数据库表上建立视图。视图可以建立在一张表中,也可以建立在多张表中。视图的好处?视图使用的时候跟表一样。主要作用是不让所有的人都能看到整张表。比如有个员工信息表,里面有联系方式,薪资等,可能只希望HR能看到薪资,其他人只能看到联系方式,那么就可以使用视图来实现。高效:复杂的连接查询,每次执行时效率比较低,可以考虑新建视图,每次从视图...原创 2019-11-03 19:03:10 · 35912 阅读 · 1 评论 -
【数据库】什么是S锁?什么是X锁?它们区别是什么?
基本的封锁类型有两种:排它锁(X锁)和共享锁(S锁).所谓X锁,是事务T对数据A加上X锁时,只允许事务T读取和修改数据A,…所谓S锁,是事务T对数据A加上S锁时,其他事务只能再对数据A加S锁,而不能加X锁,直到T释放A上的S锁若事务T对数据对象A加了S锁,则T就可以对A进行读取,但不能进行更新(S锁因此又称为读锁),在T释放A上的S锁以前,其他事务可以再对A加S锁,但不能加X锁,从而可以读取A...原创 2019-10-27 11:17:46 · 35259 阅读 · 0 评论 -
SQL查询最大值,返回整行数据
SQL查询最大值,返回整行数据1、问题部分数据如下,未完整展示。如何从 table_a 表中查询 p_postions 列的最大值对应的一行数据?在这里插入图片描述2、解答方法1:先排序,再取第一条SELECT * FROM table_a order by p_postions desc limit 1;查询结果如下:在这里插入图片描述经过评论区小伙伴的提醒,这种先排序的方式虽然语法简单,但时间复杂度较高,是 O(n*logn)。方法2:先查最大值,再找到对应行原创 2019-06-21 20:05:09 · 143628 阅读 · 13 评论 -
【Java ORM】手写ORM框架:源代码、jar、生成JavaDoc文档
源代码见:GitHub地址SORMSourceCode一个简单的手写SORM框架,Java+MySQL,增删改查,根据表信息自动生成javabean使用时,需要配置src下的db.properties文件,改成自己的数据库名称、路径。配置示例:driver=com.mysql.cj.jdbc.Driver //数据库驱动url=...原创 2019-08-13 12:50:01 · 21293 阅读 · 0 评论 -
【MySQL数据库】一天学完MySQL笔记——纯SQL文档版
-- Notepad++快捷键:-- CTRL D复制一行-- CTRL L删除一行-- Eclipse快捷键:-- ALT ↑↓移动一行-- 单个主键约束 主键不能为空 不能重复create table user( id int primary key, name varchar(20));-- 显示所有表show tables;-- 显示表结构descr...原创 2019-08-18 21:37:29 · 21212 阅读 · 0 评论 -
【Java数据库】使用JDBC操作MySQL数据库、Batch批处理 、事务的概念
MySQL 数据库的命令行操作登陆操作mysql -hlocalhost –uroot –p123456退出操作exit数据库操作建库:create database 库名;卸载库:drop database 库名;显示所有数据库:show databases;选择库:use testjdbc;表操作建表的sql语句显示库中所有表:show tables;显示某个表的结构:des...原创 2019-08-11 10:39:03 · 21450 阅读 · 0 评论 -
【Java数据库】SQL时间类型Date Time Timestamp区别、插入/取出指定时间段的数据
java.util.Date子类:java.sql.Date 表示年月日子类:java.sql.Time 表示时分秒子类:java.sql.Timestamp 表示年月日 时分秒1970.01.01 long类型的 毫秒表示,1970之前是负数,1970之后是正数。向数据库表中添加一个TIMESTAMP类型的列alter table user add lastlogintime TI...原创 2019-08-11 18:04:55 · 21835 阅读 · 0 评论 -
【Java数据库】CLOB BLOB 在数据库中存入/取出大量文本数据、二进制文件(图片)
CLOB(Character Large Object)– 用于存储大量的文本数据– 大字段有些特殊,不同数据库处理的方式不一样,大字段的操作常常是以流的方式来处理的。而非一般的字段,一次即可读出数据。• Mysql中相关类型:– TINYTEXT最大长度为255(2^[8]–1)字符的TEXT列。– TEXT[(M)]最大长度为65,535(2^[16]–1)字符的TEXT列。– ...原创 2019-08-11 19:43:38 · 22266 阅读 · 0 评论 -
【Java数据库】使用properties资源文件,简化数据库连接
使用properties配置文件,可以避免在修改密码时频繁修改代码,只需修改配置文件即可。在src目录下新建一个db.properties,内容如下:mysqlDriver=com.mysql.cj.jdbc.Driver mysqlURL=jdbc:mysql://localhost:3306/testjdbc?serverTimezone=UTC ...关于是否需要转义原创 2019-08-11 21:45:58 · 21351 阅读 · 0 评论 -
【Java数据库】ORM思想:对象关系映射 使用Java容器存储多条记录
数据库结构database名:sormemp表:与dept表表通过deptid,达到逻辑关联的效果(加一个真正的外键也不是不可以)dept表:使用List嵌套Object存储返回的多条记录package cn.hanquan.testORM;import java.io.FileNotFoundException;import java.io.IOException;i...原创 2019-08-11 22:56:27 · 21125 阅读 · 0 评论 -
【Java 数据库】Connections.getTables() 方法 获取数据库的元数据
提供:getTables()方法,该方法需要传进4个参数:第一个是数据库名称,对于MySQL,则对应相应的数据库,对于Oracle来说,则是对应相应的数据库实例,可以不填,也可以直接使用Connection的实例对象中的getCatalog()方法返回的值填充;第二个是模式,可以理解为数据库的登录名,而对于Oracle也可以理解成对该数据库操作的所有者的登录名。对于Oracle要特别注意,其登陆名必须是大写,不然的话是无法获取到相应的数据,而MySQL则不做强制要求。第三个是表名称,一般情况下如原创 2019-08-12 20:52:30 · 26789 阅读 · 6 评论 -
【MySQL查询】复杂查询:别名、外键join
已有数据emp表dept表SQL语句使用了别名、外键joinselect e.id,e.empname,salary,bonus,salary+bonus 'money',age,d.dname 'deptName',d.address 'deptAddr' from emp e join dept d on e.deptId=d.id查询结果...原创 2019-08-13 11:40:12 · 21377 阅读 · 0 评论 -
【MySQL数据库】一天学会MySQL笔记——MarkDown版
-- Notepad++快捷键:-- CTRL D复制一行-- CTRL L删除一行-- Eclipse快捷键:-- ALT ↑↓移动一行-- 单个主键约束 主键不能为空 不能重复create table user( id int primary key, name varchar(20));-- 显示所有表show tables;-- 显示表结构descr...原创 2019-08-18 01:34:08 · 22235 阅读 · 1 评论 -
MySQL学习笔记
从cmd进入(如果已经添加环境变量,不需要写路径)cd C:\Program Files\MySQL\MySQL Server 8.0\binmysql –uroot –p你的密码#插入数据INSERT INTO `customer`(`CNAME`, `CAGE`, `CSEX`, `CID`, `CPHONE`, `CPASSWORD`, `CEMAIL`)VALUES("ces...原创 2019-05-14 11:28:05 · 11782 阅读 · 0 评论