第3章 MySQL数据类型

MySQL数据类型

  • 1、数字数据类型
    • 1.1 整数类型
    • 1.2 定点类型
    • 1.3 浮点类型
    • 1.4位值类型
    • 1.5 超出范围和溢出处理
    • 1.5.1 超出范围处理
    • 1.5.2 溢出处理
  • 2、日期和时间数据类型
  • 3、字符串数据类型
    • 3.1 char和varchar类型
    • 3.2 binary和varbinary类型
    • 3.3 blob 和 text类型
    • 3.4 enum类型
      • 3.4.1 创建和使用enum列
      • 3.4.1 枚举文字的索引编号
    • 3.5 set类型
  • 4、JSON数据类型
    • 4.1、JSON操作函数
    • 4.2 JSON值和非JSON值转换

1、数字数据类型

​ 在MySQL中,数据类型分为4类:

  • 整数类型:integer、int、smallint、tinyint、mediumint、bigint。
  • 定点数类型:decimal、numerical
  • 浮点数类型:float、double
  • 位置类型:bit

1.1 整数类型

类型存储空间(字节)
tinyint1
smalint2
mediumint3
int/integer(同义词,可以互换使用)4
bigint8

1.2 定点类型

​ decimal 和 numerical类型用于保存对精度要求很高的数据。在MySQL中,numerical被实现为decimal,所以适用于decimal数据类型的数据同样适用于numerical数据类型的数据。

​ 在decimal列声明中,可以指定精度和小数位数。

#在decimal列声明中指定精度为5,小数位为2
salary decimal(5,2)
  • 精度表示为值存储的有效位数。

  • 小数位数表示可以存储在小数点后的位数。

  • 如decimal小数位数为0,则值不包含小数点或小数部分,但定义为decimal数据类型的列的实际取值范围可能会受到所定义的精度或小数位数的限制。

  • 如定义为decimal数据类型的列分配的值的小数点后的位置超过所允许的位数,那么数值会被截断到允许的位数

    类型存储空间(字节)有符号的最小值无符号的最小值有符号的最大值无符号的最大值
    decimal对于 decimal(M,D),如果 M>D,则为 M+2,否则为 D+2取决于M和D的值取决于M和D的值取决于M和D的值取决于M和D的值

1.3 浮点类型

类型存储空间(字节)
float4
double8
  • 如要使程序具有最大的可移植性,定义浮点数类型为 float 或 double precision数据类型,且不指定精度或位数。

1.4位值类型

  • bit类型,它的表示方式为bit(m),m的取值范围为 1~64。 bit类型存储的是二进制字符串。
  • bit类型的数据范围为 bit(1) ~ bit(64),十进制:0 ~ 2 64 − 1 2^{64} -1 2641 ;
  • tinyint unsigned类型的数值取值范围为 0~ 255。
  • bit类型占用存储空间近似为(m+7)/8字节;
  • tinyint类型的存储空间为 1字节。
  • bit(1) 和tinyint,存储空间是一致的。

1.5 超出范围和溢出处理

MySQL在数值列中存储超出列数据类型允许范围的值时,其结果取决于当时启动的SQL模式:

  • 启用严格的SQL模式,MySQL会根据SQL标准拒绝超出返回的值显示错误提示信息,表名插入操作失败。
  • 未启用限制模式,MySQL会将插入的值截断为列数据类型返回的边界值存储。
    • 当把超出定义范围的值分配给定义为整数的列时,MySQL把列数据类型范围的边界值存储到列中。
    • 当为浮点或定点类型的列分配的值超出指定(或默认)精度和小数位数所隐含的范围时,MySQL将把列数据类型范围的边界值存储到列中。

1.5.1 超出范围处理

create table t1(i1 tinyint, t2 tinyint);#启用严格SQL模式
set sql_mode = 'tradtitinl';
mysql> insert into t1(i1,i2) values (256,256);
ERROR 1264 (22003): Out of range value for column 'i1' at row 1#未启用严格SQL模式
set sql_mode = '';
mysql> insert into t1(i1,i2) values (256,256);
Query OK, 1 row affected, 2 warnings (0.00 sec)#查询上面的插入语句时出现的警告信息
mysql> show warnings;
+---------+------+---------------------------------------------+
| Level   | Code | Message                                     |
+---------+------+---------------------------------------------+
| Warning | 1264 | Out of range value for column 'i1' at row 1 |
| Warning | 1264 | Out of range value for column 'i2' at row 1 |
+---------+------+---------------------------------------------+
2 rows in set (0.00 sec)

