当前位置: 首页 > news >正文

MySQL 中的 sql_mode 选项以及配置

MySQL 中的 sql_mode 选项以及配置

目录

  • MySQL 中的 sql_mode 选项以及配置
    • 一、查询与设置 sql_mode
        • 1、查询 sql_mode
        • 2、设置 sql_mode
        • (1)通过命令设置
        • (2)在配置文件中设置
    • 二、sql_mode 支持的模式
        • 1、ANSI 模式(宽松模式)
        • 2、TRADITIONAL模式(严格模式)
        • 3、STRICT_TRANS_TABLES、STRICT_ALL_TABLES 模式(严格模式)
    • 三、sql_mode 常用取值的含义
        • 1、STRICT_TRANS_TABLES 和 STRICT_ALL_TABLES
        • 2、NO_ZERO_DATE
        • 3、NO_ZERO_IN_DATE
        • 4、ERROR_FOR_DIVISION_BY_ZERO
        • 5、ONLY_FULL_GROUP_BY
        • 6、NO_AUTO_VALUE_ON_ZERO
        • 7、ANSI_QUOTES
        • 8、NO_AUTO_CREATE_USER:
        • 9、PIPES_AS_CONCAT

sql_mode 是 MySQL 数据库中的一个环境变量,用于定义 MySQL 支持的 SQL 语法、数据校验等。MySQL 5.6 和 MySQL5.7 默认的 sql_mode 参数值是不一样的。MySQL 5.6 的 sql_mode 是NO_ENGINE_SUBSTITUTION,其实是一个空值,相当于没有什么模式设置,可以理解为宽松模式。MySQL 5.7的 sql_mode 是 STRICT_TRANS_TABLES,也就是严格模式。

如果设置为宽松模式,那么在插入数据时,即便是给了一个非法的数据(有几种原因可以使一个值为非法。例如:数据类型错误,不适合列,或超出范围。),也可能会被接受,并且不报错。例如:一个表表中有一个字段为 name,给 name 设置的字段类型为 char(10),如果在插入数据时,如果 name 字段对应的数据的长度超过了 10,例如数据为:‘1234567890abc’,则不会报错,并且取前 10 个字符保存到表中。即:数据被保为 ‘1234567890’。

在开发、测试、生产等环境中,应该采用严格模式。MySQL 5.7 版本将 sql_mode 默认值改为了严格模式。

一、查询与设置 sql_mode

1、查询 sql_mode

-- (1)查看当前会话的 sql_mode 取值:使用 select @@SESSION.sql_mode;
mysql> select @@SESSION.sql_mode;
+-----------------------------------------------------------------------+
| @@SESSION.sql_mode                                                    |
+-----------------------------------------------------------------------+
| ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
+-----------------------------------------------------------------------+
1 row in set (0.01 sec)-- (2)查看全局的 sql_mode 取值:使用 select @@GLOBAL.sql_mode;
mysql> select @@GLOBAL.sql_mode;
+-----------------------------------------------------------------------+
| @@GLOBAL.sql_mode                                                     |
+-----------------------------------------------------------------------+
| ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
+-----------------------------------------------------------------------+
1 row in set (0.00 sec)-- (3)使用 show variables like 'sql_mode';
mysql> show variables like 'sql_mode';
+-----------------------------------------------------------------------+
| Variable_name | Value                                                 |
+-----------------------------------------------------------------------+
| sql_mode      | ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
+-----------------------------------------------------------------------+
1 row in set (0.07 sec)

2、设置 sql_mode

(1)通过命令设置

使用命令设置 sql_mode 之后,如果重启 MySQL 服务则又会恢复为初始状态。

-- 使用 SET GLOBAL sql_mode = '具体模式';
-- 此方法只在当前会话中生效,关闭当前会话之后失效。
mysql> SET GLOBAL sql_mode = 'ANSI';
Query OK, 0 rows affected, 1 warning (0.02 sec)-- 使用 SET GLOBAL sql_mode = '具体模式';
-- 此方法在当前服务中生效,重新启动 MySQL 服务后失效。
mysql> SET SESSION sql_mode = 'ANSI';
Query OK, 0 rows affected, 1 warning (0.00 sec)-- 查看 sql_mode 的设置结果
mysql> show variables like 'sql_mode';
+---------------+-----------------------------------------------------------+
| Variable_name | Value                                                                          |
+---------------+-----------------------------------------------------------+
| sql_mode      | REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ONLY_FULL_GROUP_BY,ANSI |
+---------------+-----------------------------------------------------------+
1 row in set (0.01 sec)

(2)在配置文件中设置

此方法永久生效,即使重启 MySQL 服务仍然有效。修改 /etc/my.cnf,加入如下内容:

[root@localhost home]# vi /etc/my.cnf
[mysqld]
sql_mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER# 重新启动服务
[root@localhost home]# systemctl restart mysqld

查看 sql_mode 的设置结果:

mysql> show variables like 'sql_mode';
+---------------+-----------------------------------------------------------------+
| Variable_name | Value                                                           |
+---------------+-----------------------------------------------------------------+
| sql_mode      | ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER |
+---------------+-----------------------------------------------------------------+
1 row in set (0.00 sec)

二、sql_mode 支持的模式

MySQL 支持三种 sql_mode 模式:ANSI 模式、TRADITIONAL 模式与 STRICT_TRANS_TABLES 模式。

1、ANSI 模式(宽松模式)

等同于 REAL_AS_FLOAT、PIPES_AS_CONCAT、ANSI_QUOTES、IGNORE_SPACE、ONLY_FULL_GROUP_BY。对插入的数据进行校验,如果不符合定义类型或长度,对数据类型调整或截断保存,报 warning 警告。具体设置内容如下:

