MYSQL8 新增了JSON 类型。
在某些时候,对于网页中不需要经常改动的数据,一般以数组形式的字符串存入库中。这样不易更改 数据。使用 JSON 类型可以很好的解决这个问题

1.JSON类型

创建方式:

CREATE TABLE 表名...

json字段名称 JSON

...)

下面创建一个字段为 JSON 类型

MySQL json类型的字段最大限制是多大 mysql8 json类型_JSON

基本方法

常用的方法:

JSON_ARRAY()JSON_OBJECT()

JSON_SET()

JSON_REPLACE()

JSON_REMOVE()

MySQL json类型的字段最大限制是多大 mysql8 json类型_存储引擎_02

使用 JSON_ARRAY()JSON_OBJECT() 方法可以创建 JSON 对象

MySQL json类型的字段最大限制是多大 mysql8 json类型_存储引擎_03

使用 JSON_PRETTY() 可以将数据 以更清晰的格式显示

下面定义了 @data 变量,使用 JSON_PRETTY() 查询

MySQL json类型的字段最大限制是多大 mysql8 json类型_数据_04

在 JSON 数组或对象中添加值一般只用到 JSON_SET 以及 JSON_REPLACE

MySQL json类型的字段最大限制是多大 mysql8 json类型_数据_05


注意:上面的方法都是使用的 SELECT 关键字,并不会更改原数据。可以和其他的语句一起使用,更改表数据

MySQL json类型的字段最大限制是多大 mysql8 json类型_JSON_06


上面将 json_tab 表中的 content 字段(json 中的 icp 属性) 更改成了 lmonkey

MySQL json类型的字段最大限制是多大 mysql8 json类型_存储引擎_07


删除数据

MySQL json类型的字段最大限制是多大 mysql8 json类型_数据_08


MySQL json类型的字段最大限制是多大 mysql8 json类型_存储引擎_09


上面使用 JSON_EXTARCT 方法,查询了 json_tab 表中 content 字段的 $.icp 属性JSON_CONTAINS_PATH( ) 可以有多个参数,下面来实现一下

MySQL json类型的字段最大限制是多大 mysql8 json类型_数据_10


上面有 @j_data 变量,为 JSON 类型。

然后使用JSON_CONTAINS_PATH 查询了其变量中是否有 age 属性。one 参数的意思为,只要有一个属性(或者JSON 数组的索引)存在,返回 1 。否则返回 0。

除了 one 参数还有一个 all 参数,意为,之后的参数都必须在当前 JSON数据 中存在,否则返回 0。

2.存储引擎

MYSQL 可以将数据以不同的技术方式来储存到 文件 / 内存 中,这种技术就是存储引擎
每一中存储引擎都有不同的机制,索引技巧以及内置功能等

建表时,可以指定其存储引擎。建表后,也可以使用 SHOW CREATE TABLE 表名来查询当前所使用引擎,如下

MySQL json类型的字段最大限制是多大 mysql8 json类型_JSON_11

存储引擎在 MYSQL8 有以下几种

MySQL json类型的字段最大限制是多大 mysql8 json类型_数据_12


其中最常用到的就是 innoDB,其次就是 MyISAM存储引擎的特点

MySQL json类型的字段最大限制是多大 mysql8 json类型_存储引擎_13

设置表引擎的方法:

  • 修改 MYSQL 配置文件:defaul-storage-engine = 引擎名
  • 修改表的引擎:ALTER TABLE 表名 ENGINE = 引擎名
  • 创建表时,指定引擎:
    CREATE TABLE 表名....)ENGINE = 引擎名;

3.并发控制

  • 并发控制:当多个连接同时对记录进行修改时,保持数据的一致性、完整性
  • 锁:
    共享锁 ( 读锁 ):同一时间段,可以多个用户进行数据读取,期间不会影响数据
    排他锁 ( 写锁 ):在任何时间,都只能一个用户来进行数据写入,在此期间会阻塞其他锁 ( 写、读 ) 操作
  • 锁颗粒:
    表锁:一种开销最小的锁策略 (只对表上锁,可以不管表中的字段)
    行锁:一种开销最大的锁策略 (对表中的数据行来上锁,需要牵扯更多的数据,开销更大)

4.事务处理

作用:保持数据的完整性

MySQL json类型的字段最大限制是多大 mysql8 json类型_存储引擎_14


上面的 user1 向 user2 转账 500 元。

实现步骤:

  1. user1 账户扣除 500 元
  2. user2 增加 500 元

当上面转账出现问题,执行完 步骤一 ,步骤二没执行。
这时就可以使用 MYSQL 事务处理机制将 数据回滚至之前的状态。

4.主从复制

若是出现,当前表是锁表的状态,此时不能读表,需要等待表开锁。这时,可以不用等待,使用主从复制,主库为锁表状态,当前读表的操作在从库中进行操作。让主库负责写,从库负责读
当主表夯机时,可以使用从库当作主库
架构扩展。多库储存可以提高 I/O 性能。

运行原理

MySQL json类型的字段最大限制是多大 mysql8 json类型_JSON_15


主库(mastser)内的增删改操作会写入 日志文件(binlog)中,并发送给 从库(slave)。

从库 会建立对主库的连接,使得用户可以进行读操作。从库也会将 拿到的 日志文件(binlog),写入自己的 日志文件(relay)中,并根据(binlog)同步跟主库的操作。

基于 GTID 复制

MySQL json类型的字段最大限制是多大 mysql8 json类型_JSON_16

配置步骤(GTID)

  1. 主服务器 创建用户名,
  2. 主服务器配置 ini 文件
  3. 重启主服务器 mysql 服务
  4. 从服务器配置 ini 文件,并重启 mysql 服务
  5. 主服务器输入 导出 命令,导出数据(目的为从主数据一致)

    此时会生成对应的 导出 sql 文件 ,如下
  6. 从库拷贝主库导出文件,并输入导入命令
    注意:将主库中导出的 sql文件,拷贝到从库中的同一目录下,再输入导入命令,如下
  7. 关联完毕,输入命令,启动从库
    配置信息:

    启动命令:
  8. 输入命令,查看书否启动成功
    SHOW SLAVE STATUS/G 启动成功