MySQL
MySQL相关知识
xupeng1644
道阻且长,行则将至!
展开
-
MySQL的4种默认数据库的作用(转载)
该库是 mysql 的核心库,主要存储数据库用户、权限等 mysql 自身需要使用的信息。用于收集数据库服务器的性能数据,以便分析问题。比如 SQL 的执行次数、耗时、锁等信息。该库的数据都来自 performance_schema。主要是快速了解数据库运行情况。提供数据库的元数据,比如数据库名、表名、索引等,可以当作子典表。转载 2023-01-06 16:07:22 · 970 阅读 · 0 评论 -
MySQL的Binlog与Redolog
MySQL逻辑架构大致可以分为两层:服务层:MySQL的核心服务功能,包括查询语句解析,词法语法分析,优化,缓存以及内置函数(日期,时间,数学,加密等),跨存储引擎的功能:存储过程,触发器,视图等。存储引擎:负责MySQL中数据的存储和提取。我们知道在MySQL中,server层的日志,成为binlog(归档日志),主要用来做主从复置和恢复时使用的。redo log是InnoDB引擎的日...转载 2020-03-12 12:34:13 · 1201 阅读 · 0 评论 -
正确的理解MySQL的MVCC及实现原理
MVCC多版本并发控制如果觉得对你有帮助,能否点个赞或关个注,以示鼓励笔者呢?!博客目录 | 先点这里!首先声明,MySQL的测试环境是5.7前提概要什么是MVCC什么是当前读和快照读?当前读,快照读和MVCC的关系MVCC实现原理隐式字段undo日志Read View(读视图)整体流程MVCC相关问题RR是如何在RC级的基础上解决不可重复读的?RC,...转载 2020-03-12 10:13:19 · 2193 阅读 · 1 评论 -
TIMESTAMP与DATETIME的区别
DATETIME的默认值为NULL;TIMESTAMP的字段默认不为空(NOT NULL),默认值为当前时间(CURRENT_TIMESTAMP),如果不做特殊处理,并且UPDATE语句中没有指定该列的更新值,则默认更新为当前时间。这个区别就解释了为什么平时我们都不用可以管这个字段就能自动更新了,因为多数时候用的是timestamp;而此处用的是datetime,不会有自动更新当前时间的机制,所...转载 2020-03-11 08:57:38 · 1616 阅读 · 0 评论 -
MySQL数据类型 -- 日期时间型
在MySQL关系型数据库中,MySQL支持的数据类型非常丰富。它主要分为3大类,即:数值型,日期时间性,字符型。而实际上这三类数据类型可以进一步的细分扩展,可以根据业务需要选择最适合的一种。本文主要介绍日期时间类型,并演示其用法。一、日期时间型MySQL支持的日期时间类型可以进一步细分,即可以分为日期型,时间型,日期时间型,时间戳等。如下图所示:二、日期时间型存储需求三、日期时间型零值...转载 2020-03-10 23:55:41 · 2203 阅读 · 0 评论 -
MyISAM与InnoDB 的区别
1 InnoDB支持事务,MyISAM不支持,对于InnoDB每一条SQL语言都默认封装成事务,自动提交,这样会影响速度,所以最好把多条SQL语言放在begin和commit之间,组成一个事务;2 InnoDB支持外键,而MyISAM不支持。对一个包含外键的InnoDB表转为MYISAM会失败;3 InnoDB是聚集索引,使用B+Tree作为索引结构,数据文件是和(主键)索引绑在一起的(表数据...转载 2020-03-10 19:33:26 · 1048 阅读 · 0 评论 -
MySQL 阿里巴巴JAVA开发手册-MySQL相关
转载 2020-01-06 19:17:34 · 1436 阅读 · 0 评论 -
MySQL 编码相关小结
参考:mysql字符集小结utf8mb4 已成为 MySQL 8.0 的默认字符集,在MySQL 8.0.1及更高版本中将 utf8mb4_0900_ai_ci 作为默认排序规则。新项目只考虑 utf8mb4UTF-8 编码是一种变长的编码机制,可以用1~4个字节存储字符。因为历史遗留问题,MySQL 中的 utf8 编码并不是真正的 UTF-8,而是阉割版的,最长只有3个字节。当遇到占4...转载 2020-01-03 17:14:18 · 1351 阅读 · 0 评论 -
MySQL UTF8与UTF8MB4
目录Mysql之utf8和utf8mb4的区别数据库字符集设置参考资料 Mysql之utf8和utf8mb4的区别最近在项目中使用Mysql数据库保存emoji表情 ???? 时报错 Caused by: java.sql.SQLException: Incorrect string value: '\xF0\x9F\x98\x8D' for column '...转载 2020-01-03 16:22:21 · 1155 阅读 · 0 评论 -
MySQL 查看当前数据库
今天在操作数据库的时候,不知道进去了哪个库,那我们怎么查看当前你正在操作的数据库呢。我总结了一下总共有四种方式进行查看,今天也写一写,强化一下基础。1 命令select database()mysql> select database();+------------+| database() |+------------+| NULL |+------------...转载 2020-01-03 14:47:38 · 5404 阅读 · 0 评论 -
MySQL 一条SQL语句执行得很慢的原因有哪些?
一条 SQL 语句执行的很慢,那是每次执行都很慢呢?还是大多数情况下是正常的,偶尔出现很慢呢?所以我觉得,我们还得分以下两种情况来讨论。1、大多数情况是正常的,只是偶尔会出现很慢的情况。2、在数据量不变的情况下,这条SQL语句一直以来都执行的很慢。针对这两种情况,我们来分析下可能是哪些原因导致的。二、针对偶尔很慢的情况一条 SQL 大多数情况正常,...转载 2020-01-03 09:43:11 · 2881 阅读 · 0 评论 -
MySQL 用户域权限相关操作
一 创建用户命令:CREATE USER 'username'@'host' IDENTIFIED BY 'password';说明:username:你将创建的用户名host:指定该用户在哪个主机上可以登陆,如果是本地用户可用localhost,如果想让该用户可以从任意远程主机登陆,可以使用通配符%password:该用户的登陆密码,密码可以为空,如果为空则该用户可以不需要密码登陆...转载 2020-01-02 19:35:02 · 1807 阅读 · 0 评论 -
MySQL 运维及开发规范
在去 IOE 的趋势下,MySQL 越来越流行。但是 MySQL 开发规范,设计规范方面的文档一直以来都是比较少的。MySQL 数据库设计的好坏,使用的好坏对一个系统的稳定性显的非常的重要。由于各开发人员对 MySQL 以及开发技术掌握的情况不一样,导致在数据库使用方面存在着不少错误的地方。希望通过本文,大家规范一下!基础规范用到事务的,必须使用 INNODB 存储引擎表字符集使用 UTF8...转载 2020-01-02 15:06:57 · 1429 阅读 · 0 评论 -
MySQL 字段操作命令
实验表为tt:CREATE TABLE tt( a INT NOT NULL, b INT NOT NULL, c INT NOT NULL, PRIMARY KEY(a), UNIQUE uni_b(b), INDEX idx_c(c));显示表结构:mysql> show create table tt;+-------+-------------------...原创 2019-12-30 17:56:12 · 1373 阅读 · 0 评论 -
MySQL 浅谈NOT NULL和DEFAULT的关系
MySQL在建表时,需要有字段名称、字段类型和约束条件,其中字段名称和字段类型是必填的,约束条件是选填的,约束条件主要有primary key、unique、not null、default等, 一个完整的建表语句如下:create table employees( 工号 varchar(4) primary key, 姓名 varchar(10) not null , 年龄 int defal...转载 2019-12-30 10:49:06 · 7151 阅读 · 0 评论 -
MySQL 时间戳(TimeStamp)自动更新
Mysql中时间戳自动更新 Mysql时间戳字段更新TimeStamp是Mysql中的时间戳字段,这个字段可以支持自动添加和更新。转自[https://www.cnblogs.com/zhaoyanghoo/p/5581710.html]1.概述在我们设计表的时候,考虑将行数据的创建时间和最后更新时间记录...转载 2019-12-30 10:30:01 · 2052 阅读 · 0 评论 -
MySQL 高性能索引策略和查询优化
高性能索引策略独立的列如果查询的列不是独立的,则MySQL就不会使用索引。“独立的列”是指索引列不能是表达式的一部分,也不能是函数的参数。前缀索引和索引选择性1.最左前缀匹配原则,非常重要的原则,mysql会一直向右匹配直到遇到范围查询(>、<、between、like)就停止匹配,比如a = 1 and b = 2 and c > 3 and d = 4 如果建立(a,...转载 2019-12-27 17:02:08 · 1389 阅读 · 0 评论 -
MySQL 索引最左匹配原则的理解
创建表create table test(a int ,b int,c int,d int,key index_abc(a,b,c))engine=InnoDB default charset=utf8;插入 10000 条数据DROP PROCEDURE IF EXISTS proc_initData;DELIMITER $CREATE PROCEDURE proc_in...转载 2019-12-27 11:56:16 · 1255 阅读 · 0 评论 -
MySQL 大数据量分页性能优化
mysql大数据量使用limit分页,随着页码的增大,查询效率越低下。直接用limit start, count分页语句, 也是我程序中用的方法:select * from product limit start, count当起始页较小时,查询没有性能问题,我们分别看下从10, 100, 1000, 10000开始分页的执行时间(每页取20条), 如下:select * from p...转载 2019-12-26 19:51:44 · 1354 阅读 · 0 评论 -
MySQL建表规范与常见问题
表设计库名、表名、字段名必须使用小写字母,“_”分割。库名、表名、字段名必须不超过12个字符。库名、表名、字段名见名知意,建议使用名词而不是动词。建议使用InnoDB存储引擎。存储精确浮点数必须使用DECIMAL替代FLOAT和DOUBLE。建议使用UNSIGNED存储非负数值。建议使用INT UNSIGNED存储IPV4。整形定义中不添加长度,比如使用INT,而不是INT(4)...转载 2019-12-26 19:05:33 · 1568 阅读 · 0 评论 -
MySQL 开启慢查询日志
开启 MySQL 慢查询日志开启mysql的慢查询日志,可以记录查询超过指定时间的sql语句,可以方便更好的优化数据库系统的性能。一、参数说明slow_query_log: 慢查询日志开启状态slow_query_log_file: 慢查询日志存放位置long_query_time: 查询超过多少秒才记录二、设置步骤1、查询相关参数配置mysql> show variab...转载 2019-12-24 11:50:34 · 1296 阅读 · 0 评论 -
MySQL 58到家数据库30条军规解读
基础规范1 必须使用InnoDB存储引擎解读:支持事务、行级锁、并发性能更好、CPU及内存缓存页优化使得资源利用率更高2 必须使用UTF8字符集解读:万国码,无需转码,无乱码风险,节省空间3 数据表、数据字段必须加入中文注释解读:N年后谁tm知道这个r1,r2,r3字段是干嘛的4 禁止使用存储过程、视图、触发器、Event解读:高并发大数据的互联网业务,架构设计思路是“解放数据库C...转载 2019-12-24 11:31:39 · 1380 阅读 · 0 评论 -
MySQL 随机获得一条数据的方法
最近由于需要大概研究了一下MYSQL的随机抽取实现方法。举个例子,要从tablename表中随机提取一条记录,大家一般的写法就是:SELECT * FROM tablename ORDER BY RAND() LIMIT 1。 但是,后来我查了一下MYSQL的官方手册,里面针对RAND()的提示大概意思就是,在ORDER BY从...转载 2019-12-20 15:26:28 · 4119 阅读 · 5 评论 -
MySQL IS NULL(IS NOT NULL)使用索引分析
简介mysql的sql查询语句中使用is null、is not null、!=对索引并没有任何影响,并不会因为where条件中使用了is null、is not null、!=这些判断条件导致索引失效而全表扫描。mysql官方文档也已经明确说明is null并不会影响索引的使用。MySQL can perform the same optimization on col_name IS...转载 2019-12-19 17:54:03 · 5346 阅读 · 3 评论 -
MySQL error(2014) Commands out of sync; you can't run this command now(情形2)
使用connect函数连接数据库时使用设置选项CLIENT_MULTI_STATEMENTS后,可以一次执行多条通过;分割的sql语句。需要要注意的是:即使执行的是不会返回结果集的两条update语句,依旧需要对结果集进行处理。否则,在之后的sql语句执行中,进行报错:MySQL error(2014) Commands out of sync; you can't run this com...原创 2019-12-19 14:19:50 · 1563 阅读 · 0 评论 -
MySQL 优化技巧
MySQL优化三大方向:1 优化MySQL所在服务器内核(此优化一般由运维人员完成)。2 对MySQL配置参数进行优化(my.cnf)此优化需要进行压力测试来进行参数调整。3 对SQL语句以及表优化。MySQL参数优化:1 MySQL 默认的最大连接数为 100,可以在 mysql 客户端使用以下命令查看mysql> show variables like 'max_connec...转载 2019-12-18 11:11:51 · 1351 阅读 · 0 评论 -
MySQL 表分区功能详解
1 什么是表分区?mysql数据库中的数据是以文件的形势存在磁盘上的,默认放在/mysql/data下面(可以通过my.cnf中的datadir来查看),一张表主要对应着三个文件,一个是frm存放表结构的,一个是myd存放表数据的,一个是myi存表索引的。如果一张表的数据量太大的话,那么myd,myi就会变的很大,查找数据就会变的很慢,这个时候我们可以利用mysql的分区功能,在物理上将这一张表...转载 2019-12-18 10:57:51 · 1405 阅读 · 0 评论 -
MySQL 千万级数据SQL的查询优化30条总结
1 对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。2 应尽量避免在 where 子句中对字段进行null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:select id from t where num is null可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:select id from t wh...转载 2019-12-17 18:11:54 · 1226 阅读 · 0 评论 -
MySQL 脏页刷新到磁盘的过程
mysql脏页刷新到磁盘的过程 ...转载 2019-12-17 16:51:49 · 2104 阅读 · 1 评论 -
MySQL 刷脏页问题
Mysql的刷脏页问题 平时的工作中,不知道你有没有遇到过这样的场景,一条 SQL 语句,正常执行的时候特别快,但是有时也不知道怎么回事,它就会变得特别慢,并且这样的场景很难复现,它不只随机,而且持续时间还很短。当内存数据页跟磁盘数据页内容不一致的时候,我们称这个内存页为“脏页”。内存数据写入到磁盘后,内存...转载 2019-12-17 16:39:02 · 1554 阅读 · 0 评论 -
MySQL 常用函数大全
MySQL数据库中提供了很丰富的函数。MySQL函数包括数学函数、字符串函数、日期和时间函数、条件判断函数、系统信息函数、加密函数、格式化函数等。通过这些函数,可以简化用户的操作。例如,字符串连接函数可以很方便的将多个字符串连接在一起。在这一讲中将讲解的内容包括:数学函数字符串函数日期和时间函数条件判断函数系统信息函数加密函数格式化函数 ...转载 2019-12-16 10:35:05 · 1460 阅读 · 0 评论 -
MySQL 配置详解
[client]port = 3306socket = /tmp/mysql.sock[mysqld]port = 3306socket = /tmp/mysql.sockbasedir = /usr/local/mysqldatadir = /data/mysqlpid-file = /data/mysql/mysql.piduser = mysqlbind-addres...转载 2019-12-13 10:54:13 · 1510 阅读 · 0 评论 -
MYSQL MVCC实现机制
1. MVCC简介1.1 什么是MVCCMVCC是一种多版本并发控制机制。 1.2 MVCC是为了解决什么问题?大多数的MYSQL事务型存储引擎,如,InnoDB,Falcon以及PBXT都不使用一种简单的行锁机制.事实上,他们都和MVCC–多版本并发控制来一起使用.大家都应该知道,锁机制可以控制并发操作,但是其系统开销较大,而MVCC可以在大多数情况下代替行级锁,使用MVCC,能...转载 2019-12-12 16:07:04 · 1368 阅读 · 0 评论 -
MySQL 锁(行锁、表锁、页锁、乐观锁、悲观锁等)
锁,在现实生活中是为我们想要隐藏于外界所使用的一种工具。在计算机中,是协调多个进程或县城并发访问某一资源的一种机制。在数据库当中,除了传统的计算资源(CPU、RAM、I/O等等)的争用之外,数据也是一种供许多用户共享访问的资源。如何保证数据并发访问的一致性、有效性,是所有数据库必须解决的一个问题,锁的冲突也是影响数据库并发访问性能的一个重要因素。从这一角度来说,锁对于数据库而言就显得尤为重要。...转载 2019-12-12 09:27:18 · 1315 阅读 · 0 评论 -
MySQL 隔离级别
平常开发过程中免不了对数据库的操作,并且还会有多个线程同时开启事务后对数据库进行访问,那此时不可避免就会出现多个线程之间交叉访问而导致数据的不一致,通过对数据库的隔离级别进行设置可以保证各线程数据获取的准确性。 在介绍隔离级别之前先要弄清楚数据库在并发事务下会出现的一些状态:脏读 脏读就是一个事务读取了另外一个事务未提交的数据。 ...转载 2019-12-11 16:35:41 · 1536 阅读 · 0 评论 -
MySQL 使用utf8mb4代替utf8
不要在 MySQL 中使用“utf8”,请使用“utf8mb4”最近我遇到了一个bug,我试着通过Rails在以“utf8”编码的MariaDB中保存一个UTF-8字符串,然后出现了一个离奇的错误:Incorrect string value: ‘😃 <…’ for column ‘summary’ at row 1我用的是UTF-8编码的客户端,服务器也是UTF-8编码的,数据...转载 2019-12-10 19:58:18 · 2760 阅读 · 0 评论 -
MySQL 8个character_set变量的基本作用
使用下列命令SHOW VARIABLES LIKE '%char%';可以查看 MySQL中8个 character_set 变量:mysql> show variables like 'char%';+--------------------------+---------------------------------------------------------+| Varia...转载 2019-12-10 18:45:59 · 1590 阅读 · 0 评论 -
MySQL 计算字段长度函数LENGTH()与CHAR_LENGTH()
MySQL中有两个函数用来计算字段的长度:LENGTH()、CHAR_LENGTH()。LENGTH()函数的定义为(命令为:? LENGTH):Name: ‘LENGTH’Description:Syntax: LENGTH(str)Returns the length of the string str, measured in bytes. A multibytecharact...原创 2019-12-10 15:54:24 · 4069 阅读 · 0 评论 -
SELECT 1 FROM table含义
select 1 from table与select * from table 从作用上来说是没有差别的,都是查看数据库中这个表是否有记录。select 1 from 中的1是一常量(可以为任意数值),查到的所有行的值都是它,但从效率上来说,1 >*,因为不用查字典表。table表是一个数据表,假设表的行数为10行。1:select 1 from table &nb...转载 2019-12-10 11:44:29 · 4810 阅读 · 0 评论 -
MySQL VARCHAR和CHAR类型
前述VARCHAR和CHAR是两种最主要的字符串类型。不幸的是,很难精确地解释这些值是怎么存储在磁盘和内存中的,因为这跟存储引擎的具体实现有关。下面的描述假设使用的存储引擎是InnoDB和/或者MyISAM。如果使用的不是这两种存储引擎,请参考所使用的存储引擎的文档。先看看VARCHAR和CHAR值通...转载 2019-12-10 10:55:21 · 1425 阅读 · 0 评论