-- 设置 sql_mode 为 'ANSI模式';
mysql> SET SESSION sql_mode = 'ANSI';
Query OK, 0 rows affected, 1 warning (0.00 sec)-- 查看 sql_mode 的设置结果
mysql> show variables like 'sql_mode';
+---------------+-----------------------------------------------------------------+
| Variable_name | Value                                                           |
+---------------+-----------------------------------------------------------------+
| sql_mode      | REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ONLY_FULL_GROUP_BY,ANSI |
+---------------+------------------------------------------------------------------+
1 row in set (0.00 sec)

2、TRADITIONAL模式(严格模式)

等同于 STRICT_TRANS_TABLES、STRICT_ALL_TABLES、NO_ZERO_IN_DATE、NO_ZERO_DATE、ERROR_FOR_DIVISION_BY_ZERO、NO_AUTO_CREATE_USER、NO_ENGINE_SUBSTITUTION。当向 MySQL 数据库插入数据时,进行数据的严格校验,保证错误数据不能插入,报 error 错误。用于事务时,会进行事务的回滚。具体设置内容如下:

-- 设置 sql_mode 为 'TRADITIONAL模式';
mysql> SET SESSION sql_mode = 'TRADITIONAL';
Query OK, 0 rows affected, 1 warning (0.00 sec)-- 查看 sql_mode 的设置结果
mysql> show variables like 'sql_mode';
+---------------+------------------------------------------------------------------+
| Variable_name | Value                                                             |
+---------------+------------------------------------------------------------------+
| sql_mode      | STRICT_TRANS_TABLES,STRICT_ALL_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,TRADITIONAL,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
+---------------+------------------------------------------------------------------+
1 row in set (0.00 sec)

3、STRICT_TRANS_TABLES、STRICT_ALL_TABLES 模式(严格模式)

进行数据的严格校验,错误数据不能插入,报 error 错误。具体设置内容如下:

-- 设置 sql_mode 为 'STRICT_TRANS_TABLES 模式';
mysql> SET SESSION sql_mode = 'STRICT_TRANS_TABLES';
Query OK, 0 rows affected, 2 warnings (0.00 sec)-- 查看 sql_mode 的设置结果
mysql> show variables like 'sql_mode';
+---------------+---------------------+
| Variable_name | Value               |
+---------------+---------------------+
| sql_mode      | STRICT_TRANS_TABLES |
+---------------+---------------------+
1 row in set (0.01 sec)

三、sql_mode 常用取值的含义

1、STRICT_TRANS_TABLES 和 STRICT_ALL_TABLES

这两个选项对于 Innodb 表作用相同,对于单个 insert 操作,无论插入单行或是多行,只要插入数据与字段类型不兼容,则 insert 操作失败并回滚。

对于 Myisam 表是作用不同:

(1)STRICT_TRANS_TABLES:对于单个 insert 操作,插入单行数据与字段类型不兼容,则 insert 操作失败并回滚;插入多行数据,如果插入数据的第一行内容与字段类型不兼容,则 insert 操作失败并回滚,如果插入数据的第一行内容与字段类型兼容,但后续的数据行存在不兼容的情况,则兼容的数据正常插入,不兼容的数据会转换成符合字段类型的格式再插入,不会中断和回滚。

(2)STRICT_ALL_TABLES:与STRICT_TRANS_TABLES不同的是,如果插入数据的第一行内容与字段类型兼容,但后续的数据行存在不兼容的情况,则兼容的数据正常插入,不兼容的数据则会报错并终止 insert 操作。

这两个选项一般与 NO_ZERO_DATE、NO_ZERO_IN_DATE、ERROR_FOR_DIVISION_BY_ZERO 三个选项共同设置。

2、NO_ZERO_DATE

设置该值,MySQL 数据库不允许插入零日期。

3、NO_ZERO_IN_DATE

在严格模式下,不允许日期和月份为零。

4、ERROR_FOR_DIVISION_BY_ZERO

在 INSERT 或 UPDATE 过程中,如果数据被零除,则产生错误。如果未设置该模式,那么数据被零除时 MySQL 返回NULL。

