MYSQL8 新增了JSON 类型。
在某些时候,对于网页中不需要经常改动的数据,一般以数组形式的字符串存入库中。这样不易更改 数据。使用 JSON 类型可以很好的解决这个问题
1.JSON类型
创建方式:
CREATE TABLE 表名
...
json字段名称 JSON
...)
下面创建一个字段为 JSON 类型
基本方法
常用的方法:
JSON_ARRAY()
JSON_OBJECT()
JSON_SET()
JSON_REPLACE()
JSON_REMOVE()
使用
JSON_ARRAY()
和 JSON_OBJECT()
方法可以创建 JSON 对象
使用
JSON_PRETTY()
可以将数据 以更清晰的格式显示
下面定义了 @data 变量,使用 JSON_PRETTY()
查询
在 JSON 数组或对象中添加值一般只用到 JSON_SET
以及 JSON_REPLACE
注意:上面的方法都是使用的 SELECT
关键字,并不会更改原数据。
可以和其他的语句一起使用,更改表数据
上面将 json_tab 表中的 content 字段(json 中的 icp 属性) 更改成了 lmonkey
删除数据
上面使用 JSON_EXTARCT
方法,查询了 json_tab
表中 content
字段的 $.icp
属性
JSON_CONTAINS_PATH( )
可以有多个参数,下面来实现一下
上面有 @j_data
变量,为 JSON 类型。
然后使用JSON_CONTAINS_PATH
查询了其变量中是否有 age
属性。one 参数的意思为,只要有一个属性(或者JSON 数组的索引)存在,返回 1 。否则返回 0。
除了 one 参数还有一个 all 参数,意为,之后的参数都必须在当前 JSON数据 中存在,否则返回 0。
2.存储引擎
MYSQL 可以将数据以不同的技术方式来储存到 文件 / 内存 中,这种技术就是存储引擎
每一中存储引擎都有不同的机制,索引技巧以及内置功能等
建表时,可以指定其存储引擎。建表后,也可以使用 SHOW CREATE TABLE 表名
来查询当前所使用引擎,如下
存储引擎在 MYSQL8 有以下几种
其中最常用到的就是 innoDB
,其次就是 MyISAM
存储引擎的特点
设置表引擎的方法:
- 修改
MYSQL
配置文件:defaul-storage-engine = 引擎名
- 修改表的引擎:
ALTER TABLE 表名 ENGINE = 引擎名
- 创建表时,指定引擎:
CREATE TABLE 表名
....
)ENGINE = 引擎名;
3.并发控制
-
并发控制:当多个连接同时对记录进行修改时,保持数据的一致性、完整性
-
锁:
共享锁 ( 读锁 ):同一时间段,可以多个用户进行数据读取,期间不会影响数据
排他锁 ( 写锁 ):在任何时间,都只能一个用户来进行数据写入,在此期间会阻塞其他锁 ( 写、读 ) 操作 -
锁颗粒:
表锁:一种开销最小的锁策略 (只对表上锁,可以不管表中的字段)
行锁:一种开销最大的锁策略 (对表中的数据行来上锁,需要牵扯更多的数据,开销更大)
4.事务处理
作用:保持数据的完整性
上面的 user1 向 user2 转账 500 元。
实现步骤:
- user1 账户扣除 500 元
- user2 增加 500 元
当上面转账出现问题,执行完 步骤一 ,步骤二没执行。
这时就可以使用 MYSQL 事务处理机制将 数据回滚至之前的状态。
4.主从复制
若是出现,当前表是锁表的状态,此时不能读表,需要等待表开锁。这时,可以不用等待,使用主从复制,主库为锁表状态,当前读表的操作在从库中进行操作。让主库负责写,从库负责读
当主表夯机时,可以使用从库当作主库
架构扩展。多库储存可以提高 I/O 性能。
运行原理
主库(mastser)内的增删改操作会写入 日志文件(binlog)中,并发送给 从库(slave)。
从库 会建立对主库的连接,使得用户可以进行读操作。从库也会将 拿到的 日志文件(binlog),写入自己的 日志文件(relay)中,并根据(binlog)同步跟主库的操作。
配置步骤(基于日志点): https://www.bilibili.com/video/BV1CJ411i7AK?p=77
基于 GTID
复制
配置步骤(GTID)
- 主服务器 创建用户名,
- 主服务器配置
ini
文件
- 重启主服务器 mysql 服务
- 从服务器配置
ini
文件,并重启 mysql 服务
- 主服务器输入 导出 命令,导出数据(目的为从主数据一致)
此时会生成对应的 导出 sql 文件 ,如下
- 从库拷贝主库导出文件,并输入导入命令
注意:将主库中导出的 sql文件,拷贝到从库中的同一目录下,再输入导入命令,如下
- 关联完毕,输入命令,启动从库
配置信息:
启动命令:
- 输入命令,查看书否启动成功
SHOW SLAVE STATUS/G
启动成功