1.5.2 溢出处理

​ 数值表达式计算期间的溢出会导致错误。

#有符号 bigint的最大值为 9223372036854775807
mysql> select 9223372036854775807+1;
ERROR 1690 (22003): BIGINT value is out of range in '(9223372036854775807 + 1)'#想操作成功,可以将值转换为无符号数select cast(9223372036854775807 as unsigned) + 1;
+-------------------------------------------+
| cast(9223372036854775807 as unsigned) + 1 |
+-------------------------------------------+
|                       9223372036854775808 |
+-------------------------------------------+
1 row in set (0.00 sec)#还可以修改数值的数据类型,把数值类型修改为浮点型
mysql> select 9223372036854775808.0 + 1;
+---------------------------+
| 9223372036854775808.0 + 1 |
+---------------------------+
|     9223372036854775809.0 |
+---------------------------+
1 row in set (0.00 sec)#在默认情况下,unsigned整数之间的减法(其中一个类型为unsigned)会产生一个无符号数。若干如果产生一个负数,则会报错
mysql> select cast(0 as unsigned) -1;
ERROR 1690 (22003): BIGINT UNSIGNED value is out of range in '(cast(0 as unsigned) - 1)'#如果 no_unsignde_subtraction 启用了SQL模式,则不会出现异常
mysql> set sql_mode = 'no_unsigned_subtraction';
Query OK, 0 rows affected (0.00 sec)
mysql> select cast(0 as unsigned) -1;
+------------------------+
| cast(0 as unsigned) -1 |
+------------------------+
|                     -1 |
+------------------------+
1 row in set (0.00 sec)

2、日期和时间数据类型

​ 表示时间值的日期和时间类型 :datetime、date、timestamp、time和year。每种时间类型都有一个有效值范围和一个“零”值,当指定不符合规则的日期或时间数据时,MySQL将使用 “零” 值代替。

  • MySQL以标准格式输出给定的日期或时间类型的值。如果格式不恰当,可能会出现不可预测的结果。
  • MySQL可以以多种格式解释用户数输入的值,但是日期部分必须按 年-月-日,不能使用 月-日-年 或 日-月-年的顺序。如果将其它字符串转换为 年-月-日 的顺序,可以使用 str_to_date() 函数进行转换。
  • 对于包含2位数年份值的不明确日期,MySQL会使用一下规则进行解释:
    • 70-99 范围内的年份值转换为 1979-1999。
    • 00-69 范围内的年份值转换为 2000-2069。
  • 默认情况下,当MySQL遇到无效的日期或时间类型的值时,会将该值转换为该类型的 ‘’零‘’值。如果时间类型的值超出范围,其值会被剪裁到时间范围的响应断点。
  • MySQL允许将 “零” 值 ‘0000-00-00’ 存储为 “虚拟日期”。在某些情况下,比使用null值方便,并且使用更少的数据和索引空间。可以禁止 ’0000-00-00’ 存储为 “虚拟日期”,启用no_zero_date模式。
类型存储(字节)范围格式用途
date31000-01-01 到 9999-12-31YYYY-MM-DD日期值
time3‘-838:59:59’到’838:59:59’HH:MM:SS时间值
year11901到2155YYYY年份值
datetime81000-01-01 00:00:00 到 9999:12:31 23:59:59YYYY-MM-DD HH:MM:SS日期和时间值
timestamp41970-01-01 00:00:00 到 2038-1-19 11:14:07YYYY-MM-DD HH:MM:SS日期和时间值

3、字符串数据类型

​ 在MySQL中,字符串数据类型:char、varchar、text、binary、varbinary、blob、enum和set。对于数据类型定义为 char、varchar和text的列,MySQL以字符为单位定义长度规范。对于数据类型定义为 binary、varbinary和blob的列,MySQL以字节为单位定义长度规范。

​ 当列定义为char、varchar、enum和set的数据类型,同时还可以指定列的字符集,防止乱码问题。

#创建表指定字段类型时这是字符集格式create table mytable(->  c1 varchar(255) character set utf8,->  c2 text character set latin1 collate latin1_general_cs->);
Query OK, 0 rows affected, 1 warning (0.02 sec)