-- 设置 sql_mode 为 'STRICT_TRANS_TABLES',出现一个警告,提示该模式需要与
-- NO_ZERO_DATE、NO_ZERO_IN_DATE、ERROR_FOR_DIVISION_BY_ZERO 合并使用
mysql> SET SESSION sql_mode = 'STRICT_TRANS_TABLES';
Query OK, 0 rows affected, 1 warning (0.00 sec)mysql> show variables like 'sql_mode';
+---------------+---------------------+
| Variable_name | Value               |
+---------------+---------------------+
| sql_mode      | STRICT_TRANS_TABLES |
+---------------+---------------------+
1 row in set (0.01 sec)mysql> show warnings;
+---------+------+---------------------------------------------------------------+
| Level   | Code | Message                                                       |
+---------+------+---------------------------------------------------------------+
| Warning | 3135 | 'NO_ZERO_DATE', 'NO_ZERO_IN_DATE' and 'ERROR_FOR_DIVISION_BY_ZERO' sql modes should be used with strict mode. They will be merged with strict mode in a future release. |
+---------+------+---------------------------------------------------------------+
1 row in set (0.00 sec)-- 插入除数为 0 的数据,则把 NULL 插入该列。
mysql> insert into t2 values(1,'tom','2000-1-1',20000/0);
Query OK, 1 row affected (0.00 sec)mysql> select * from t2;
+----+------+------------+--------+
| id | name | birth      | salary |
+----+------+------------+--------+
|  1 | tom  | 2000-01-01 |   NULL |
+----+------+------------+--------+
1 row in set (0.00 sec)-- 插入各种格式的空日期
mysql> insert into t2 values(2,'jack','0000-00-00',2520);
Query OK, 1 row affected (0.01 sec)mysql> insert into t2 values(3,'rose','1998-00-00',3000);
Query OK, 1 row affected (0.01 sec)mysql> insert into t2 values(4,'mark','1998-10-00',4000);
Query OK, 1 row affected (0.00 sec)mysql> insert into t2 values(5,'jerry','0000-10-25',4000);
Query OK, 1 row affected (0.00 sec)-- 插入过长的字符串
mysql> insert into t2 values(10,'tom123456789123456789','2000-1-1',20000);
ERROR 1406 (22001): Data too long for column 'name' at row 1mysql> select * from t2;
+----+-------+------------+---------+
| id | name  | birth      | salary  |
+----+-------+------------+---------+
|  1 | tom   | 2000-01-01 |    NULL |
|  2 | jack  | 0000-00-00 | 2520.00 |
|  3 | rose  | 1998-00-00 | 3000.00 |
|  4 | mark  | 1998-10-00 | 4000.00 |
|  5 | jerry | 0000-10-25 | 4000.00 |
+----+-------+------------+---------+
5 rows in set (0.00 sec)-- 设置 sql_mode 为 'STRICT_TRANS_TABLES,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO'
mysql> SET SESSION sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO';
Query OK, 0 rows affected (0.00 sec)mysql> show variables like 'sql_mode';
+---------------+---------------------------------------------------------+
| Variable_name | Value                                                   |
+---------------+---------------------------------------------------------+
| sql_mode      | STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO |
+---------------+---------------------------------------------------------+
1 row in set (0.00 sec)-- 插入除数为 0 的数据,则把 NULL 插入该列。
mysql> insert into t2 values(1,'tom','2000-1-1',20000/0);
ERROR 1365 (22012): Division by 0-- 插入各种格式的空日期
mysql> insert into t2 values(2,'jack','0000-00-00',2520);
ERROR 1292 (22007): Incorrect date value: '0000-00-00' for column 'birth' at row 1
mysql> insert into t2 values(3,'rose','1998-00-00',3000);
ERROR 1292 (22007): Incorrect date value: '1998-00-00' for column 'birth' at row 1
mysql> insert into t2 values(4,'mark','1998-10-00',4000);
ERROR 1292 (22007): Incorrect date value: '1998-10-00' for column 'birth' at row 1
mysql> insert into t2 values(5,'jerry','0000-10-25',4000);
Query OK, 1 row affected (0.01 sec)mysql> select * from t2;
+----+-------+------------+---------+
| id | name  | birth      | salary  |
+----+-------+------------+---------+
|  5 | jerry | 0000-10-25 | 4000.00 |
+----+-------+------------+---------+
1 row in set (0.00 sec)-- 插入过长的字符串
mysql> insert into t2 values(10,'tom123456789123456789','2000-1-1',20000);
ERROR 1406 (22001): Data too long for column 'name' at row 1

5、ONLY_FULL_GROUP_BY

对于 GROUP BY 聚合操作,如果在 SELECT 中的列没有在 GROUP BY 中出现,则这个 SQL 是不合法的。

-- sql_mode 没有设置 ONLY_FULL_GROUP_BY 选项
mysql> select * from emp group by dept_id;
+----+------+---------+
| id | name | dept_id |
+----+------+---------+
|  1 | tom  |      11 |
|  3 | mark |      12 |
+----+------+---------+
2 rows in set (0.00 sec)-- 设置 sql_mode 为 'STRICT_TRANS_TABLES,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,ONLY_FULL_GROUP_BY'
mysql> SET SESSION sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,ONLY_FULL_GROUP_BY';
Query OK, 0 rows affected (0.00 sec)mysql> show variables like 'sql_mode';
+---------------+--------------------------------------------------------------------+
| Variable_name | Value                                                              |
+---------------+--------------------------------------------------------------------+
| sql_mode      | ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO |
+---------------+--------------------------------------------------------------------+
1 row in set (0.01 sec)mysql> select * from emp group by dept_id;
ERROR 1055 (42000): Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'mydb.emp.id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

6、NO_AUTO_VALUE_ON_ZERO

该值将影响自增列的数据插入。默认设置下,插入 0 或 NULL 代表生成下一个自增长值。如果用户希望插入的值为 0,而该列又是自增长的,则这个选项就有用了。

-- sql_mode 没有设置 NO_AUTO_VALUE_ON_ZERO 选项
mysql> insert into t1 values(0,'tom');
Query OK, 1 row affected (0.00 sec)mysql> insert into t1 values(null,'tom');
Query OK, 1 row affected (0.01 sec)mysql> select * from t1;
+----+------+
| id | name |
+----+------+
|  1 | tom  |
|  2 | tom  |
+----+------+
2 rows in set (0.00 sec)-- 设置 sql_mode 为 'STRICT_TRANS_TABLES,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,ONLY_FULL_GROUP_BY,NO_AUTO_VALUE_ON_ZERO'
mysql> SET SESSION sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,ONLY_FULL_GROUP_BY,NO_AUTO_VALUE_ON_ZERO';
Query OK, 0 rows affected (0.00 sec)mysql> show variables like 'sql_mode';
+---------------+-------------------------------------------------------------+
| Variable_name | Value                                                        |
+---------------+-------------------------------------------------------------+
| sql_mode      | ONLY_FULL_GROUP_BY,NO_AUTO_VALUE_ON_ZERO,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO |
+---------------+-------------------------------------------------------------+
1 row in set (0.00 sec)mysql> insert into t1 values(0,'jerry');
Query OK, 1 row affected (0.00 sec)mysql> insert into t1 values(null,'jerry');
Query OK, 1 row affected (0.01 sec)mysql> select * from t1;
+----+-------+
| id | name  |
+----+-------+
|  0 | jerry |
|  1 | tom   |
|  2 | tom   |
|  3 | jerry |
+----+-------+
4 rows in set (0.00 sec)

