目录
1.JSON 文档中值的路径 JSON_SEARCH()
2.将数据插入 JSON 文档 JSON_SET()
3.释放 JSON 列值的二进制表示形式的空间部分更新后 JSON_STORAG_FREE()
4.用于存储 JSON 文档的二进制表示形式的空间 JSON_STORAG_SIZE()
5.从 JSON 表达式返回数据作为关系表 JSON_TABLE()
6.JSON 值的类型 JSON_TYPE()
7.取消引号的 JSON 值 JSON_UNQUOTE()
8.JSON 值是否有效 JSON_VALLD()
9.从指定路径的 JSON 文档中提取值 JSON_VALUE()
10.当前行访问上一行的数据或上一行之前的行 LAG()
11.返回参数的月份的最后一天 LAST_DAY
12.最后一个插入的“自动增量”列的值 LAST_INSERT_ID()
13.窗口框架最后一行的参数值 LAST_VALUE()
14.返回小写参数 LOWER() / LCAST()
15.分区内当前行前导行的参数值 LEAD()
16.返回最小的参数 LEAST()
17.返回指定的最左侧字符数 LEFT()
18.返回字符串的长度(以字节为单位) LENGTH()
19.简单的模式匹配 LIKE
20.从点值构造线字符串 LINESTRING()
21.返回参数的自然对数 LN()
22.加载命名文件 LOAD_FILE()
23.返回子字符串第一次出现的位置 LOCATE()
24.返回第一个参数的自然对数 LOG()
25.返回参数的以 10 为底的对数 LOG10()
26.返回参数的以 2 为底的对数 LOG2()
27.返回小写参数 LOWER()
28.返回字符串参数,用指定的字符串左填充 LAPD()
29.删除前导空格 LTRIM()
30.返回一组逗号分隔的字符串 MAKE_SET()
31.从一年中的哪一天创建日期 MAKEDATE()
32.从小时、分钟、秒创建时间 MAKETIME()
33.阻止,直到复制副本读取并应用了所有更新,直到指定位置 MASTER_POS_WAIT()
34.执行全文搜索 MATCH()
35.返回最大值 MAX()
36.一个几何图形的 MBR 是否包含另一个几何图形的 MBR MBRContains()
37.一个 MBR 是否被另一个 MBR 覆盖 MBRCoverdBy()
38.一个 MBR 是否覆盖另一个 MBR MBRCovers()
39.两个几何形状的 MBR 是否不相交 MBRDisjoint()
40.两个几何形状的 MBR 是否相等 MBREquals()
41.两个几何形状的 MBR 是否相交 MBRIntersects()
42.两个几何形状的 MBR 是否重叠 MBROverlaps()
43.两个几何形状的 MBR 是否接触 MBRTouches()
44.一个几何图形的 MBR 是否在另一个几何图形的 MBR 内 MBRWithin()
45.计算 MD5 校验和 MD5()
46.数检查一个指定的值是否是一个 JSON 数组中的元素 MEMBER OF()
47.从参数返回微秒 MICROSECOND()
48.返回从指定位置开始的子字符串 MID()
49.返回最小值 MIN()
50.从参数返回分钟数 MINUTE()
脚本
SET @json = '[
{
"name": "Tim",
"age": 20,
"hobbies": [
{ "name": "Car", "weight": 10 },
{ "name": "Sports", "weight": 20 }
]
},
{
"name": "Tom",
"age": 20,
"hobbies": [
{ "name": "Reading", "weight": 10 },
{ "name": "Sports", "weight": 20 }
]
}
]';
SELECT JSON_SEARCH(@json, 'all', 'S%');
分析
JSON_SEARCH(json, one_or_all, search_str) JSON_SEARCH(json, one_or_all, search_str, escape_char) JSON_SEARCH(json, one_or_all, search_str, escape_char, path)
参数
json
必需的。一个 JSON 文档。
one_or_all
必需的。可用值:, 。 根据 参数决定是否返回所有匹配的路径:
'one'
'all'
JSON_SEARCH()
one_or_all
- 如果是 , 函数将返回第一个匹配的路径。
'one'
JSON_SEARCH()
- 如果是 , 函数将返回所有匹配的路径。所有的路径会包装在一个数组内返回。
'all'
JSON_SEARCH()
search_str
必需的。被搜索的字符串。您可以在 参数中使用 和 通配符,就像 LIKE 一样:
search_str
%
_
%
匹配任意数量的任意字符。_
匹配一个任意字符。
escape_char
可选的。如果 中包含 和 ,需要在他们之前添加转移字符。默认是 。
search_str
%
_
\
path
可选的。只能在此路径下进行搜索。
结果
脚本
SET @obj = '{"x": 1}';
SELECT JSON_SET(@obj, '$.x', '10', '$.y', '[1, 2]');
分析
JSON_SET(json, path, value[, path2, value2] ...)
参数
json
必需的。被修改的 JSON 文档。
path
必需的。一个有效的路径表达式,它不能包含 或 。
*
**
value
必需的。要设置的数据。
结果
脚本
CREATE TABLE test_json_storage_free (
json_col JSON NOT NULL
);
INSERT INTO test_json_storage_free
VALUES ('{"x": 1, "y": "abcd"}');
SELECT
json_col,
JSON_STORAGE_SIZE(json_col) AS JSON_STORAGE_SIZE,
JSON_STORAGE_FREE(json_col) AS JSON_STORAGE_FREE
FROM
test_json_storage_free;
分析
JSON_STORAGE_FREE(json)
参数
json
必需的。一个 JSON 文档。它可以是一个 JSON 字符串,或者一个 JSON 列。
结果
脚本
SELECT
'Size' AS `Json`,
JSON_STORAGE_SIZE('0') AS `0`,
JSON_STORAGE_SIZE('"a"') AS `a`,
JSON_STORAGE_SIZE('true') AS `true`,
JSON_STORAGE_SIZE('[1, 2, 3]') AS `[1, 2, 3]`;
分析
JSON_STORAGE_SIZE(json)
参数
json
必需的。一个 JSON 文档。它可以是一个 JSON 字符串,或者一个 JSON 列。
结果
脚本
SELECT
*
FROM
JSON_TABLE(
'[{"x":10,"y":11}, {"y": 21}, {"x": 30}]',
'$[*]'
COLUMNS (
id FOR ORDINALITY,
x INT PATH '$.x' DEFAULT '100' ON EMPTY,
y INT PATH '$.y'
)
) t;
分析
JSON_TABLE( json, path COLUMNS (column[, column[, ...]]) ) column: name FOR ORDINALITY | name type PATH string_path [on_empty] [on_error] | name type EXISTS PATH string_path | NESTED [PATH] path COLUMNS (column[, column[, ...]]) on_empty: {NULL | DEFAULT json_string | ERROR} ON EMPTY on_error: {NULL | DEFAULT json_string | ERROR} ON ERROR
参数
json
必需的。一个 JSON 文档。
path
必需的。一个路径表达式。
column
必需的。定义一个列。您可以使用如下 4 中方式定义一个列:
name FOR ORDINALITY
: 生成一个从 1 开始的计数器列,名字为 。name
name type PATH string_path [on_empty] [on_error]
: 将由路径表达式 指定的值放在名字为 的列中。string_path
name
name type EXISTS PATH string_path
:根据 指定的位置是否有值将 或 放在名字为 的列中。string_path
1
0
name
NESTED [PATH] path COLUMNS (column[, column[, ...]])
: 将内嵌的对象或者数组中的数据拉平放在一行中。
{NULL | ERROR | DEFAULT value} ON EMPTY
可选的。如果指定了,它决定了指定路径下没有数据时的返回值:
NULL ON EMPTY
: 如果指定路径下没有数据, 函数将使用 ,这是默认的行为。JSON_TABLE()
NULL
DEFAULT value ON EMPTY
: 如果指定路径下没有数据, 函数将使用 。JSON_TABLE()
value
ERROR ON EMPTY
: 如果指定路径下没有数据, 函数将抛出一个错误。JSON_TABLE()
{NULL | ERROR | DEFAULT value} ON ERROR
可选的。如果指定了,它决定了处理错误的逻辑:
NULL ON ERROR
: 如果有错误, 函数将使用 ,这是默认的行为。JSON_TABLE()
NULL
DEFAULT value ON ERROR
: 如果有错误, 函数将使用 。JSON_TABLE()
value
ERROR ON ERROR
: 如果有错误, 函数将抛出一个错误。JSON_TABLE()
结果
脚本
SELECT JSON_TYPE('true'), JSON_TYPE('null'), JSON_TYPE('"abc"');
分析
JSON_TYPE(json_value)
参数
json_value
必需的。一个 JSON 值。
JSON值类型
OBJECT
: JSON 对象ARRAY
: JSON 数组BOOLEAN
: JSON 布尔值NULL
: JSON 值null
INTEGER
: MySQL , , , 和 类型的值TINYINT
SMALLINT
MEDIUMINT
INT
BIGINT
DOUBLE
: MySQL 和 类型的值DOUBLE
FLOAT
DECIMAL
: MySQL 和 类型的值DECIMAL
NUMERIC
DATETIME
: MySQL 和 类型的值DATETIME
TIMESTAMP
DATE
: MySQL 类型的值DATE
TIME
: MySQL 类型的值TIME
STRING
: MySQL , , , 和CHAR
VARCHAR
TEXT
ENUM
SET
BLOB
: MySQL , , 和BINARY
VARBINARY
BLOB
BIT
OPAQUE
: 以上之外的类型
结果
脚本
SELECT JSON_UNQUOTE('"abc"');
分析
参数
json_val
必需的。一个字符串。
MySQL转义字符
结果
脚本
SELECT JSON_VALID(1), JSON_VALID('1');
分析
JSON_VALID(str)
参数
str
必需的。需要被验证的内容。
结果
脚本
SET @json = '[
{
"name": "Tim",
"age": 20,
"amount": 123.456,
"note": "He is perfect."
},
{
"name": "Tom",
"age": 20,
"amount": 456.1
}
]';
SELECT JSON_VALUE(@json, '$[0].age'),
JSON_VALUE(@json, '$[1].amount'),
JSON_VALUE(@json, '$[0].note' DEFAULT 'Nothing' ON EMPTY) AS `$[0].note`,
JSON_VALUE(@json, '$[1].note' DEFAULT 'Nothing' ON EMPTY) AS `$[1].note`;
分析
JSON_VALUE(json, path [RETURNING type] [{NULL | ERROR | DEFAULT value} ON EMPTY] [{NULL | ERROR | DEFAULT value} ON ERROR])
参数
json
必需的。一个 JSON 文档。
path
必需的。一个路径表达式。
RETURNING type
可选的。他决定了返回值的类型。您可以使用下面值中的一个:
FLOAT
DOUBLE
DECIMAL
SIGNED
UNSIGNED
DATE
TIME
DATETIME
YEAR
(MySQL 8.0.22 及更高版本)CHAR
JSON
{NULL | ERROR | DEFAULT value} ON EMPTY
可选的。如果指定了,它决定了指定路径下没有数据的返回值:
NULL ON EMPTY
: 如果指定路径下没有数据, 函数将返回 ,这是默认的行为。JSON_VALUE()
NULL
DEFAULT value ON EMPTY
: 如果指定路径下没有数据, 函数将返回 。JSON_VALUE()
value
ERROR ON EMPTY
: 如果指定路径下没有数据, 函数将抛出一个错误。JSON_VALUE()
{NULL | ERROR | DEFAULT value} ON ERROR
可选的。如果指定了,它决定了处理错误的逻辑:
NULL ON ERROR
: 如果有错误, 函数将返回 ,这是默认的行为。JSON_VALUE()
NULL
DEFAULT value ON ERROR
: 如果有错误, 函数将返回 。JSON_VALUE()
value
ERROR ON ERROR
: 如果有错误, 函数将抛出一个错误。JSON_VALUE()
结果
脚本
create table a
(
id int auto_increment primary key,
score int
);
insert into a (score)
values (90),
(90),
(85),
(80),
(70);
select *,lag(score) over () from a;
分析
访问上一行的数据或上一行之前的行
结果
脚本
select LAST_DAY(now());
结果
脚本
create table b
(
id int auto_increment primary key,
name varchar(32)
);
insert into b(name) value ('张三');
select last_insert_id();
insert into b(name) values ('李四'),('王五');
select last_insert_id();
分析
必须要有自动增量,返回最后一次插入的自动增量的值
结果
脚本
CREATE TABLE order_content
(
order_id VARCHAR(8),
user_id VARCHAR(8),
order_price INT,
order_date DATE
);
INSERT INTO order_content (order_id, user_id, order_price, order_date)
VALUE ('o001', 'u001', 800, '2021-06-18')
, ('o002', 'u001', 800, '2021-06-19')
, ('o003', 'u001', 1000, '2021-06-22')
, ('o004', 'u001', 1200, '2021-06-24')
, ('o005', 'u002', 400, '2021-06-25')
, ('o006', 'u002', 1500, '2021-06-26')
, ('o007', 'u002', 2100, '2021-06-28')
, ('o008', 'u003', 900, '2021-07-01')
, ('o009', 'u003', 700, '2021-07-03')
, ('o010', 'u003', 1700, '2021-07-04');
SELECT *,
LAST_VALUE(order_price) OVER (PARTITION BY user_id ORDER BY order_price) AS lastvalue
FROM order_content;
分析
LAST_VALUE () 函数是一个 窗口函数 ,允许您选择有序行集中的最后一行。. LAST_VALUE () 函数返回 expression 有序行集的最后一行的值。
结果
脚本
select lower('ASDF'),LCASE('ASDF');
分析
把大写字母转成小写字母
结果
脚本
create table a
(
id int auto_increment primary key,
score int
);
insert into a (score)
values (90),
(90),
(85),
(80),
(70);
insert into a (score) value (100);
select *, lead(score) over ()
from a;
分析
与LAG()相反
结果
脚本
select least(90,25,63,51);
结果
脚本
SELECT LEFT('hello world', 5);
分析
LEFT(str,len)
返回str从前面数len个字符
结果
脚本
select length('hello world!')
分析
空格特殊符号也算一个长度
结果
脚本
create table b
(
id int auto_increment primary key,
name varchar(32)
);
insert into b(name) value ('张三');
insert into b(name) values ('李四'),('王五');
#名字像(like)_ _(两个字的)
select * from b where name like '__';
结果
脚本
SET @ls = 'LineString(1 1,2 2,3 3)';
分析
线字符串
例子
在世界地图上,物体 可以代表河流。
LineString
在城市地图中,对象可以 代表街道。
LineString
线字符串
性能
A 的坐标为 线段,由每对连续的点定义。
LineString
脚本
select ln(1), ln(10),ln(exp(1));
分析
exp(x)代表自然对数(e)的X次方 exp(1)=e
与log()一样
至于它结果为什么是0/2.3......./1 这是数学问题
结果
脚本
SELECT LOAD_FILE('test.txt');
分析
文件不存在会返回null
结果
脚本
SELECT LOCATE('a', 'hello world'),LOCATE('ld', 'hello world');
结果
脚本
select log(2), log(exp(1)), log(1);
分析
与ln()一样
log底
普通应用都是10
计算机学科是2
编程语言里面是e
结果
脚本
select log10(10), log10(100), log10(1);
结果
脚本
select log2(2), log2(4), log2(1);
结果
脚本
select lower('ASDF');
分析
大写转小写
结果
脚本
SELECT LPAD('aaa',6,'**');
分析
返回字符串str,左填充用字符串padstr填补到len字符长度。 如果str为大于len长,返回值被缩短至len个字符(不能超过 len 长)。
结果
脚本
select ltrim(' hello')
结果
脚本
SELECT MAKE_SET(1, 'a','b','c','d');
分析
MAKE_SET(bits,str1,str2,...)
返回一个设定值(含子字符串分隔字符串","字符),在设置位的相应位的字符串。str1对应于位0,str2到第1位,依此类推。在str1,str1有NULL值,…那么不添加到结果。
bits将转为二进制,1的二进制为0001,倒过来为1000,所以取str1(a),打印a.
结果
脚本
SELECT MAKEDATE(2022,31), MAKEDATE(2022,100);
分析
语法
MAKEDATE(year, day)
参数值
参数 描述 year 必需。年(4位) day 必需。一个表示一年中日期的数字 根据年份和天数值创建并返回日期
结果
脚本
SELECT MAKETIME(12,15.6,30.35632);
分析
语法
MAKETIME(hour, minute, second)
参数值
参数 描述 hour 必需。小时值 minute 必需。分钟值 second 必需。秒值 根据小时、分钟和秒值创建并返回时间值:
结果
脚本
SELECT MASTER_POS_WAIT('mysql-bin.000001', 51635390,60);
分析
select master_pos_wait(file, pos[, timeout]).
File 和pos 是对应的主库的值,可以通过show master status 得到。
Timeout 是等待的秒数。不加代表为0 ,立即返回结果。如果指定了时间,但是已经达到了position ,那么还是会立即返回。也就是等待事件在从库未到达指定的position 才生效。
这个函数主要用于从库执行,查看从库是否已经执行到了指定的主库上binlog position 。
Action
Return
无论是否指定时间,达到
0
指定时间内达到
1
指定时间内未达到
-1
停止从属sql_thread NULL
结果
脚本
CREATE TABLE c (
id INT AUTO_INCREMENT NOT NULL PRIMARY KEY,
title VARCHAR(200),
body TEXT,
FULLTEXT (title,body)
);
INSERT INTO c (title,body) VALUES
('MySQL Tutorial','DBMS stands for DataBase ...'),
('How To Use MySQL Well','After you went through a ...'),
('Optimizing MySQL','In this tutorial we will show ...'),
('1001 MySQL Tricks','1. Never run mysqld as root. 2. ...'),
('MySQL vs. YourSQL','In the following database comparison ...'),
('MySQL Security','When configured properly, MySQL ...');
select * from c;
SELECT * FROM c WHERE MATCH (title,body) AGAINST ('database');
分析
TIP: 全文搜索,那么全文索引必不可少 FULLTEXT
结果
脚本
create table a
(
id int auto_increment primary key,
score int
);
insert into a (score)
values (90),
(90),
(85),
(80),
(70);
insert into a (score) value (100);
select max(score)
from a;
结果
36-43公共代码
SET @g1 = ST_GeomFromText('Polygon((0 0,0 3,3 3,3 0,0 0))');
SET @g2 = ST_GeomFromText('Point(1 1)');
脚本
SELECT MBRContains(@g1, @g2);
结果
脚本
SELECT MBRCovers(@g1, @g2),MBRCoveredby(@g2, @g1);
结果
脚本
SELECT MBRCovers(@g1, @g2),MBRCovers(@g2, @g1);
结果
脚本
select mbrdisjoint(@g1,@g2);
结果
脚本
select mbrequals(@g1,@g2);
结果
脚本
select mbrintersects(@g1,@g2);
结果
脚本
select mbroverlaps(@g1,@g2);
结果
脚本
select mbrtouches(@g1,@g2);
结果
脚本
select mbrwithin(@g1, @g2), mbrwithin(@g2, @g1);
结果
脚本
select md5('abc');
分析
MySQL 函数计算一个给定字符串的 MD5 摘要,并将结果作为一个 32 位的由十六进制字符组成的字符串返回
结果
脚本
SELECT
1 MEMBER OF('[1, 2, "a"]'),
'a' MEMBER OF('[1, 2, "a"]'),
'z' MEMBER OF('[1, 2, "a"]');
分析
value MEMBER OF(json_array)
参数
value
必需的。一个值。它可以是任意类型。
json_array
必需的。一个 JSON 数组。
结果
脚本
SELECT MICROSECOND('12:00:00.123456'),MICROSECOND('2022-12-13 16:50:2.00001246');
分析
返回时间里面秒数后面的毫秒值
结果
脚本
SELECT MID('Quadratically',5);
分析
MID(str, len)
相当于截取len-1个字符,返回余下的字符
结果
脚本
create table a
(
id int auto_increment primary key,
score int
);
insert into a (score)
values (90),
(90),
(85),
(80),
(70);
insert into a (score) value (100);
select min(score)
from a;
结果
脚本
select minute('2022-12-13 16:50:55');
结果