3.1 char和varchar类型

​ 在MySQL中,char和varchar类型相似,但存储和索引方式有所不同,最大长度和是否保留尾随空格方面也不同。

​ char 和 varchar类型的声明需要规定存储的最大字符数。

  • char
    • char类型当度可以是 0~255的任意值。
    • 插入类型的列存储值时,会用空格向右填充到指定的长度
    • 设置启动 SQL模式(“set sql_mode = ‘pad_char_to_full_length’; ”)时,char类型被检索到的值,其尾随的空格不会删除。
  • varchar
    • varchar类型列中的值是可变长度的字符串。
    • 长度可以值 0~65535的值。
    • varchar的有效最大长度受最大行大小和使用的字符集约束。
    • varchar值存储1字节或2字节的长度字节。
      • 内容字符长度不超过255字段,则长度字段使用1字节。
      • 内容字符长度都超过255字段,则长度字段是用2字节。
  • 未启用严格SQL模式
    • char或varchar类型的列分配的值超过该列的最大长度,则该值将被截断并生成警告信息。
    • 非空格字符的截断,可以使用严格的SQL模式提示错误(而不是警告)并禁止插入值。
    • 对于varchar类型的列,无论使用那种SQL模式,超出规定长度的尾随空格在插入之间都会被截断并生成警告信息。
    • 对于char列,无论使用那种SQL模式,都会插入的值中截断多余的尾随空格。

char和varchar类型的差异

内容char(4)占用字节varchar(4)占用字节
‘’’ ’4字节‘’1字节
‘ab’'ab ’4字节‘ab’3字节
‘abcd’‘abcd’4字节‘abcd’5字节
‘abcdefgh’‘abcd’4字节‘abcd’5字节
#char和varchar类型的差异
MySQL server version for the right syntax to use near 'tablw tb(t varchae(4) ,b char(4))' at line 1
mysql> create table tb(->  t varchar(4),->  b char(4)-> );
Query OK, 0 rows affected (0.02 sec)mysql> insert into tb(t,b) values('ab ','ab ');
Query OK, 1 row affected (0.01 sec)mysql> select concat('[',t,']'),concat('[',b,']') from tb;
+-------------------+-------------------+
| concat('[',t,']') | concat('[',b,']') |
+-------------------+-------------------+
| [ab ]             | [ab]              |
+-------------------+-------------------+
1 row in set (0.00 sec)

3.2 binary和varbinary类型

​ 在MySQL中,binary和varbinary类型很相似。与char、varchar类型不同,它们存储的是字符串不是字节串,binary和varbinary类型是以 字节为单位来测量长度的,不是以字符为单位。

  • binary
    • 当binary类型值被存储时,用右填充模式充值到指定的长度,填充值0x00(0字节)。
    • 当插入数据时,使用0x00向右填充,并且没有为检索删除尾随字节。
  • varbinary
    • 与binary类型不同的是,varbinary类型的值是可变长度的字符串。
    • 在插入值时不会使用0x00填充,查询的时候也不会丢弃任何字节。
    • 在对列值进行比较的时候,所有的字节都是有效的,并且0x00 < space。
#binary类型的值被存储时,填充值“0x00”影响列值存储
mysql> create table t(->  c binary(3)-> );
Query OK, 0 rows affected (0.02 sec)mysql> insert into t set c = 'a';
Query OK, 1 row affected (0.01 sec)# hex()函数值以十六进制形式显示 
mysql> select hex(c), c='a',c='a\0\0'from t;
+--------+-------+-----------+
| hex(c) | c='a' | c='a\0\0' |
+--------+-------+-----------+
| 610000 |     0 |         1 |
+--------+-------+-----------+
1 row in set (0.01 sec)

3.3 blob 和 text类型

  • blob类型的值是一个二进制的大对象,可以容纳可变数量的数据。
    • tinyblob、blob、mediumblob 和 longblob 类型的区别只是存储的最大长度不相同。
    • blob类型的值被视为二进制字符串(字节字符串),具有二进制字符集和排序规则,基于列值中字节的数值对值进行排序和比较。
  • text类型的值被视为非二进制字符串(字符串),具有二进制之外的字符集,并且根据字符集的排序规则对值进行排序和比较。
