如何使用SQL系列 之 如何在SQL中使用WHERE条件语句
引言
在结构化查询语言 (SQL)语句中,WHERE子句限制了给定操作会影响哪些行。它们通过定义特定的条件(称为搜索条件)来实现这一点,每一行都必须满足这些条件才能受到操作的影响。
本指南将介绍WHERE子句中使用的通用语法。它还将概述如何在单个WHERE子句中组合多个搜索条件谓词以更细粒度的方式过滤数据,以及如何使用NOT操作符排除而不是包含满足给定搜索条件的行。
虽然本指南在示例中只使用SELECT语句,但这里解释的概念可以用于许多SQL操作。事实上,WHERE子句是UPDATE和DELETE操作的关键组成部分。
前期准备
为了学习本指南,你需要一台运行某种使用SQL的关系数据库管理系统(RDBMS)的计算机。
注意:请注意,许多RDBMS使用它们自己独特的SQL实现。虽然本教程中概述的命令适用于大多数RDBMS,但如果你在MySQL以外的系统上测试它们,确切的语法或输出可能会有所不同。
你还需要一个装载了一些示例数据的数据库和表,可以在其中练习使用相关命令。
连接到MySQL并设置一个示例数据库
如果SQL数据库系统运行在远程服务器上,请从本地设备SSH到服务器:
ssh sammy@your_server_ip
然后打开MySQL服务器提示符,将==sammy==替换为你的MySQL用户账户的名称:
mysql -u sammy -p
创建一个名为where_db的数据库:
CREATE DATABASE where_db;
如果数据库成功创建,您将收到这样的输出:
OutputQuery OK, 1 row affected (0.01 sec)
要选择where_db数据库,运行以下USE语句:
USE where_db;
OutputDatabase changed
选择where_db后,在其中创建一个表。
为了理解本指南中使用的示例,假设您在当地的高尔夫球场经营高尔夫联赛。你决定跟踪联盟球员参加郊游时的个人表现信息。为此,您决定将信息存储在SQL数据库中。
你决定这个表需要6列:
name:每个高尔夫球手的名字,使用varchar数据类型表示,不超过20个字符rounds_played:每个高尔夫球手打完的总回合数,用int数据类型表示best:每位高尔夫球手在单次比赛中的最佳或最低得分,也用int表示。worst:每位高尔夫球手在单次比赛中的最差或最高得分,同样用int表示average:每个高尔夫球手在他们打过的几轮中得分的近似平均值。这一列将保存decimal类型的值,限制为最多4位,其中一位在小数点的右侧wins:每个高尔夫球手在比赛小组中得分最低的轮数,用int类型表示
运行下面的CREATE TABLE语句来创建一个名为golfers的表,它包含以下6列:
CREATE TABLE golfers (
name varchar(20),
rounds_played int,
best int,
worst int,
average decimal (4,1),
wins int
);
然后加载包含一些示例数据的golfers表。运行下面的INSERT INTO操作来添加代表7名联赛高尔夫球手的7行数据:
INSERT INTO golfers
VALUES
('George', 22, 68, 103, 84.6, 3),
('Pat', 25, 65, 74, 68.7, 9),
('Grady', 11, 78, 118, 97.6, 0),
('Diane', 23, 70, 92, 78.8, 1),
('Calvin', NULL, 63, 76, 68.5, 7),
('Rose', NULL, 69, 84, 76.7, 4),
('Raymond', 18, 67, 92, 81.3, 1);
请注意,其中两行rounds_played的值是NULL。出于本教程的目的,假设这些高尔夫球手没有报告他们打了多少轮,因此这些值被记录为NULL。
你可能还注意到,每个高尔夫球手的best值小于他们的worst值。这是因为,在常见的高尔夫规则中,高尔夫球手的得分是由他们将球打入球场每个洞所需的击球次数决定的,总击球次数最少的人就是获胜者。因此,与大多数其他运动不同,高尔夫球手的最佳分数会比最差分数低。
有了这些,你就可以开始学习如何在SQL中使用WHERE子句了。
使用WHERE子句过滤数据
在SQL中,语句是任何发送到数据库系统的操作,它将执行某种任务,如创建表,插入或删除数据,或更改列或表的结构。SQL语句是由各种子句,由特定的关键字和他们需要的信息。
正如引言中提到的,WHERE子句允许你过滤掉受SQL操作影响的某些行数据。在查询中,WHERE之后跟上查询条件,如以下示例:
SELECT columns_to_query
FROM table_to_query
WHERE search_condition;
WHERE关键字后面是一个搜索条件。一个搜索条件是由一个或多个谓词或表达式组成的集合,这些谓词或表达式可以计算一个或多个值表达式并返回“true”、“false”或“unknown”的结果。注意,在搜索条件只包含一个谓词的情况下,术语“搜索条件”和“谓词”是同义词。
WHERE子句搜索条件中的谓词可以有多种形式,但它们通常遵循以下语法:
. . .
WHERE column_name OPERATOR value_expression
. . .
在SQL中,值表达式——有时也称为标量表达式——是任何返回单个值的表达式。值表达式可以是字面量,比如字符串或数值,也可以是数学表达式。不过,大多数情况下,在WHERE子句的搜索条件中,至少有一个值表达式是列名。
当运行包含WHERE子句的SQL查询时,数据库管理系统将对FROM子句定义的逻辑表中的每一行应用搜索条件。然后,它将只返回所有谓词在搜索条件中求值为“true”的行。
为了说明这个想法,运行下面的查询。这将返回golfers表的name列中的所有值:
SELECT name
FROM golfers
WHERE (2 + 2) = 4;
这个查询包含一个WHERE子句,但它没有指定列名,而是使用(2 + 2)作为第一个值表达式,并测试它是否等于第二个值表达式4。因为(2 + 2) 总是等于4,所以对于每一行,这个搜索条件都计算为true。因此,结果集中的每一行都会被返回:
Output+---------+
| name |
+---------+
| George |
| Pat |
| Grady |
| Diane |
| Calvin |
| Rose |
| Raymond |
+---------+
7 rows in set (0.01 sec)
这个WHERE子句不是很有用,因为它总是求值为“true”并总是返回表中的每一行。如前所述,在WHERE子句搜索条件中,通常至少使用一个列名作为值表达式。当运行查询时,数据库系统将依次对每一行应用搜索条件。通过在搜索条件中提供列名作为值表达式,你告诉DBMS使用该列中每行的值作为迭代搜索条件时的值表达式。
以下查询的WHERE子句对每一行应用了比前一个示例更排他的搜索条件。它将返回任何wins列值等于1的行中的name和wins值:
SELECT name, wins
FROM golfers
WHERE wins = 1;
只有两名高尔夫球手刚好赢了一轮,因此这个查询只返回这两行:
Output+---------+------+
| name | wins |
+---------+------+
| Diane | 1 |
| Raymond | 1 |
+---------+------+
2 rows in set (0.01 sec)
前面的例子使用等号(=)测试是否两个值表达式是等价的,但您使用的运营商取决于您想要使用什么类型的谓词过滤结果集。
SQL标准定义了18种类型的谓词,尽管并不是所有的SQL实现都包含这些谓词。下面是5种最常用的谓词类型,以及对每种类型及其使用的操作符的简要说明。
比较
比较谓词使用比较运算符比较一个值(在查询,通常值在一个指定的列)。这6个比较运算符是:
=:测试两个值是否相等
SELECT name
FROM golfers
WHERE name = 'George';
Output+--------+
| name |
+--------+
| George |
+--------+
1 row in set (0.00 sec)
<>:测试两个值是否不相等
SELECT name, wins
FROM golfers
WHERE wins <> 1;
Output+--------+------+
| name | wins |
+--------+------+
| George | 3 |
| Pat | 9 |
| Grady | 0 |
| Calvin | 7 |
| Rose | 4 |
+--------+------+
5 rows in set (0.00 sec)
<:测试第一个值是否小于第二个值
SELECT name, wins
FROM golfers
WHERE wins < 1;
Output+-------+------+
| name | wins |
+-------+------+
| Grady | 0 |
+-------+------+
1 row in set (0.00 sec)
>:测试第一个值是否大于第二个值
SELECT name, wins
FROM golfers
WHERE wins > 1;
Output+--------+------+
| name | wins |
+--------+------+
| George | 3 |
| Pat | 9 |
| Calvin | 7 |
| Rose | 4 |
+--------+------+
4 rows in set (0.00 sec)
<=:测试第一个值是否小于或等于第二个
SELECT name, wins
FROM golfers
WHERE wins <= 1;
Output+---------+------+
| name | wins |
+---------+------+
| Grady | 0 |
| Diane | 1 |
| Raymond | 1 |
+---------+------+
3 rows in set (0.00 sec)
>=:测试第一个值是否大于或等于第二个值
SELECT name, wins
FROM golfers
WHERE wins >= 1;
Output+---------+------+
| name | wins |
+---------+------+
| George | 3 |
| Pat | 9 |
| Diane | 1 |
| Calvin | 7 |
| Rose | 4 |
| Raymond | 1 |
+---------+------+
6 rows in set (0.00 sec)
Null(IS NULL)
使用IS NULL操作符的谓词测试给定列中的值是否为NULL。如果是,则谓词的计算结果为“true”,结果集中就包含了这一行:
SELECT name, rounds_played
FROM golfers
WHERE rounds_played IS NULL;
Output+--------+---------------+
| name | rounds_played |
+--------+---------------+
| Calvin | NULL |
| Rose | NULL |
+--------+---------------+
2 rows in set (0.00 sec)
区间(BETWEEN)
范围谓词使用BETWEEN操作符来测试指定的列值是否落在两个值表达式之间:
SELECT name, best
FROM golfers
WHERE best BETWEEN 67 AND 73;
Output+---------+------+
| name | best |
+---------+------+
| George | 68 |
| Diane | 70 |
| Rose | 69 |
| Raymond | 67 |
+---------+------+
4 rows in set (0.00 sec)
包含(IN)
成员谓词使用IN操作符来测试一个值是否是给定集合的成员:
SELECT name, best
FROM golfers
WHERE best IN (65, 67, 69, 71);
Output+---------+------+
| name | best |
+---------+------+
| Pat | 65 |
| Rose | 69 |
| Raymond | 67 |
+---------+------+
3 rows in set (0.00 sec)
通配符(%和_)
模式匹配谓词使用LIKE操作符来测试一个值是否匹配包含一个或多个通配符的字符串模式,也称为通配符。SQL定义了两个通配符,%和_:
_: 下划线表示单个未知字符
SELECT name, rounds_played
FROM golfers
WHERE rounds_played LIKE '2_';
Output+--------+---------------+
| name | rounds_played |
+--------+---------------+
| George | 22 |
| Pat | 25 |
| Diane | 23 |
+--------+---------------+
3 rows in set (0.00 sec)
%: 百分比符号表示零个或多个未知字符
SELECT name, rounds_played
FROM golfers
WHERE name LIKE 'G%';
Output+--------+---------------+
| name | rounds_played |
+--------+---------------+
| George | 22 |
| Grady | 11 |
+--------+---------------+
2 rows in set (0.00 sec)
用AND和OR组合多个查询条件
有时候,你需要比使用单个搜索条件谓词的WHERE子句提供的更细粒度的过滤结果。另一方面,也可能有满足多个搜索条件之一的行在结果集中是可接受的。在这种情况下,你可以编写包含多个谓词的WHERE子句,分别使用AND或OR操作符。
要开始使用这些操作符,请运行以下查询,它从golfers表的name、best、worst和average列中返回值。它的WHERE子句包含两个查询条件,由AND分隔:
SELECT name, best, worst, average
FROM golfers
WHERE best < 70 AND worst < 96;
第一个谓词测试每一行的best值是否小于70,而第二个测试每一行的worst价值是否小于96。如果任何一个测试的结果为“false”,则该行不会返回到结果集中:
Output+---------+------+-------+---------+
| name | best | worst | average |
+---------+------+-------+---------+
| Pat | 65 | 74 | 68.7 |
| Calvin | 63 | 76 | 68.5 |
| Rose | 69 | 84 | 76.7 |
| Raymond | 67 | 92 | 81.3 |
+---------+------+-------+---------+
4 rows in set (0.00 sec)
接下来,运行以下查询。这与前面的例子相同,只是它用OR操作符而不是AND来分隔两个谓词:
SELECT name, best, worst, average
FROM golfers
WHERE best < 70 OR worst < 96;
因为只有一个谓词的求值为“true”才能返回一行,所以这个结果集比前面的例子多了两行:
Output+---------+------+-------+---------+
| name | best | worst | average |
+---------+------+-------+---------+
| George | 68 | 103 | 84.6 |
| Pat | 65 | 74 | 68.7 |
| Diane | 70 | 92 | 78.8 |
| Calvin | 63 | 76 | 68.5 |
| Rose | 69 | 84 | 76.7 |
| Raymond | 67 | 92 | 81.3 |
+---------+------+-------+---------+
6 rows in set (0.00 sec)
你可以在一个WHERE子句中包含任意数量的谓词,只要你用正确的语法将它们组合起来。然而,随着搜索条件变得越来越复杂,预测它们将过滤哪些数据变得越来越困难。
需要注意的是,数据库系统通常优先考虑AND操作符。这意味着任何由AND操作符分隔的谓词(或在两个以上谓词的情况下的操作符)都被视为一个单独的、隔离的搜索条件,在WHERE子句中的任何其他谓词之前进行测试。
为了说明问题,运行下面的查询,它从name、average、worst和rounds_played列中返回满足WHERE子句中定义的搜索条件的任何行:
SELECT name, average, worst, rounds_played
FROM golfers
WHERE average < 85 OR worst < 95 AND rounds_played BETWEEN 19 AND 23;
这个查询首先测试由AND操作符分隔的谓词是否worst < 95和rounds_played BETWEEN 19 AND 23——在当前迭代中,这两个值都为“true”。如果是,那么该行将出现在结果集中。但是如果任何一个求值为“false”,查询将检查当前行的average值是否小于85。如果是,则返回该行:
Output+---------+---------+-------+---------------+
| name | average | worst | rounds_played |
+---------+---------+-------+---------------+
| George | 84.6 | 103 | 22 |
| Pat | 68.7 | 74 | 25 |
| Diane | 78.8 | 92 | 23 |
| Calvin | 68.5 | 76 | NULL |
| Rose | 76.7 | 84 | NULL |
| Raymond | 81.3 | 92 | 18 |
+---------+---------+-------+---------------+
6 rows in set (0.00 sec)
您可以通过将两个或多个查询条件包装在括号中来确定它们的优先级。下面的示例与前一个相同,但它封装了average < 85和worst < 95查询条件,用OR操作符分隔,放在括号中:
SELECT name, average, worst, rounds_played
FROM golfers
WHERE (average < 85 OR worst < 95) AND rounds_played BETWEEN 19 AND 23;
因为前两个谓词被圆括号包围,后续的AND操作符将它们视为一个离散的搜索条件,必须求值为“true”。如果这两个谓词- average < 85和worst < 95——求值为“false”,那么整个搜索条件求值为“false”,查询会立即从结果集中删除这一行,然后再继续求值下一行。
然而,如果前两个谓词中的任何一个求值为“true”,查询就会测试给定高尔夫球手的rounds_played值是否在19到23之间。如果是,则在结果集中返回这一行:
Output+--------+---------+-------+---------------+
| name | average | worst | rounds_played |
+--------+---------+-------+---------------+
| George | 84.6 | 103 | 22 |
| Diane | 78.8 | 92 | 23 |
+--------+---------+-------+---------------+
2 rows in set (0.00 sec)
结果表明,通过优先级的谓词集和包装在括号,否则相同的查询可以返回结果集明显不同。
尽管并不总是需要这样做,但建议在单个搜索条件中组合两个以上谓词时始终使用括号。这样做有助于使查询更可读、更容易理解。
用NOT排除结果
到目前为止,本指南的所有示例都集中在如何使用WHERE子句编写查询,在结果集中只包含满足指定搜索条件的行。然而,你可以通过在WHERE子句中包含NOT操作符来编写排除特定行的查询。
范围、会员和模式匹配谓词的条款,包括NOT操作符通常遵循这一语法:
. . .
WHERE column_name NOT OPERATOR value_expression
. . .
为了说明这一点,运行下面的查询。这将返回golfers表的name列的值,但其WHERE子句中的NOT操作符将导致DBMS排除所有匹配通配符模式的行:
SELECT name
FROM golfers
WHERE name NOT LIKE 'R%';
Output+--------+
| name |
+--------+
| George |
| Pat |
| Grady |
| Diane |
| Calvin |
+--------+
5 rows in set (0.00 sec)
当将NOT操作符添加到IS NULL谓词时,情况略有不同。在这种情况下,你可以将NOT放在IS和NULL之间,如下面的例子所示。这个查询返回所有rounds_played值不为Null的高尔夫球手的name和rounds_played值:
SELECT name, rounds_played
FROM golfers
WHERE rounds_played IS NOT NULL;
Output+---------+---------------+
| name | rounds_played |
+---------+---------------+
| George | 22 |
| Pat | 25 |
| Grady | 11 |
| Diane | 23 |
| Raymond | 18 |
+---------+---------------+
5 rows in set (0.00 sec)
你也可以将NOT操作符紧跟在WHERE关键字之后。如果你根据是否满足多个搜索条件来排除行,这很有用,如下面的示例查询返回golfers的name、average、best和wins值:
SELECT name, average, best, wins
FROM golfers
WHERE NOT (average < 80 AND best < 70) OR wins = 9;
Output+---------+---------+------+------+
| name | average | best | wins |
+---------+---------+------+------+
| George | 84.6 | 68 | 3 |
| Pat | 68.7 | 65 | 9 |
| Grady | 97.6 | 78 | 0 |
| Diane | 78.8 | 70 | 1 |
| Raymond | 81.3 | 67 | 1 |
+---------+---------+------+------+
5 rows in set (0.00 sec)
请注意结果集的第二行。帕特的“平均”分数不到80分,她的“最佳”分数也不到70分。然而,她的行仍然包含在结果集中,因为NOT操作符只是对括号内的搜索条件求反。
回想一下,当您将由AND或OR分隔的多个谓词包装在括号中时,SQL将优先考虑这些谓词,并将它们视为单个隔离的搜索条件。因此,NOT操作符只排除基于前两个谓词的行: average < 80和best < 70。但是它包含基于第三个谓词的行,wins = 9。
你可以重写这个查询,根据第三个条件和前两个条件将它们都包含在括号中,如下所示:
SELECT name, average, best, wins
FROM golfers
WHERE NOT ((average < 80 AND best < 70) OR wins = 9);
Output+---------+---------+------+------+
| name | average | best | wins |
+---------+---------+------+------+
| George | 84.6 | 68 | 3 |
| Grady | 97.6 | 78 | 0 |
| Diane | 78.8 | 70 | 1 |
| Raymond | 81.3 | 67 | 1 |
+---------+---------+------+------+
4 rows in set (0.00 sec)
根据SQL实现的不同,如果你在比较操作符之前包含NOT,数据库系统可能会认为查询语法无效。举个例子,试着运行这个查询:
SELECT name
FROM golfers
WHERE name NOT = 'Grady';
对于MySQL及其衍生版本,这将导致错误:
OutputERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '= 'Grady'' at line 1
这个错误的原因是NOT操作符通常不与比较操作符(=,<>, <, <, <=, >和>=)一起使用,因为你可以通过将一个比较操作符替换为另一个比较操作符来实现相反的效果,该比较操作符将返回第一个比较操作符将排除的行。例如,你可以将等价运算符(=)替换为不等价运算符(<>)。
总结
通过阅读本指南,你学习了如何编写WHERE子句,使查询只返回满足指定条件的行。你还学习了如何在单个查询中组合多个谓词和搜索条件,以及如何使用NOT关键字从结果集中排除信息。
虽然这里显示的命令在大多数关系型数据库上都可以工作,但请注意,每个SQL数据库都使用自己独特的语言实现。关于每个命令及其所有选项的更完整描述,读者可以查阅相应DBMS的官方文档。
相关文章:
如何使用SQL系列 之 如何在SQL中使用WHERE条件语句
引言 在结构化查询语言 (SQL)语句中,WHERE子句限制了给定操作会影响哪些行。它们通过定义特定的条件(称为搜索条件)来实现这一点,每一行都必须满足这些条件才能受到操作的影响。 本指南将介绍WHERE子句中使用的通用语法。它还将概述如何在单个WHERE子句…...
leetcode:1941. 检查是否所有字符出现次数相同(python3解法)
难度:简单 给你一个字符串 s ,如果 s 是一个 好 字符串,请你返回 true ,否则请返回 false 。 如果 s 中出现过的 所有 字符的出现次数 相同 ,那么我们称字符串 s 是 好 字符串。 示例 1: 输入:s…...
Echarts 各种点击事件监听
目录 一、鼠标事件1.1、左击1.2、双击1.3、右击1.4、右键双击1.5、中轴滚动二、时间轴2.1、时间轴监听三、拖动3.1、拖动事件一、鼠标事件 1.1、左击 chart.on(click, function(params)...
《智能网联汽车自动驾驶功能测试规程》
一、 编制背景 2018 年4 月12 日,工业和信息化部、公安部、交通运输部联合发布《智能网联汽车道路测试管理规范(试行)》(以下简称《管理规范》),对智能网联汽车道路测试申请、审核、管理以及测试主体、测试驾驶人和测试车辆要求等…...
NVIDIA CUDA Win10安装步骤
前言 windows10 版本安装 CUDA ,首先需要下载两个安装包 CUDA toolkit(toolkit就是指工具包)cuDNN 1. 安装前准备 在安装CUDA之前,需要完成以下准备工作: 确认你的显卡已经正确安装,在设备管理器中可以看…...
Elasticsearch、Kibana以及Java操作ES 的快速使用
docker 安装elastic search 、 kibana(可视化管理elastic search) docker pull elasticsearch:7.12.1 docker pull kibana:7.12.1创建docker自定义网络 docker自定义网络可以使得容器之间使用容器名网络互连,默认的网络不会有这功能。 一定…...
逐鹿人形机器人,百度、腾讯、小米卷起来
长期不温不火的人形机器人产业迎来新风口,技术显著提升、新品层出不穷、资本投资态度也逐渐好转。 8月18日,2023世界机器人大会博览会正式开放,全面展示了机器人行业的新技术、新产品和新应用。据悉,此次展会展览总面积达4.5万平…...
AndroidStudio推荐下载和配置
1、推荐下载链接 Download Android Studio & App Tools - Android Developers 2、gradle配置案例 // Top-level build file where you can add configuration options common to all sub-projects/modules.buildscript {repositories {maven { url https://maven.aliyun.…...
mysql异常占用资源排查
通过执行日志与连接信息排查 查看是否开启日志记录 mysql> show global variables like %general%; --------------------------------- | Variable_name | Value | --------------------------------- | general_log | OFF | | general_log_file…...
requests 库:发送 form-data 格式的 http 请求 (python)
安装 requests-toolbelt !pip install requests-toolbeltdemo from requests_toolbelt import MultipartEncoder import requestsm MultipartEncoder(fields{query: """第一,向量化匹配是有能力上限的。搜索引擎实现语义搜索已经是好几年的事情了…...
行测图形推理规律(一)元素组成
题库:粉笔网题库 (fenbi.com) 不知道和测评的行测题库是不是一样的,但是总结的规律应该是一样的。 规律并不唯一,题库的答案也只是参考答案,切勿当杠精,你觉得你的规律更合适就别管。本人所归纳的规律仅代表本人想法…...
【python爬虫】13.吃什么不会胖(爬虫实操练习)
文章目录 前言项目实操明确目标分析过程代码实现 前言 吃什么不会胖——这是我前段时间在健身时比较关注的话题。 相信很多人,哪怕不健身,也会和我一样注重饮食的健康,在乎自己每天摄入的食物热量。 不过,生活中应该很少有人会…...
深入理解联邦学习——联邦学习与现有理论的区别与联系
分类目录:《深入理解联邦学习》总目录 作为一种全新的技术,联邦学习在借鉴一些成熟技术的同时也具备了一定的独创性。下面我们就从多个角度来阐释联邦学习和其他相关概念之间的关系。 联邦学习与差分隐私理论的区别 联邦学习的特点使其可以被用来保护用…...
基于Python+DenseNet121算法模型实现一个图像分类识别系统案例
目录 介绍在TensorFlow中的应用实战案例最后 一、介绍 DenseNet(Densely Connected Convolutional Networks)是一种卷积神经网络(CNN)架构,2017年由Gao Huang等人提出。该网络的核心思想是密集连接,即每…...
旋转图片两种方法
这两种方法在旋转图像时,可能会产生一些不同的效果: rotate_image_new()旋转后的图像完全包含旋转前的内容,并且填充边界尽可能小 rotate_image() 保持原始图像的大小,并根据填充选项决定是否填充边界为白色。如果 if_fill_whit…...
10 mysql tiny/small/medium/big int 的数据存储
前言 这里主要是 由于之前的一个 datetime 存储的时间 导致的问题的衍生出来的探究 探究的主要内容为 int 类类型的存储, 浮点类类型的存储, char 类类型的存储, blob 类类型的存储, enum/json/set/bit 类类型的存储 本文主要 的相关内容是 int 类类型的相关数据的存储 …...
UI自动化测试之Jenkins配置
团队下半年的目标之一是实现自动化测试,这里要吐槽一下,之前开发的测试平台了,最初的目的是用来做接口自动化测试和性能测试,但由于各种原因,接口自动化测试那部分功能整个废弃掉了,其中和易用性有很大关系…...
电视盒子什么品牌好?数码博主盘点目前性能最好的电视盒子
电视盒子是非常重要的,老人小孩基本每天都会看电视,而电视盒子作为电视盒子的最佳拍档销量十分火爆,我自己每个月都会测评几次电视盒子,今天给大家详细解读一下电视盒子什么品牌好,看看目前性能最好的电视盒子是哪些&a…...
对于枚举类型的输出
对于枚举类型的输出 对于枚举类型的输出,您可以使用以下方法:1. 将枚举值转换为整数进行输出:cppODU_TYPE type ODU_TYPE_331;int value static_cast<int>(type);std::cout << "ODU_TYPE: " << value <<…...
solidity开发环境配置,vscode搭配remix
#学习笔记 初学solidity,使用remix非常方便,因为需要的环境都配置好了,打开网站就可以使用。 不过在编写代码方面,使用vscode更方便,而vscode本身并不能像remix那样部署合约,它还需要安装插件。 点击红色箭…...
阿里云ACP云计算备考笔记 (5)——弹性伸缩
目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...
iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈
在日常iOS开发过程中,性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期,开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发,但背后往往隐藏着系统资源调度不当…...
使用LangGraph和LangSmith构建多智能体人工智能系统
现在,通过组合几个较小的子智能体来创建一个强大的人工智能智能体正成为一种趋势。但这也带来了一些挑战,比如减少幻觉、管理对话流程、在测试期间留意智能体的工作方式、允许人工介入以及评估其性能。你需要进行大量的反复试验。 在这篇博客〔原作者&a…...
AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别
【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而,传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案,能够实现大范围覆盖并远程采集数据。尽管具备这些优势…...
【Nginx】使用 Nginx+Lua 实现基于 IP 的访问频率限制
使用 NginxLua 实现基于 IP 的访问频率限制 在高并发场景下,限制某个 IP 的访问频率是非常重要的,可以有效防止恶意攻击或错误配置导致的服务宕机。以下是一个详细的实现方案,使用 Nginx 和 Lua 脚本结合 Redis 来实现基于 IP 的访问频率限制…...
计算机基础知识解析:从应用到架构的全面拆解
目录 前言 1、 计算机的应用领域:无处不在的数字助手 2、 计算机的进化史:从算盘到量子计算 3、计算机的分类:不止 “台式机和笔记本” 4、计算机的组件:硬件与软件的协同 4.1 硬件:五大核心部件 4.2 软件&#…...
苹果AI眼镜:从“工具”到“社交姿态”的范式革命——重新定义AI交互入口的未来机会
在2025年的AI硬件浪潮中,苹果AI眼镜(Apple Glasses)正在引发一场关于“人机交互形态”的深度思考。它并非简单地替代AirPods或Apple Watch,而是开辟了一个全新的、日常可接受的AI入口。其核心价值不在于功能的堆叠,而在于如何通过形态设计打破社交壁垒,成为用户“全天佩戴…...
什么是VR全景技术
VR全景技术,全称为虚拟现实全景技术,是通过计算机图像模拟生成三维空间中的虚拟世界,使用户能够在该虚拟世界中进行全方位、无死角的观察和交互的技术。VR全景技术模拟人在真实空间中的视觉体验,结合图文、3D、音视频等多媒体元素…...
实战三:开发网页端界面完成黑白视频转为彩色视频
一、需求描述 设计一个简单的视频上色应用,用户可以通过网页界面上传黑白视频,系统会自动将其转换为彩色视频。整个过程对用户来说非常简单直观,不需要了解技术细节。 效果图 二、实现思路 总体思路: 用户通过Gradio界面上…...
DiscuzX3.5发帖json api
参考文章:PHP实现独立Discuz站外发帖(直连操作数据库)_discuz 发帖api-CSDN博客 简单改造了一下,适配我自己的需求 有一个站点存在多个采集站,我想通过主站拿标题,采集站拿内容 使用到的sql如下 CREATE TABLE pre_forum_post_…...