7、ANSI_QUOTES

启用 ANSI_QUOTES后,不能用双引号来引用字符串。

mysql> select * from t1 where name="tom";
+----+------+
| id | name |
+----+------+
|  1 | tom  |
|  2 | tom  |
+----+------+
2 rows in set (0.00 sec)-- 设置 sql_mode 为 'STRICT_TRANS_TABLES,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,ONLY_FULL_GROUP_BY,NO_AUTO_VALUE_ON_ZERO,ANSI_QUOTES'
mysql> SET SESSION sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,ONLY_FULL_GROUP_BY,NO_AUTO_VALUE_ON_ZERO,ANSI_QUOTES';
Query OK, 0 rows affected (0.00 sec)mysql> show variables like 'sql_mode';
+---------------+---------------------------------------------------------------+
| Variable_name | Value                                                         |
+---------------+---------------------------------------------------------------+
| sql_mode      | ANSI_QUOTES,ONLY_FULL_GROUP_BY,NO_AUTO_VALUE_ON_ZERO,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO |
+---------------+---------------------------------------------------------------+
1 row in set (0.00 sec)mysql> select * from t1 where name="tom";
ERROR 1054 (42S22): Unknown column 'tom' in 'where clause'

8、NO_AUTO_CREATE_USER:

禁止 GRANT 创建密码为空的用户。

mysql> grant all on *.* to wang@localhost;
ERROR 1819 (HY000): Your password does not satisfy the current policy requirementsmysql> grant all on *.* to wang@localhost identified by '';
ERROR 1819 (HY000): Your password does not satisfy the current policy requirementsmysql> grant all on *.* to wang@localhost identified by 'abc';
ERROR 1819 (HY000): Your password does not satisfy the current policy requirementsmysql> grant all on *.* to wang@localhost identified by 'Wgx123456.';
Query OK, 0 rows affected, 1 warning (0.03 sec)

9、PIPES_AS_CONCAT

将 “||” 视为字符串的连接操作符而非或运算符,这和 Oracle 数据库是一样是,也和字符串的拼接函数 concat 类似。

mysql> select 'a'||'b';
+----------+
| 'a'||'b' |
+----------+
|        0 |
+----------+
1 row in set, 2 warnings (0.00 sec)mysql> show warnings;
+---------+------+---------------------------------------+
| Level   | Code | Message                               |
+---------+------+---------------------------------------+
| Warning | 1292 | Truncated incorrect DOUBLE value: 'a' |
| Warning | 1292 | Truncated incorrect DOUBLE value: 'b' |
+---------+------+---------------------------------------+
2 rows in set (0.00 sec)-- 设置 sql_mode 为 'STRICT_TRANS_TABLES,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,ONLY_FULL_GROUP_BY,NO_AUTO_VALUE_ON_ZERO,ANSI_QUOTES,PIPES_AS_CONCAT'
mysql> SET SESSION sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,ONLY_FULL_GROUP_BY,NO_AUTO_VALUE_ON_ZERO,ANSI_QUOTES,PIPES_AS_CONCAT';
Query OK, 0 rows affected (0.00 sec)mysql> show variables like 'sql_mode';
+---------------+---------------------------------------------------------------+
| Variable_name | Value                                                          |
+---------------+---------------------------------------------------------------+
| sql_mode      | PIPES_AS_CONCAT,ANSI_QUOTES,ONLY_FULL_GROUP_BY,NO_AUTO_VALUE_ON_ZERO,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO |
+---------------+---------------------------------------------------------------+
1 row in set (0.00 sec)mysql> select 'a'||'b',concat('a','b');
+----------+-----------------+
| 'a'||'b' | concat('a','b') |
+----------+-----------------+
| ab       | ab              |
+----------+-----------------+
1 row in set (0.00 sec)

相关文章:

费曼学习法个人总结-1

2024年4月27日 1,知道它叫什么和懂得它是什么是两件事,要了解事物的本质,不应该只是了解名字。 2,输出倒逼输入。 3,实施的5步骤 调整心态,开始行动指定目标,养成习惯找对方法,高…...

实时通讯技术 WebRTC 介绍

WebRTC WebRTC(Web Real-Time Communication)是一个支持网页浏览器进行实时语音对话或视频对话的技术。 历史 2010年5月,Google以6820万美元收购VoIP软件开发商Global IP Solutions的GIPS引擎,并改为名为“WebRTC”。WebRTC使用…...

059、观公孙大娘弟子舞剑器行

059、观公孙大娘弟子舞剑器行059、观公孙大娘弟子舞剑器行 唐●杜甫 昔有佳人公孙氏,一舞剑器动四方。 观者如山色沮丧,天地为之久低昂。 㸌如羿射九日落,矫如群帝骖龙翔。 来如雷霆收震怒,罢如江海凝清光。 绛唇珠袖两寂寞,晚有弟子传芬芳。 临颍美人在白帝,妙舞此曲神扬…...

c++补充

构造函数、析构函数 #include <iostream> using namespace std;// 构造函数、析构函数 // --- "构造函数"类比生活中的"出厂设置" --- // --- "析构函数"类比生活中的"销毁设置" --- // 如果我们不写这两种函数&#xff0c;编译…...

LeetCode 0216.组合总和 III:回溯(剪枝) OR 二进制枚举

【LetMeFly】216.组合总和 III&#xff1a;回溯(剪枝) OR 二进制枚举 力扣题目链接&#xff1a;https://leetcode.cn/problems/combination-sum-iii/ 找出所有相加之和为 n 的 k 个数的组合&#xff0c;且满足下列条件&#xff1a; 只使用数字1到9每个数字 最多使用一次 返…...