类型存储范围使用用途
text0~65525字节长文本数据
mediumblob0~16777215字节二进制形式的中等长度文本数据
mediumtext0~16777215字节中等长度文本数据
longblob0~4294967295字节二进制形式的极大文本数据
longtext0~4294967295字节极大文本数据

3.4 enum类型

​ enum类型(枚举类型)的列值表示一个字符串对象,其值选自在表创建时列规范的枚举值。

优点:

  • 在列具有有限的数据集合的情况下压缩数据空间。输入的字符串会自动编码为数字。
  • 可读的查询和输出。在查询时,实际存储的数字被转换为相应的字符。

3.4.1 创建和使用enum列

枚举值必须是带引号的字符串

# 例
mysql> create table mytable(->  name varchar(40),->  size enum('x-small','small','medium')-> );
Query OK, 0 rows affected (0.02 sec)mysql> insert into mytable (name,size) values('','x-small'),('','small'),('',1);
Query OK, 3 rows affected (0.01 sec)
Records: 3  Duplicates: 0  Warnings: 0mysql> update mytable set size = 'x-small' where size = 2;
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0mysql> select name,size from mytable;
+------+---------+
| name | size    |
+------+---------+
|      | x-small |
|      | x-small |
|      | x-small |
+------+---------+
3 rows in set (0.00 sec)

在给字段使用enum类型的时候,MySQL服务会自动给枚举的字符串添加索引编号

3.4.1 枚举文字的索引编号

​ 每个枚举值都有一个索引编号,列规范中列出的元素都分配有索引号,索引编号从1开始。空字符串的索引编号为0,nul的索引编号为null。枚举列最多只能有 65535 个不同的元素。

3.5 set类型

  • set类型(集合类型)的列值表示可以有零个或多个字符串对象。

  • 一个set类型的列最多可以有64个不同的成员值,并且每个值必须从创建表是指定的值列表中选择。

  • set类型由多个逗号分隔的列值集合组成,set类型成员本身不应包含逗号。

#指定set('one','two') not null 的列可以具一下值:
''
'one'
'two'
'one','two'

将数据存储set列中,则对于指定的列set(‘a’,‘b’,‘c’,‘b’)

set类型字段值十进制值二进制值
‘a’10001
‘b’20010
‘c’30011
‘d’40100

​ 无论插入值时元素的顺序是怎么的,查询展示时是根据创建表指定的顺序列出的,无论插入值的次数是有多,该值中的每个元素只出现一次。

#一列被指定为 set('a','b','c','d')
mysql> create table myset(col set('a','b','c','d'));
Query OK, 0 rows affected (0.01 sec)mysql> insert into myset (col) values-> ('a,b'),('d,a'),('a,d,d'),('d,a,d');
Query OK, 4 rows affected (0.01 sec)
Records: 4  Duplicates: 0  Warnings: 0mysql> select col from myset;
+------+
| col  |
+------+
| a,b  |
| a,d  |
| a,d  |
| a,d  |
+------+
4 rows in set (0.00 sec)

4、JSON数据类型

JSON数据类型的优点:

  • 存储在JSON类型列中的JSON文档会被自动验证,无效的文档会产生错误。
  • 存储在JSON类型列中的JSON文档会被转换为允许快速读取文档元素的内部格式。
  • 在MySQL9中,优化器可以执行JSON类型列的局部就地更新,而不用删除旧文档在将新文档写入该列。

​ 在MySQL中,JSON类型列的值被写为字符串。如果字符串不符合JSON数据格式,则会产生错误。

#插入无效JSON值
mysql> create table t1(jdoc json);
Query OK, 0 rows affected (0.01 sec)mysql> INSERT INTO t1 (jdoc) VALUES ('{"key1": "value1", "key2": "value2"}');
Query OK, 1 row affected (0.01 sec)mysql> insert into t1 values('1[1,2');
ERROR 3140 (22032): Invalid JSON text: "The document root must not be followed by other values." at position 1 in value for column 't1.jdoc'.

