MySQL 是怎样运行的

字符集和比较规则 我们上边说 utf8 字符集表示一个字符需要使用14个字节,但是我们常用的一些字符使用13个字节就可以表 示了。而在 MySQL 中字符集表示一个字符所用最大字节长度在某些方面会影响系统的存储和性能,所以设计 MySQL 的大叔偷偷的定义了两个概念:
utf8mb3 :阉割过的 utf8 字符集,只使用13个字节表示字符。 utf8mb4 :正宗的 utf8 字符集,使用14个字节表示字符。 有一点需要大家十分的注意,在 MySQL 中 utf8 是 utf8mb3 的别名,所以之后在 MySQL 中提到 utf8 就意味着使 用1~3个字节来表示一个字符,如果大家有使用4字节编码一个字符的情况,比如存储一些emoji表情啥的,那请 使用 utf8mb4 。 SHOW COLLATION LIKE ‘utf8_%’; 字符比较规则 MySQL 有4个级别的字符集和比较规则,分别是: 服务器级别 数据库级别 表级别 列级别 1 2 CREATE TABLE 表名 (列的信息) [[DEFAULT] CHARACTER SET 字符集名称] [COLLATE 比较规则名称] 1 2 3 CREATE TABLE 表名( 列名 字符串类型 [CHARACTER SET 字符集名称] [COLLATE 比较规则名称], 其他列... ); InnoDB 而我们知道读写磁盘的速度非常慢,和内存读写差了几个数量级,所以当我 们想从表中获取某些记录时, InnoDB 存储引擎需要一条一条的把记录从磁盘上读出来么?不,那样会慢死, InnoDB 采取的方式是:将数据划分为若干个页,以页作为磁盘和内存之间交互的基本单位,InnoDB中页的大小 一般为 16 KB。也就是在一般情况下,一次最少从磁盘中读取16KB的内容到内存中,一次最少把内存中的16KB 内容刷新到磁盘中。 ...

<span title='2023-06-18 18:46:44 +0800 +0800'>June 18, 2023</span>&nbsp;·&nbsp;3 min&nbsp;·&nbsp;潜水员

Mysql 分区

可以解决什么问题 表太大, 无法全部放入内存中 表有热点数据, 其他均是历史数据 分区更容易维护, 批量删除,修复 可以跨多个硬件设备 减少单个索引互斥访问 独立备份和恢复分区 主要目的就是对表, 进行一个粗粒度的过滤; 原理 将一个表在物理上分层多个更小的部分, 但是在逻辑上, 仍是只有一个表. 执行 SQL 时, 可以通过合适的过滤今天, 过滤掉那边不需要查询的分区, 以此提高性能. 支持类型为: 水平分区, 不支持垂直分区; 分区的数据操作流程 先打开并锁住所有的分区底层表, 过滤掉多余的分区. 再进行操作. 分区类型 range list hash key 创建分区时, 分区的列, 必须是主键或者唯一索引的一部分 1 2 3 4 5 6 7 8 9 create table t1 ( col1 int null, col2 int null, col3 int null, unique key(col1, col2, col3) ) partitionby hash(col3) partitions 4; Range 创建分区 ...

<span title='2023-04-27 16:16:48 +0800 +0800'>April 27, 2023</span>&nbsp;·&nbsp;2 min&nbsp;·&nbsp;潜水员

Mysql 快速备份数据

1 2 CREATE TABLE dbto.table_name like dbfrom.table_name; insert into dbto.table_name select * from dbfrom.table_name; 原文

<span title='2022-12-20 10:55:10 +0800 +0800'>December 20, 2022</span>&nbsp;·&nbsp;1 min&nbsp;·&nbsp;潜水员

Mysql- 数据类型 - 数字

概览 Mysql 支持以下数据类型 数字类型 串类型(字符和字节) 日期和时间 空间 JSON 数字类型 整数类型 Interger 类型 存储大小 bytes 其他别名 TinyInt 1 bool, boolean = tinyint(1) SmallInt 2 MediumInt 3 Int 4 BigInt 8 int(M) 表示显示宽度, 最大显示宽度为(255), M 与存储空间的大小无关. 空间大小由具体类型决定. 如果具体数值达不到宽度, 左边就会用0值补齐至 M 位. 浮点 ( Floating-Point ) 类型 存储 补充 范围 Float 4 bytes 单精度 Double 8 bytes 双精度 Float(p) p 表示小数点后的精度位数 Float(M, D) Mysql 语法: M表示总显示位数, D表示小数点后个数 – 由Mysql自己做约分处理. Mysql 8.0 后废弃该语法. ...

<span title='2022-07-31 17:49:46 +0800 +0800'>July 31, 2022</span>&nbsp;·&nbsp;1 min&nbsp;·&nbsp;潜水员

Mysql- 数据类型 - 日期

概览 Mysql 支持以下数据类型 数字类型 串类型(字符和字节) 日期类型 空间 JSON 日期类型 Mysql 支持的数据类型 DATE TIME DATETIME TIMESTAMP YEAR Date 只存储日期数据, 不包含时间. YYYY-MM-DD, 范围是从 ‘1000-01-01’ to ‘9999-12-31’ DateTime 存储日期, 也存储时间 'YYYY-MM-DD hh:mm:ss' 范围是从'1000-01-01 00:00:00’ to ‘9999-12-31 23:59:59’ TIMESTAMP 存储Unix时间戳数据 会受到服务器时区影响– 存储的时候转化成标准的Unix时间戳(0时区), 取数据时反之 时区环境变量设置 范围 ‘1970-01-01 00:00:01’ UTC to ‘2038-01-19 03:14:07’ UTC. 相关函数: FROM_UNIXTIME 把 Unix 时间戳转化成日期 UNIX_TIMESTAMP 把日期转化成 Unix 时间戳 YEAR 显示形式 YYYY, 可选显示位数YYYY(M) 默认4位显示 ‘1991’ TIME 只有时间部分,没有日期部分 hh:mm:ss, 范围从 ‘-838:59:59’ 到 ‘838:59:59’ ...

<span title='2022-07-31 17:49:46 +0800 +0800'>July 31, 2022</span>&nbsp;·&nbsp;2 min&nbsp;·&nbsp;潜水员

Mysql 不支持事务嵌套

mysql 在事务中再开启事务,前一个事务会被自动提交 stackoverflow

<span title='2022-06-02 16:16:58 +0800 +0800'>June 2, 2022</span>&nbsp;·&nbsp;1 min&nbsp;·&nbsp;潜水员