react之渲染与props

第一章描述用户界面 将Props 传递给组件 React 组件使用 props 来互相通信。每个父组件都可以提供 props 给它的子组件&#xff0c;从而将一些信息传递给它。Props 可能会让你想起 HTML 属性&#xff0c;但你可以通过它们传递任何 JavaScript 值&#xff0c;包括对象、数组和…...

MySQL 中的 sql_mode 选项以及配置

MySQL 中的 sql_mode 选项以及配置 目录MySQL 中的 sql_mode 选项以及配置一、查询与设置 sql_mode1、查询 sql_mode2、设置 sql_mode&#xff08;1&#xff09;通过命令设置&#xff08;2&#xff09;在配置文件中设置二、sql_mode 支持的模式1、ANSI 模式&#xff08;宽松模式…...

【C语言航路】第六站:指针初阶

目录 一、指针是什么 二、指针和指针类型 1.指针类型的意义 2.指针-整数 3.指针解引用 三、野指针 1.野指针的成因 &#xff08;1&#xff09;指针未初始化 &#xff08;2&#xff09;指针越界访问 &#xff08;3&#xff09;指针指向的空间释放 2.如何规避野指针 &a…...

从 JPA 2.x 迁移到 3.0

我最近收到了很多关于JPA 3.0的问题&#xff0c;由于EclipseLink和Hibernate现在提供了对它的全面支持&#xff0c;现在是时候仔细看看规范的最新更新了。作为从Java EE到Jakarta EE转换的一部分&#xff0c;Java Persistence API&#xff08;JPA&#xff09;更名为Jakarta Per…...

Allegro如何锁定器件操作指导

Allegro如何锁定器件操作指导 Allegro上可以锁定器件,避免误操作被移动,具体操作如下 选择fix命令 Find选择Symbols 框选需要锁定的器件 可以看到器件被锁住了 除了这个方法之外,还有另外一种方法锁定器件,选择edit-property Find选择Symbols...

第三章:SpringBoot的配置文件-核心技术

目录 1、文件类型 1.1、properties 1.2、yaml 1.2.1、简介 1.2.2、基本语法 1.2.3、数据类型 1.2.4、示例 2、配置提示 1、文件类型 1.1、properties 同以前的properties用法 1.2、yaml 1.2.1、简介 YAML 是 "YAML Aint Markup Language"&#xff08;YA…...

Vue中的计算属性

计算属性&#xff1a;实际上是把vm中的属性进行计算加工&#xff0c;最后能够返回给页面一个结果&#xff0c;它是实时的&#xff0c;所以不能做异步操作。 细想一下&#xff0c;其实methods方法也能实现1中描述的现象&#xff0c;但是计算属性最大的优势是缓存&#xff01;&a…...

HTML+CSS个人电影网页设计——电影从你的全世界路过(4页)带音乐特效

HTML实例网页代码, 本实例适合于初学HTML的同学。该实例里面有设置了css的样式设置&#xff0c;有div的样式格局&#xff0c;这个实例比较全面&#xff0c;有助于同学的学习,本文将介绍如何通过从头开始设计个人网站并将其转换为代码的过程来实践设计。 文章目录一、网页介绍一…...

业务开发时,接口不能对外暴露的解决方案

1.内外网接口微服务隔离 将对外暴露的接口和对内暴露的接口分别放到两个微服务上,一个服务里所有的接口均对外暴露,另一个服务的接口只能内网服务间调用。 该方案需要额外编写一个只对内部暴露接口的微服务,将所有只能对内暴露的业务接口聚合到这个微服务里,通过这个聚合…...

「点燃我,温暖你」用Python制作一个动态爱心效果

最近「点燃我&#xff0c;温暖你」这部剧非常火&#xff0c;讲述的是程序员的爱情故事。 其中陈飞宇饰演的男主李峋&#xff0c;在剧中用程序做出的爱心跳动效果&#xff0c;非常炫。 网上各个大佬也是纷纷给出看法&#xff0c;综合就是不太可能用C语言来实现的。 大概率是AE…...

初识猿如意开发工具

嗨&#xff0c;大家好&#xff0c;我是异星球的小怪同志 一个想法有点乱七八糟的小怪 如果觉得对你有帮助&#xff0c;请支持一波。 希望未来可以一起学习交流。 一、初遇猿如意 第一次听说猿如意开发工具&#xff0c;于是抱着试试的心态&#xff0c;开始下载尝试。 首先是…...

PyTorch 2.0发布了,一行代码提速76%

PyTorch 官方&#xff1a;我们这次的新特性太好用了&#xff0c;所以就直接叫 2.0 了。 前段时间&#xff0c;PyTorch 团队在官方博客宣布 Pytorch 1.13 发布&#xff0c;包含 BetterTransformer 稳定版等多项更新。在体验新特性的同时&#xff0c;不少人也在期待下一个版本的推…...

栈的基本操作

一&#xff0c;自定义函数 #include<bits/stdc.h> using namespace std; const int N 1000;//N是常量 int s[N 1];//栈 int top;//栈顶的位置(栈内有多少个元素) //入栈 void push(int x){ //非满栈 if(top < N){ //将栈顶上移并存入 top…...

windows内核编程-文件操作

文章目录前言背景知识点介绍字符串内存分配与回收文件操作自旋锁win内核编程-日志实现文件操作的封装日志功能的实现简单的测试日志功能其他前言 本文完整代码见&#xff1a;demo/12-win-driver-log 我们必须先搞定&#xff0c;DebugView可以看到DbgPrintDbgPrint的输出。否则…...

Hadoop原理与技术——Linus命令行基本操作