4.1、JSON操作函数

  • json_type()函数:用于返回对应的数据库类型。

    mysql> select json_type('["a","b","c"]');
    +----------------------------+
    | json_type('["a","b","c"]') |
    +----------------------------+
    | ARRAY                      |
    +----------------------------+
    1 row in set (0.01 sec)mysql> select json_type('"a"');
    +------------------+
    | json_type('"a"') |
    +------------------+
    | STRING           |
    +------------------+
    1 row in set (0.00 sec)#不是JSON格式时,会抛出异常
    mysql> select json_type('a');
    ERROR 3141 (22032): Invalid JSON text in argument 1 to function json_type: "Invalid value." at position 0.
    
  • json_array()函数(参数可以为空):用于返回参数值的JSON数组

    mysql> select json_array('a',false,1);
    +-------------------------+
    | json_array('a',false,1) |
    +-------------------------+
    | ["a", false, 1]         |
    +-------------------------+
    1 row in set (0.01 sec)mysql> select json_array();
    +--------------+
    | json_array() |
    +--------------+
    | []           |
    +--------------+
    1 row in set (0.00 sec)
    
  • json_object函数(参数可以为空):用于返回键-值对(Key-Value Pair)的JSON对象

    mysql> select json_object('key1','a','key2','b');
    +------------------------------------+
    | json_object('key1','a','key2','b') |
    +------------------------------------+
    | {"key1": "a", "key2": "b"}         |
    +------------------------------------+
    1 row in set (0.00 sec)
    
  • json_merge_preserve()函数:用于获取两个或多个JSON文档并返回组合结果

    mysql> select json_merge_preserve('["a",123]','{"key": "value"}');
    +-----------------------------------------------------+
    | json_merge_preserve('["a",123]','{"key": "value"}') |
    +-----------------------------------------------------+
    | ["a", 123, {"key": "value"}]                        |
    +-----------------------------------------------------+
    1 row in set (0.00 sec)
    
  • json_merge_parch()函数: 用于返回多个JSON类型合并之后的对象

    mysql> select json_merge_patch('{"a": 3, "b": 2}','{"c": 3,"a": 4}');
    +--------------------------------------------------------+
    | json_merge_patch('{"a": 3, "b": 2}','{"c": 3,"a": 4}') |
    +--------------------------------------------------------+
    | {"a": 4, "b": 2, "c": 3}                               |
    +--------------------------------------------------------+
    1 row in set (0.00 sec)
    
  • json_extract()函数:用于提取JSON对象值

    mysql> select json_extract('{"id": 8, "name": "clay"}',"$.name");
    +----------------------------------------------------+
    | json_extract('{"id": 8, "name": "clay"}',"$.name") |
    +----------------------------------------------------+
    | "clay"                                             |
    +----------------------------------------------------+
    1 row in set (0.01 sec)mysql> select json_extract('{"id": 8, "name": "clay"}',"$.*");
    +-------------------------------------------------+
    | json_extract('{"id": 8, "name": "clay"}',"$.*") |
    +-------------------------------------------------+
    | [8, "clay"]                                     |
    +-------------------------------------------------+
    1 row in set (0.00 sec)
    
  • json_extract()函数:用于提取JSON数组值

    mysql> select json_extract('["a","b","c"]','$[1]');
    +--------------------------------------+
    | json_extract('["a","b","c"]','$[1]') |
    +--------------------------------------+
    | "b"                                  |
    +--------------------------------------+
    1 row in set (0.00 sec)mysql> select json_extract('["a","b","c"]','$[1 to 2]');
    +-------------------------------------------+
    | json_extract('["a","b","c"]','$[1 to 2]') |
    +-------------------------------------------+
    | ["b", "c"]                                |
    +-------------------------------------------+
    1 row in set (0.00 sec)
    
  • json_replace()函数:用于替换值

    mysql> select json_replace('{"id": 10, "name": "clay"}', '$.name', 'clay2');
    +---------------------------------------------------------------+
    | json_replace('{"id": 10, "name": "clay"}', '$.name', 'clay2') |
    +---------------------------------------------------------------+
    | {"id": 10, "name": "clay2"}                                   |
    +---------------------------------------------------------------+
    1 row in set (0.00 sec)
    
  • json_set()函数:用于设置值(替换旧值,并插入不存在的新值)

    mysql> select json_set('{"id": 11, "name": "clay"}','$.name2', 'caly2');
    +-----------------------------------------------------------+
    | json_set('{"id": 11, "name": "clay"}','$.name2', 'caly2') |
    +-----------------------------------------------------------+
    | {"id": 11, "name": "clay", "name2": "caly2"}              |
    +-----------------------------------------------------------+
    1 row in set (0.00 sec)
    
  • json_insert()函数:用于插入值(插入值,但不替代已经存在的旧值)

    mysql> select json_insert('[1,2,3,4]', '$[5]', 5);
    +-------------------------------------+
    | json_insert('[1,2,3,4]', '$[5]', 5) |
    +-------------------------------------+
    | [1, 2, 3, 4, 5]                     |
    +-------------------------------------+
    1 row in set (0.00 sec)mysql> select json_insert('[1,2,3,4]', '$[1]', 4);
    +-------------------------------------+
    | json_insert('[1,2,3,4]', '$[1]', 4) |
    +-------------------------------------+
    | [1, 2, 3, 4]                        |
    +-------------------------------------+
    1 row in set (0.00 sec)
    
  • json_remove()函数:删除JSON数据,删除指定值后的JSON文档

    mysql> select json_remove('[1,2,3,4]', '$[3]');
    +----------------------------------+
    | json_remove('[1,2,3,4]', '$[3]') |
    +----------------------------------+
    | [1, 2, 3]                        |
    +----------------------------------+
    1 row in set (0.00 sec)mysql> select json_remove('{"id": 13, "name": "clay"}', '$.name');
    +-----------------------------------------------------+
    | json_remove('{"id": 13, "name": "clay"}', '$.name') |
    +-----------------------------------------------------+
    | {"id": 13}                                          |
    +-----------------------------------------------------+
    1 row in set (0.00 sec)
    

4.2 JSON值和非JSON值转换

数据类型CAST(其他类型转换为JSON)CAST(JSON转换为其他类型)
JSON
utf8字符类型(utf8mb4、utf8、ascii)该字符串被解析为JSON值JSON值被序列化为utf8mb4字符串
其他字符类型其他编码的字符被隐式转换为utf8编码并按照utf编码进行处理JSON值被序列化为utf8mb字符串,然后转换为其他字符编码
null结果null转换为JSON类型的值不使用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.tpcf.cn/diannao/86581.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

label-studio的使用教程(导入本地路径)

文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…

mysql为什么一个表中不能同时存在两个字段自增

背景。设置sort自增。会引发错误 通常自增字段都是用于表示数据的唯一性。数据库限制。需要自定义排序字段大小。

牛客round95D

原题链接&#xff1a;D-小红的区间修改&#xff08;一&#xff09;_牛客周赛 Round 95 题目背景&#xff1a; 初始拥有一个长度10^100元素全为0的数组&#xff0c;进行q查询&#xff0c;每次查询如果区间内的元素都为0就将区间变为首项为 1、公差为 1 的等差数列&#xff1b;否…

visual studio 2022更改主题为深色

visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中&#xff0c;选择 环境 -> 常规 &#xff0c;将其中的颜色主题改成深色 点击确定&#xff0c;更改完成

实践篇:利用ragas在自己RAG上实现LLM评估②

文章目录 使用ragas做评估在自己的数据集上评估完整代码代码讲解1. RAG系统构建核心组件初始化文档处理流程 2. 评估数据集构建3. RAGAS评估实现1. 评估数据集创建2. 评估器配置3. 执行评估 本系列阅读&#xff1a; 理论篇&#xff1a;RAG评估指标&#xff0c;检索指标与生成指…

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列&#xff0c;以便知晓哪些列包含有价值的数据&#xff0c;…

PostgreSQL 安装与配置全指南(适用于 Windows、macOS 与主流 Linux 发行版)

PostgreSQL 是一个功能强大、开源、稳定的对象关系数据库系统&#xff0c;广泛用于后端开发、数据处理与分布式架构中。本指南将手把手教你如何在 Windows、macOS 以及主流 Linux 发行版 上安装 PostgreSQL&#xff0c;并附上安装验证命令与基础配置方法。 一、Windows 安装与配…

WordPress博客文章SEO的优化技巧

在数字时代&#xff0c;博客不仅用于表达观点&#xff0c;也能提升品牌影响力并吸引潜在客户。许多服务器提供商&#xff08;如 Hostease&#xff09;支持 WordPress 一键安装功能&#xff0c;方便新手快速完成安装&#xff0c;专注于内容创作和 SEO 优化。然而&#xff0c;写出…

Python:操作 Excel 折叠

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…

雨季智慧交通:从车辆盲区到客流统计的算法全覆盖