点击链接查看文档 一、实验目的 Hadoop运行在Linux系统上&#xff0c;因此&#xff0c;需要学习实践一些常用的Linux命令。本实验旨在熟悉常用的Linux操作&#xff0c;为顺利开展后续其他实验奠定基础。 二、实验环境 Windows 10 VMware Workstation Pro虚拟机 Hadoop环境 J…...

目标检测算法——YOLOv5/YOLOv7改进之结合特征提取网络RFBNet(涨点明显)

>>>深度学习Tricks,第一时间送达<<< 🚀🚀🚀NEW!!!魔改YOLOv5/v7目标检测算法来啦 ~ 计算机视觉——致力于目标检测领域科研Tricks改进与推荐 | 主要包括Backbone、Neck、Head、普通注意力机制、自注意力机制Transformer、Swin Transformer v2,各…...

anaconda使用系列教程--4)环境迁移

概述 跨平台尽量避免&#xff0c;比如windows和linux就不要跨平台&#xff0c;就在linux之间跨还是可以的 直接copy整体环境文件&#xff0c;适合于无法联网或网速不佳的新环境 anaconda最好是同版本的 迁移方法 使用requirement文件 A机器&#xff1a; pip freeze > …...

Kotlin高仿微信-第57篇-VIP管理列表

Kotlin高仿微信-项目实践58篇详细讲解了各个功能点&#xff0c;包括&#xff1a;注册、登录、主页、单聊(文本、表情、语音、图片、小视频、视频通话、语音通话、红包、转账)、群聊、个人信息、朋友圈、支付服务、扫一扫、搜索好友、添加好友、开通VIP等众多功能。 Kotlin高仿…...

贪心算法-- 纪念品分组

问题描述元旦快到了&#xff0c;校学生会让乐乐负责新年晚会的纪念品发放工作。为使得参加晚会的同学所获得的纪念品价值 相对均衡&#xff0c;他要把购来的纪念品根据价格进行分组&#xff0c;但每组最多只能包括两件纪念品&#xff0c;并且每组纪念品的价格之和不能超过一个给…...

java-php-net-python-代驾网站计算机毕业设计程序

java-php-net-python-代驾网站计算机毕业设计程序 java-php-net-python-代驾网站计算机毕业设计程序本源码技术栈&#xff1a; 项目架构&#xff1a;B/S架构 开发语言&#xff1a;Java语言 开发软件&#xff1a;idea eclipse 前端技术&#xff1a;Layui、HTML、CSS、JS、JQ…...

简洁自增ID实现方案

简介 从数据库性能角度考虑&#xff0c;我们经常需要数字型的自增主键&#xff0c;有时候我们并不想用像MySQL自带的自增&#xff0c;因为从1开始很数据位数不一样&#xff0c;对有点强迫症的人来说&#xff0c;不是很友好。 另外&#xff0c;别人也容易根据这种从1开始的自增…...

JMeter入门教程(14)——场景设计

1.JMeter中场景设计是通过线程组来实现的 如图&#xff1a; 控制面板中各元素介绍&#xff1a; 名称&#xff1a;可以随意设置&#xff0c;最好有业务意义。 注释&#xff1a;可以随意设置&#xff0c;可以为空。 在取样器错误后要执行的动作&#xff1a;其中的某一个请求出错后…...

SVM 用于将数据分类为两分类或多分类(Matlab代码实现)

&#x1f468;‍&#x1f393;个人主页&#xff1a;研学社的博客 &#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜…...

转行软件测试我后悔了

很多时候&#xff0c;都在想当初做的转行软件测试行业的决定是对的吗&#xff1f;现在后悔还来得及吗&#xff1f; 记得在求职的时候&#xff0c;面试官经常问我&#xff1a;“为什么要选择软件测试工作?” 而我也会经常说一堆自己有的没的优势去应付。 工作这么久了&#x…...

k8s教程(15)-pod之亲和性与互斥性调度

文章目录01 引言02 pod亲和性调度与互斥性调度2.1 拓扑域2.2 举例2.2.1 参照目标pod2.2.2 pod的亲和性调度2.2.3 pod的互斥性调度03 其它04 文末01 引言 声明&#xff1a;本文为《Kubernetes权威指南&#xff1a;从Docker到Kubernetes实践全接触&#xff08;第5版&#xff09;》…...

浅谈降维实操,一种用于处理特征的方式——后附Python代码

&#x1f466;&#x1f466;一个帅气的boy&#xff0c;你可以叫我Love And Program &#x1f5b1; ⌨个人主页&#xff1a;Love And Program的个人主页 &#x1f496;&#x1f496;如果对你有帮助的话希望三连&#x1f4a8;&#x1f4a8;支持一下博主 降维实操前言线性降维低…...

深度学习中的正则化——L1、L2 和 Dropout

正则化是一组技术&#xff0c;可以防止神经网络中的过度拟合&#xff0c;从而在面对来自问题域的全新数据时提高深度学习模型的准确性。 在本文中&#xff0c;我们将介绍最流行的正则化技术&#xff0c;称为 L1、L2 和 dropout。 文章目录1. 回顾&#xff1a;过拟合2.什么是正则…...

数据结构(王卓)(4)附:链表的销毁与清空

销毁 Status 销毁单链表(LinkList L) {LinkList p;while (L){p L;L->next;delete p;}return OK; } 运行逻辑&#xff1a; &#xff08;1&#xff09;:设定一个指针&#xff0c;让指针指向链表的头指针L &#xff08;2&#xff09;&#xff1a;让头指针等于头指针里面指向下…...

C++图书管理系统(管理员-读者)

C图书管理系统&#xff08;管理员-读者&#xff09; 一、设计一款文字式交互的图书管理系统&#xff0c;要求具备注册登录、浏览图书、借还图书等基本功能&#xff1b; 二、要求以外部文件的形式存储书籍信息、馆藏记录、借阅记录、用户信息等。【可参考提供的书籍清单】 三…...