雨季智慧交通中的视觉分析技术应用 一、背景&#xff1a;雨季交通的复杂挑战 雨季是城市交通管理的关键考验期。以济南为例&#xff0c;强对流天气伴随的短时强降水、雷雨大风及冰雹&#xff0c;不仅导致道路积水、能见度骤降&#xff0c;还加剧了大型车辆&#xff08;如渣土…

安全生产管理是什么?安全生产管理系统都有哪些核心功能?

随着法律法规的日益严格和公众对安全意识的提升&#xff0c;企业面临的安全生产压力也越来越大。无论是大型企业还是中小型企业&#xff0c;安全生产管理不仅关系到企业的生存与发展&#xff0c;更直接关系到员工的生命安全和企业的社会形象。因此&#xff0c;理解并实施有效的…

【PyCharm必会基础】正确移除解释器及虚拟环境(以 Poetry 为例 )

#工作记录 【PyCharm使用基础】 当遇到虚拟环境难以修复的场景&#xff0c;我们需要删除当前解释器和虚拟环境然后再重新创建虚拟环境&#xff0c;以下是在PyCharm中正确移除的步骤。 一、进入解释器设置 在 PyCharm 界面右下角&#xff0c;点击Poetry (suna0)&#xff0c;选…

day028-Shell自动化编程-判断进阶

文章目录 1. 特殊变量补充2. 变量扩展-变量子串2.1 获取变量字符的长度2.2 给变量设置默认值 3. 命令3.1 dirname3.2 basename3.3 cut 4. 条件测试命令&#xff1a;[]4.1 逻辑运算符4.2 文件测试4.3 案例&#xff1a;书写脚本-检查文件类型4.4 逻辑运算4.5 案例&#xff1a;书写…

oracle sql 语句 优化方法

1、表尽量使用别名&#xff0c;字段尽量使用别名.字段名&#xff0c;这样子&#xff0c;可以减少oracle数据库解析字段名。而且把 不需要的字段名剔除掉&#xff0c;只保留有用的字段名&#xff0c;不要一直使用 select *。 2、关联查询时&#xff0c;选择好主表 。oracle解析…

【Java】Ajax 技术详解

文章目录 1. Filter 过滤器1.1 Filter 概述1.2 Filter 快速入门开发步骤:1.3 Filter 执行流程1.4 Filter 拦截路径配置1.5 过滤器链2. Listener 监听器2.1 Listener 概述2.2 ServletContextListener3. Ajax 技术3.1 Ajax 概述3.2 Ajax 快速入门服务端实现:客户端实现:4. Axi…

07 APP 自动化- appium+pytest+allure框架封装

文章目录 一、PO二、代码简单实现项目框架预览&#xff1a;base_page.pydir_config.pyget_data.pylogger.pystart_session.pyconfig.yamlkey_code.yamllaunch_page_loc.pylogin_page_loc.pylaunch_page.pylogin_page.pytest_login.pypytest.inirun.py APP 自动化代码总和 一、P…

用户体验升级:表单失焦调用接口验证,错误信息即时可视化

现代前端应用中&#xff0c;表单交互是用户体验的重要组成部分。而表单验证作为其中的核心环节&#xff0c;不仅需要前端的即时反馈&#xff0c;还需要与后端接口联动进行数据合法性校验。本文将详细介绍如何在Vue3中实现表单输入与接口验证的无缝联动&#xff0c;并优雅地展示…

Vue 插槽(Slot)用法详解

插槽(Slot)是Vue中一种强大的内容分发机制&#xff0c;它允许你在组件中定义可替换的内容区域&#xff0c;为组件提供了更高的灵活性和可复用性。本文将全面介绍Vue插槽的各种用法。 1. 基本插槽 基本插槽是最简单的插槽形式&#xff0c;它允许父组件向子组件插入内容。 子组…

C++ 标准模板库(STL)详解文档

C 标准模板库&#xff08;STL&#xff09;详解文档 1 前言2 常用容器2.1 内容总览2.2 向量 vector2.2.1 概述2.2.2 常用方法2.2.3 适用场景2.2.4 注意事项 2.3 栈 stack2.3.1 概述2.3.2 常用方法2.3.3 注意事项 2.4 队列 queue2.4.1 概述2.4.2 常用方法2.4.3 注意事项 2.5 优先…

【入坑系列】TiDB 强制索引在不同库下不生效问题

文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…