永磁同步电机恒压频比(V/F)开环控制系统Matlab/Simulink仿真分析及代码生成到工程实现

文章目录前言一、 恒压频比&#xff08;V/F&#xff09;控制原理二、永磁同步电机恒压频比开环控制系统Matlab/Simulink仿真分析2.1.仿真电路分析2.1.1.恒压频比控制算法2.1.2.输出处理2.1.3.主电路2.2.仿真结果分析2.2.1.设定目标转速为1200r/min2.2.1.设定目标转速为变化值三…...

基于JSP网上书城的设计与实现

项目描述 临近学期结束&#xff0c;还是毕业设计&#xff0c;你还在做java程序网络编程&#xff0c;期末作业&#xff0c;老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下&#xff0c;你想解决的问…...

java计算机毕业设计-学生宿舍故障报修管理信息系统-源程序+mysql+系统+lw文档+远程调试

java计算机毕业设计-学生宿舍故障报修管理信息系统-源程序mysql系统lw文档远程调试 java计算机毕业设计-学生宿舍故障报修管理信息系统-源程序mysql系统lw文档远程调试本源码技术栈&#xff1a; 项目架构&#xff1a;B/S架构 开发语言&#xff1a;Java语言 开发软件&#xf…...

vue学习笔记——简单入门总结(四)

文章目录1.Vue3的特性和变化1.1.创建vue3项目1.2.分析main.js变化&#xff1a;1.3.setup--组合式api的开端1.4.ref函数和reactive函数&#xff1a;1.5.watch监视属性1.5.watchEffect函数1.6.vue3生命周期&#xff1a;1.Vue3的特性和变化 1.1.创建vue3项目 1.这里我们使用脚手架…...

数据结构与算法—数组栈和链表栈

数据结构与算法—数组栈和链表栈 &#x1f308;一览众山小数据结构与算法—数组栈和链表栈栈介绍栈图解栈实现数组实现栈实现思路实现代码单链表实现栈实现思路(图解)实现代码栈总结栈力扣栈介绍 栈,存储货物或供旅客住宿的地方,可引申为仓库、中转站&#xff0c;所以引入到计算…...

【应用】Kubernetes

Kubernetesk8s 安装流程安装前配置安装 docker 以及 k8s 组件初始化 k8s 集群测试使用&#xff1a;安装 kubernetes-dashboardk8s 基础概念k8s 核心技术概念k8s 内部组件k8s 中的 IP 地址K8S 服务暴露的三种方式k8s 安装流程 k8s-masterk8s-node01k8s-node02192.168.86.140192…...

GEE:关系、条件和布尔运算

ee.Image对象具有一组用于构建决策表达式的关系、条件和布尔运算方法。这些方法可以用来掩膜、绘制分类地图和重新赋值。 本文记录了在GEE&#xff08;Google Earth Engine&#xff09;平台上的关系运算符和布尔运算符&#xff0c;分别应用到了三个不用的场景&#xff08;筛选低…...

Java项目:SSM的KTV管理系统

作者主页&#xff1a;源码空间站2022 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 主要功能包括&#xff1a; 登陆页,房间信息,房间管理,开取房间,房间查询,会员管理,食物管理,查看订单,查询订单,查看房间消费使用情况等功能。…...

包装类-Wrapper

包装类的分类 针对八种基本数据类型相应的引用类型-包装类有了类的特点&#xff0c;就可以调用对应的类中的方法 装箱和拆箱 Java是一种面向对象的编程语言&#xff0c;学习Java时就被明确灌输了一个概念&#xff1a;OOP&#xff0c;即面向对象编程。一切皆对象。但是基本…...

计算机网络——运输层【重点】

运输层概述 概念 进程之间的通信 从通信和信息处理的角度看&#xff0c;运输层向它上面的应用层提供通信服务&#xff0c;它属于面向通信部分的最高层&#xff0c;同时也是用户功能中的最低层。当网络的边缘部分中的两个主机使用网络的核心部分的功能进行端到端的通信时&…...

ADSP-21569/ADSP-21593的开发入门(上)

作者的话 ADI的SHARC系列DSP&#xff0c;目前已经出到5系列了&#xff0c;最新的一颗叫2159x&#xff0c;按照ADI的说法&#xff0c;这颗DSP的性能是21569的两倍&#xff0c;但又能和21569做P2P的替换&#xff0c;所以下面我们就以21593为例&#xff0c;写一点资料&#xff0c…...

【Android App】在线直播之搭建WebRTC的服务端(图文解释 简单易懂)

有问题或需要源码请点赞关注收藏后评论区留言私信~~~ 一、WebRTC的系统架构 WebRTC&#xff08;网页即时通信&#xff09;是一个支持浏览器之间实时音视频对话的新型技术&#xff0c;WebRTC体系由应用于实时通信的编程接口和一组通信协议组成&#xff0c;已成为互联网流媒体通…...

x265 帧间预测

帧间编码入口函数&#xff1a; 从 Analysis::compressCTU 是ctu编码的入口函数&#xff0c;根据 slice 类型判断是 I 还是 BP&#xff0c;如果是BP则执行帧间编码函数 Analysis::compressInterCU_rdx_x&#xff1a;&#xff1a;/*压缩分析CTU过程&#xff1a;1.为当前CTU加载QP…...

【sciter】安全应用列表控件总结

一、效果图 二、功能点 实现电脑文件拖拽进入到安全桌面,读取文件路径,生成应用。可以配置允许拖拽进入安全桌面的文件应用。点击添加图标,可以添加应用到安全桌面中。在安全桌面列表中每一个应用实现双击、失去焦点,获取焦点、右键事件在安全桌面列表中每一个应用可以实现…...

一篇文章让你搞懂Java顺序表

目录 一、 线性表的基本介绍 二、顺序表 1、顺序表的概念 2. 创建顺序表类&#xff08;ArrayList&#xff09; 2. 增加元素 3. 删除元素 4. 修改某个元素 5. 查找元素 Main类 在数据结构体系中我们将整个数据结构分为两类&#xff0c;一类是线性结构&#xff1b; 线性…...

小白必知必会的几个IP协议知识

小白必知必会的几个IP协议知识1.IP地址属于网络层协议2.路由控制3.数据链路的抽象化4.IP属于面向无连接型1.IP地址属于网络层协议 在计算机通信中&#xff0c;为了识别通信对端&#xff0c;必须要有一个类似于地址的识别码进行标识。 MAC地址是用来标识同一个链路中不同计算机…...

【45-线程的实现方式-线程池的创建方式-线程池的执行顺序-CompletableFutrue异步处理】

一.知识回顾 【0.三高商城系统的专题专栏都帮你整理好了&#xff0c;请点击这里&#xff01;】 【1-系统架构演进过程】 【2-微服务系统架构需求】 【3-高性能、高并发、高可用的三高商城系统项目介绍】 【4-Linux云服务器上安装Docker】 【5-Docker安装部署MySQL和Redis服务】…...

前馈神经网络与支持向量机实战 --- 手写数字识别

前馈神经网络与支持向量机实战 — 手写数字识别 文章目录前馈神经网络与支持向量机实战 --- 手写数字识别一、前馈神经网络介绍二、支持向量机介绍三、数据集说明四、环境准备五、实验要求六、Python代码tutorial_minst_fnn-keras.py&#xff1a;使用TensorFlow的Sequential实现…...

idea导入eclipse项目的时候,Java图标变成黄色小J了,怎么解决?

凯哥今天导入一个15年时候写的小项目&#xff0c;当时使用的是eclipse写的。最近好几年都在使用idea&#xff0c;习惯了idea的&#xff0c;在用eclipse&#xff0c;不习惯&#xff0c;不顺手&#xff0c;就导入到idea中。发现&#xff0c;Java文件的图标变成了黄色的J。如下图&…...

Redis配置与优化

1 关系数据库与非关系型数据库概述 1.1 关系型数据库 一个结构化的数据库&#xff0c;创建在关系模型&#xff08;二维表格模型&#xff09;基础上 一般面向于记录 SQL 语句&#xff08;标准数据查询语言&#xff09;就是一种基于关系型数据库的语言 用于执行对关系型数据库中…...

管理团队相关的梳理

管理团队是跟踪团队成员工作表现,提供反馈,解决问题并管理团队变更,以优化项目绩效的过程。本过程的主要作用是,影响团队行为、管理冲突以及解决问题等方式,实现团队管理。 输入 1.项目管理计划 --------资源管理计划 2. 项目文件 --------问题日志、经验教训登记册、项…...

HTML5期末大作业【红色的电影售票平台网站】web前端 html+css+javascript网页设计实例 企业网站制作

HTML实例网页代码, 本实例适合于初学HTML的同学。该实例里面有设置了css的样式设置&#xff0c;有div的样式格局&#xff0c;这个实例比较全面&#xff0c;有助于同学的学习,本文将介绍如何通过从头开始设计个人网站并将其转换为代码的过程来实践设计。 文章目录一、网页介绍一…...

《QT实用小工具·四十六》多边形窗口

1、概述 源码放在文章末尾 该项目实现了可以移动的多边形窗口&#xff0c;项目demo演示如下所示&#xff1a; 项目部分代码如下所示&#xff1a; #include "polygonwindow.h"#include <QBitmap> #include <QQuickItem> #include <QQmlFile> #in…...

【综述】DSP处理器芯片

文章目录 TI DSP C2000系列 TMS320F28003X 典型应用 开发工具链 参考资料 TI DSP TI C2000系列 控制领域 TI C5000系列 通信领域 TI C6000系列 图像领域 C2000系列 第三代集成了C28浮点DSP内核&#xff0c;采用了65nm工艺&#xff08;上一代180nm&#xff09; 第四代正在…...

【八大排序(一)】插入排序与希尔排序

❣博主主页: 33的博客❣ ▶️文章专栏分类:八大排序◀️ &#x1f69a;我的代码仓库: 33的代码仓库&#x1f69a; &#x1faf5;&#x1faf5;&#x1faf5;关注我带你了解更多排序知识 目录 1.前言2.常见排序算法3.稳定性4.插入排序4.1概念4.2直接插入排序4.3希尔排序 5.总结 …...

Java基础知识总结(75)

* 3、线程优先级 每个线程执行时都具有一定的优先级&#xff0c;优先级高的线程获得较多的执行机会&#xff0c;而优先级低的线程则获得较少的执行机会。每个线程默认的优先级都与创建它的父线程的优先级相同&#xff0c;在默认情况下&#xff0c;main线程具有普通优先级&#…...

金秋八月,再聚申城,2024上海生物发酵系列展等您来!

2024上海国际生物发酵系列展将于2024年8月7-9日在上海新国际博览中心华丽启幕。 本届展会同期举办合成生物学展、生物化工产业展、生物医药与技术装备展、生物技术展、生化仪器、实验室装备及试剂、耗材展、酵素展等系列品牌展会&#xff0c;共享生物发酵行业盛宴。 乘势而上 …...

Java 基础常见面试题整理

目录 1、java的基本数据类型有哪些&#xff1f;2、java为什么要有包装类型&#xff1f;3、String a "123" 和 String a new String("123") 区别&#xff1f;4、String、StringBuilder和StringBuffer的区别&#xff1f;5、如何理解面向对象和面向过程&…...