MySQL 入門大全:查詢語言分類

🧑 博主簡介:CSDN博客專家歷代文學網(PC端可以訪問:https://literature.sinhy.com/#/literature?__c=1000,移動端可微信小程序搜索“歷代文學”)總架構師,15年工作經驗,精通Java編程高并發設計Springboot和微服務,熟悉LinuxESXI虛擬化以及云原生Docker和K8s,熱衷于探索科技的邊界,并將理論知識轉化為實際應用。保持對新技術的好奇心,樂于分享所學,希望通過我的實踐經歷和見解,啟發他人的創新思維。在這里,我希望能與志同道合的朋友交流探討,共同進步,一起在技術的世界里不斷學習成長。
技術合作請加本人wx(注明來自csdn):foreast_sea

在這里插入圖片描述


在這里插入圖片描述

MySQL 入門大全:查詢語言分類

SQL 基礎使用

MySQL 是一種關系型數據庫,說到關系,那么就離不開表與表之間的關系,而最能體現這種關系的其實就是我們接下來需要介紹的主角 SQL,SQL 的全稱是 Structure Query Language ,結構化的查詢語言,它是一種針對表關聯關系所設計的一門語言,也就是說,學好 MySQL,SQL 是基礎和重中之重。SQL 不只是 MySQL 中特有的一門語言,大多數關系型數據庫都支持這門語言。

下面我們就來一起學習一下這門非常重要的語言。

查詢語言分類

在了解 SQL 之前我們需要知道下面這幾個概念:

  • 數據定義語言: 簡稱DDL (Data Definition Language),用來定義數據庫對象:數據庫、表、列等。
  • 數據操作語言: 簡稱DML (Data Manipulation Language),用來對數據庫中表的記錄進行更新。關鍵字: insert、update、delete等。
  • 數據控制語言: 簡稱DCL(Data Control Language),用來定義數據庫訪問權限和安全級別,創建用戶等。關鍵字: grant等。
  • 數據查詢語言: 簡稱DQL(Data Query Language),用來查詢數據庫中表的記錄,關鍵字: select from where等。

DDL 語句

創建數據庫

下面就開始我們的 SQL 語句學習之旅,首先你需要啟動 MySQL 服務,我這里是 mac 電腦,所以我直接可以啟動

然后我們使用命令行的方式連接數據庫,打開 iterm,輸入下面

MacBook:~ mr.l$ mysql -uroot -p

就可以連接到數據庫了

在上面命令中,mysql 代表客戶端命令,- u 表示后面需要連接的用戶,-p 表示需要輸入此用戶的密碼。在你輸入用戶名和密碼后,如果成功登陸,會顯示一個歡迎界面(如上圖 )和 mysql> 提示符。

歡迎界面主要描述了這些東西

  • 每一行的結束符,這里用 ; 或者 \g 來表示每一行的結束
  • Your MySQL connection id is 4,這個記錄了 MySQL 服務到目前為止的連接數,每個新鏈接都會自動增加 1 ,上面顯示的連接次數是 4 ,說明我們只連接了四次
  • 然后下面是 MySQL 的版本,我們使用的是 5.7
  • 通過 help 或者 \h 命令來顯示幫助內容,通過 \c 命令來清除命令行 buffer。

然后需要做的事情是什么?我們最終想要學習 SQL 語句,SQL 語句肯定是要查詢數據,通過數據來體現出來表的關聯關系,所以我們需要數據,那么數據存在哪里呢?數據存儲的位置被稱為 表(table),表存儲的位置被稱為 數據庫(database),所以我們需要先建數據庫后面再建表然后插入數據,再進行查詢。

所以我們首先要做的就是創建數據庫,創建數據庫可以直接使用指令

CREATE DATABASE dbname;

進行創建,比如我們創建數據庫 cxuandb

create database cxuandb;

注意最后的 ; 結束語法一定不要丟掉,否則 MySQL 會認為你的命令沒有輸出完,敲 enter 后會直接換行輸出

創建完成后,會提示 Query OK, 1 row affected,這段語句什么意思呢? Query OK 表示的就是查詢完成,為什么會顯示這個?因為所有的 DDL 和 DML 操作執行完成后都會提示這個, 也可以理解為操作成功。后面跟著的 **1 row affected ** 表示的是影響的行數,() 內顯示的是你執行這條命令所耗費的時間,也就是 0.03 秒。

上圖我們成功創建了一個 cxuandb 的數據庫,此時我們還想創建一個數據庫,我們再執行相同的指令,結果提示

提示我們不能再創建數據庫了,數據庫已經存在。這時候我就有疑問了,我怎么知道都有哪些數據庫呢?別我再想創建一個數據庫又告訴我已經存在,這時候可以使用 show databases 命令來查看你的 MySQL 已有的數據庫

show databases;

執行完成后的結果如下

因為數據庫我之前已經使用過,這里就需要解釋一下,除了剛剛新創建成功的 cxuandb 外,informationn_schemaperformannce_schemasys 都是系統自帶的數據庫,是安裝 MySQL 默認創建的數據庫。它們各自表示

  • informationn_schema: 主要存儲一些數據庫對象信息,比如用戶表信息、權限信息、分區信息等
  • performannce_schema: MySQL 5.5 之后新增加的數據庫,主要用于收集數據庫服務器性能參數。
  • sys: MySQL 5.7 提供的數據庫,sys 數據庫里面包含了一系列的存儲過程、自定義函數以及視圖來幫助我們快速的了解系統的元數據信息。

其他所有的數據庫都是作者自己創建的,可以忽略他們。

在創建完數據庫之后,可以用如下命令選擇要操作的數據庫

use cxuandb

這樣就成功切換為了 cxuandb 數據庫,我們可以在此數據庫下進行建表、查看基本信息等操作。

比如想要看康康我們新建的數據庫里面有沒有其他表

show tables;

果然,我們新建的數據庫下面沒有任何表,但是現在,我們還不進行建表操作,我們還是先來認識一下數據庫層面的命令,也就是其他 DDL 指令

刪除數據庫

如果一個數據庫我們不想要了,那么該怎么辦呢?直接刪掉數據庫不就好了嗎?刪表語句是

drop database dbname;

比如 cxuandb 我們不想要他了,可以通過使用

drop database cxuandb;

進行刪除,這里我們就不進行演示了,因為 cxuandb 我們后面還會使用。

但是這里注意一點,你刪除數據庫成功后會出現 0 rows affected,這個可以不用理會,因為在 MySQL 中,drop 語句操作的結果都是 0 rows affected

創建表

下面我們就可以對表進行操作了,我們剛剛 show tables 發現還沒有任何表,所以我們現在進行建表語句

CREATE TABLE 表名稱
(
列名稱1 數據類型 約束,
列名稱2 數據類型 約束,
列名稱3 數據類型 約束,
....
)

這樣就很清楚了吧,列名稱就是列的名字,緊跟著列名后面就是數據類型,然后是約束,為什么要這么設計?舉個例子你就清楚了,比如 cxuan 剛被生出來就被打印上了標簽

比如我們創建一個表,里面有 5 個字段,姓名(name)、性別(sex)、年齡(age)、何時雇傭(hiredate)、薪資待遇(wage),建表語句如下

create table job(name varchar(20), sex varchar(2), age int(2), hiredate date, wage decimal(10,2));

事實證明這條建表語句還是沒問題的,建表完成后可以使用 DESC tablename 查看表的基本信息

DESC 命令會查看表的定義,但是輸出的信息還不夠全面,所以,如果想要查看更全的信息,還要通過查看表的創建語句的 SQL 來得到

show create table job \G;

可以看到,除了看到表定義之外,還看到了表的 engine(存儲引擎) 為 InnoDB 存儲引擎,\G 使得記錄能夠豎著排列,如果不用 \G 的話,效果如下

刪除表

表的刪除語句有兩種,一種是 drop 語句,SQL 語句如下

drop table job

一種是 truncate 語句,SQL 語句如下

truncate table job

這兩者的區別簡單理解就是 drop 語句刪除表之后,可以通過日志進行回復,而 truncate 刪除表之后永遠恢復不了,所以,一般不使用 truncate 進行表的刪除。‘

修改表

對于已經創建好的表,尤其是有大量數據的表,如果需要對表做結構上的改變,可以將表刪除然后重新創建表,但是這種效率會產生一些額外的工作,數據會重新加載近來,如果此時有服務正在訪問的話,也會影響服務讀取表中數據,所以此時,我們需要表的修改語句來對已經創建好的表的定義進行修改。

修改表結構一般使用 alter table 語句,下面是常用的命令

ALTER TABLE tb MODIFY [COLUMN] column_definition [FIRST | AFTER col_name];

比如我們想要將 job 表中的 name 由 varchar(20) 改為 varchar(25),可以使用如下語句

alter table job modify name varchar(25);

也可以對表結構進行修改,比如增加一個字段

alter table job add home varchar(30);

將新添加的表的字段進行刪除

alter table job drop column home;

可以對表中字段的名稱進行修改,比如吧 wage 改為 salary

alter table job change wage salary decimal(10,2);

修改字段的排列順序,我們前面介紹過修改語法涉及到一個順序問題,都有一個可選項 **first | after ** column_name,這個選項可以用來修改表中字段的位置,默認 ADD 是在添加為表中最后一個字段,而 CHANGE/MODIFY 不會改變字段位置。比如

alter table job add birthday after hiredate;

可以對表名進行修改,例如將 job 表改為 worker

alter table job rename worker;

DML 語句

有的地方把 DML 語句(增刪改)和 DQL 語句(查詢)統稱為 DML 語句,有的地方分開,我們目前使用分開稱呼的方式

插入

表創建好之后,我們就可以向表里插入數據了,插入記錄的基本語法如下

INSERT INTO tablename (field1,field2) VALUES(value1,value2);

例如,向中插入以下記錄

insert into job(name,sex,age,hiredate,birthday,salary) values("cxuan","男",24,"2020-04-27","1995-08-22",8000);

也可以不用指定要插入的字段,直接插入數據即可

insert into job values("cxuan02","男",25,"2020-06-01","1995-04-23",12000);

這里就有一個問題,如果插入的順序不一致的話會怎么樣呢?

對于含可空字段、非空但是含有默認值的字段、自增字段可以不用在 insert 后的字段列表出現,values 后面只需要寫對應字段名稱的 value 即可,沒有寫的字段可以自動的設置為 NULL、默認值或者自增的下一個值,這樣可以縮短要插入 SQL 語句的長度和復雜性。

比如我們設置一下 hiredate、age 可以為 null,來試一下

insert into job(name,sex,birthday,salary) values("cxuan03","男","1992-08-23",15000);

我們看一下實際插入的數據

我們可以看到有一行兩個字段顯示 NULL。在 MySQL 中,insert 語句還有一個很好的特性,就是一次可以插入多條記錄

INSERT INTO tablename (field1,field2) VALUES
(value1,value2),
(value1,value2),
(value1,value2),
...;

可以看出,每條記錄之間都用逗號進行分割,這個特性可以使得 MySQL 在插入大量記錄時,節省很多的網絡開銷,大大提高插入效率。

更新記錄

對于表中已經存在的數據,可以通過 update 命令對其進行修改,語法如下

UPDATE tablename SET field1 = value1, field2 = value2 ;

例如,將 job 表中的 cxuan03 中 age 的 NULL 改為 26,SQL 語句如下

update job set age = 26 where name = 'cxuan03';

SQL 語句中出現了一個 where 條件,我們會在后面說到 where 條件,這里簡單理解一下它的概念就是根據哪條記錄進行更新,如果不寫 where 的話,會對整個表進行更新

刪除記錄

如果記錄不再需要,可以使用 delete 命令進行刪除

DELETE FROM tablename [WHERE CONDITION]

例如,在 job 中刪除名字是 cxuan03 的記錄

delete from job where name = 'cxuan03';

在 MySQL 中,刪除語句也可以不指定 where 條件,直接使用

delete from job

這種刪除方式相當于是清楚表的操作,表中所有的記錄都會被清除。

DQL 語句

下面我們一起來認識一下 DQL 語句,數據被插入到 MySQL 中,就可以使用 SELECT 命令進行查詢,來得到我們想要的結果。

SELECT 查詢語句可以說是最復雜的語句了,這里我們只介紹一下基本語法

一種最簡單的方式就是從某個表中查詢出所有的字段和數據,簡單粗暴,直接使用 SELECT *

SELECT * FROM tablename;

例如我們將 job 表中的所有數據查出來

select * from job;

其中 * 是查詢出所有的數據,當然,你也可以查詢出指定的數據項

select name,sex,age,hiredate,birthday,salary from job;

上面這條 SQL 語句和 select * from job 表是等價的,但是這種直接查詢指定字段的 SQL 語句效率要高。

上面我們介紹了基本的 SQL 查詢語句,但是實際的使用場景會會比簡單查詢復雜太多,一般都會使用各種 SQL 的函數和查詢條件等,下面我們就來一起認識一下。

去重

使用非常廣泛的場景之一就是 去重,去重可以使用 distinct 關鍵字來實現

為了演示效果,我們先向數據庫中插入批量數據,插入完成后的表結構如下

下面我們使用 distinct 來對 age 去重來看一下效果

你會發現只有兩個不同的值,其他和 25 重復的值被過濾掉了,所以我們使用 distinct 來進行去重

條件查詢

我們之前的所有例子都是查詢全部的記錄,如果我們只想查詢指定的記錄呢?這里就會用到 where條件查詢語句,條件查詢可以對指定的字段進行查詢,比如我們想查詢所有年齡為 24 的記錄,如下

select * from job where age = 24;

where 條件語句后面會跟一個判斷的運算符 =,除了 = 號比較外,還可以使用 >、<、>=、<=、!= 等比較運算符;例如

select * from job where age >= 24;

就會從 job 表中查詢出 age 年齡大于或等于 24 的記錄

除此之外,在 where 條件查詢中還可以有多個并列的查詢條件,比如我們可以查詢年齡大于等于 24,并且薪資大雨 8000 的記錄

select * from job where age >= 24 and salary > 8000;

在這里插入圖片描述

多個條件之間還可以使用 or、and 等邏輯運算符進行多條件聯合查詢,運算符會在以后章節中詳細講解。

排序

我們會經常有這樣的需求,按照某個字段進行排序,這就用到了數據庫的排序功能,使用關鍵字 order by 來實現,語法如下

SELECT * FROM tablename [WHERE CONDITION] [ORDER BY field1 [DESC|ASC] , field2 [DESC|ASC],……fieldn [DESC|ASC]]

其中 DESC 和 ASC 就是順序排序的關鍵字,DESC 會按照字段進行降序排列,ASC 會按照字段進行升序排列,默認會使用升序排列,也就是說,你不寫 order by 具體的排序的話,默認會使用升序排列。order by 后面可以跟多個排序字段,并且每個排序字段可以有不同的排序順序。

為了演示功能,我們先把表中的 salary 工資列進行修改,修改完成后的表記錄如下

在這里插入圖片描述

下面我們按照工資進行排序,SQL 語句如下

select * from job order by salary desc;

語句執行完成后的結果如下

這是對一個字段進行排序的結果,也可以對多個字段進行排序,但是需要注意一點

根據 order by 后面聲名的順序進行排序,如果有三個排序字段 A、B、C 的話,如果 A 字段排序字段的值一樣,則會根據第二個字段進行排序,以此類推。

如果只有一個排序字段,那么這些字段相同的記錄將會無序排列。

限制

對于排序后的字段,或者不排序的字段,如果只希望顯示一部分的話,就會使用 LIMIT 關鍵字來實現,比如我們只想取前三條記錄

select * from job limit 3;

或者我們對排序后的字段取前三條記錄

select * from job order by salary limit 3;

上面這種 limit 是從表記錄的第 0 條開始取,如果從指定記錄開始取,比如從第二條開始取,取三條記錄,SQL 如下

select * from job order by salary desc limit 2,3;

limit 一般經常和 order by 語法一起實現分頁查詢。

注意:limit 是 MySQL 擴展 SQL92 之后的語法,在其他數據庫比如 Oracle 上就不通用,我犯過一個白癡的行為就是在 Oracle 中使用 limit 查詢語句。。。

聚合

下面我們來看一下對記錄進行匯總的操作,這類操作主要有

  • 匯總函數,比如 sum 求和、count 統計數量、max 最大值、min 最小值等
  • group by,關鍵字表示對分類聚合的字段進行分組,比如按照部門統計員工的數量,那么 group by 后面就應該跟上部門
  • with 是可選的語法,它表示對匯總之后的記錄進行再次匯總
  • having 關鍵字表示對分類后的結果再進行條件的過濾。

看起來 where 和 having 意思差不多,不過它們用法不一樣,where 是使用在統計之前,對統計前的記錄進行過濾,having 是用在統計之后,是對聚合之后的結果進行過濾。也就是說 where 永遠用在 having 之前,我們應該先對篩選的記錄進行過濾,然后再對分組的記錄進行過濾。

可以對 job 表中員工薪水進行統計,選出總共的薪水、最大薪水、最小薪水

select sum(salary) from job;

select max(salary),min(salary) from job;

比如我們要統計 job 表中人員的數量

select count(1) from job;

統計完成后的結果如下

我們可以按照 job 表中的年齡來進行對應的統計

select age,count(1) from job group by age;

既要統計各年齡段的人數,又要統計總人數

select age,count(1) from job group by age with rollup;

在此基礎上進行分組,統計數量大于 1 的記錄

select age,count(1) from job group by age with rollup having count(1) > 1;

表連接

表連接一直是筆者比較痛苦的地方,曾經因為一個表連接掛了面試,現在來認真擼一遍。

表連接一般體現在表之間的關系上。當需要同時顯示多個表中的字段時,就可以用表連接來實現。

為了演示表連接的功能,我們為 job 表加一個 type 字段表示工作類型,增加一個 job_type 表表示具體的工作種類,如下所示

下面開始我們的演示

查詢出 job 表中的 type 和 job_type 表中的 type 匹配的姓名和工作類型

select job.name,job_type.name from job,job_type where job.type = job_type.type;

上面這種連接使用的是內連接,除此之外,還有外連接。那么它們之間的區別是啥呢?

內連接:選出兩張表中互相匹配的記錄;

外連接:不僅選出匹配的記錄,也會選出不匹配的記錄;

外連接分為兩種

  • 左外連接:篩選出包含左表的記錄并且右表沒有和它匹配的記錄
  • 右外連接:篩選出包含右表的記錄甚至左表沒有和它匹配的記錄

為了演示效果我們在 job 表和 job_type 表中分別添加記錄,添加完成后的兩表如下

在這里插入圖片描述

下面我們進行左外連接查詢:查詢出 job 表中的 type 和 job_type 表中的 type 匹配的姓名和工作類型

select job.name,job_type.name from job left join job_type on job.type = job_type.type;

查詢出來的結果如下

在這里插入圖片描述

可以看出 cxuan06 也被查詢出來了,而 cxuan06 他沒有具體的工作類型。

使用右外連接查詢

select job.name,job_type.name from job right join job_type on job.type = job_type.type;

在這里插入圖片描述

可以看出,job 表中并沒有 waiter 和 manager 的角色,但是也被查詢出來了。

子查詢

有一些情況,我們需要的查詢條件是另一個 SQL 語句的查詢結果,這種查詢方式就是子查詢,子查詢有一些關鍵字比如 in、not in、=、!=、exists、not exists 等,例如我們可以通過子查詢查詢出每個人的工作類型

select job.* from job where type in (select type from job_type);

如果自查詢數量唯一的話,還可以用 = 來替換 in

select * from job where type = (select type from job_type);

意思是自查詢不唯一,我們使用 limit 限制一下返回的記錄數

select * from job where type = (select type from job_type limit 1,1);

在某些情況下,子查詢可以轉換為表連接

聯合查詢

我們還經常會遇到這樣的場景,將兩個表的數據單獨查詢出來之后,將結果合并到一起進行顯示,這個時候就需要 UNION 和 UNION ALL 這兩個關鍵字來實現這樣的功能,UNION 和 UNION ALL 的主要區別是 UNION ALL 是把結果集直接合并在一起,而 UNION 是將 UNION ALL 后的結果進行一次 DISTINCT 去除掉重復數據。

比如

select type from job union all select type from job_type;

它的結果如下

上述結果是查詢 job 表中的 type 字段和 job_type 表中的 type 字段,并把它們進行匯總,可以看出 UNION ALL 只是把所有的結果都列出來了

使用 UNION 的 SQL 語句如下

select type from job union select type from job_type;

在這里插入圖片描述

可以看出 UNION 是對 UNION ALL 使用了 distinct 去重處理。

DCL 語句

DCL 語句主要是管理數據庫權限的時候使用,這類操作一般是 DBA 使用的,開發人員不會使用 DCL 語句。

關于幫助文檔的使用

我們一般使用 MySQL 遇到不會的或者有疑問的東西經常要去查閱網上資料,甚至可能需要去查 MySQL 官發文檔,這樣會耗費大量的時間和精力。

下面教你一下在 MySQL 命令行就能直接查詢資料的語句

按照層次查詢

可以使用 ? contents 來查詢所有可供查詢的分類,如下所示

? contents;

在這里插入圖片描述

我們輸入

? Account Management

可以查詢具體關于權限管理的命令

在這里插入圖片描述

比如我們想了解一下數據類型

? Data Types

在這里插入圖片描述

然后我們想了解一下 VARCHAR 的基本定義,可以直接使用

? VARCHAR

在這里插入圖片描述

可以看到有關于 VARCHAR 數據類型的詳細信息,然后在最下面還有 MySQL 的官方文檔,方便我們快速查閱。

快速查閱

在實際應用過程中,如果要快速查詢某個語法時,可以使用關鍵字進行快速查詢,比如我們使用

? show

在這里插入圖片描述

能夠快速列出一些命令

比如我們想要查閱 database 的信息,使用

SHOW CREATE DATABASE cxuandb;

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/898396.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/898396.shtml
英文地址,請注明出處:http://en.pswp.cn/news/898396.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

1.Windows+vscode+cline+MCP配置

文章目錄 1.簡介與資源2.在windows中安裝vscode及Cline插件1. 安裝vscode2. 安裝Cline插件3. 配置大語言模型3. 配置MCP步驟(windows) 1.簡介與資源 MCP官方開源倉庫 MCP合集網站 參考視頻 2.在windows中安裝vscode及Cline插件 1. 安裝vscode 2. 安裝Cline插件 Cline插件…

性能測試過程實時監控分析

性能監控 前言一、查看性能測試結果的3大方式1、GUI界面報告插件2、命令行運行 html報告3、后端監聽器接入儀表盤 二、influxDB grafana jmeter測試監控大屏1、原理&#xff1a;2、linux環境中influxDB 安裝和配置3、jmerer后端監聽器連接influxDB4、linux環境總grafana環境搭…

【Linux我做主】淺談Shell及其原理

淺談Linux中的Shell及其原理 Linux中Shell的運行原理github地址前言一、Linux內核與Shell的關系1.1 操作系統核心1.2 用戶與內核的隔離 二、Shell的演進與核心機制2.1 發展歷程2.2 核心功能解析2.3 shell的工作流程1. 用戶輸入命令2. 解析器拆分指令3. 擴展器處理動態內容變量替…

可視化圖解算法:鏈表中倒數(最后)k個結點

1. 題目 描述 輸入一個長度為 n 的鏈表&#xff0c;設鏈表中的元素的值為ai &#xff0c;返回該鏈表中倒數第k個節點。 如果該鏈表長度小于k&#xff0c;請返回一個長度為 0 的鏈表。 數據范圍&#xff1a;0≤n≤105&#xff0c;0 ≤ai≤109&#xff0c;0 ≤k≤109 要求&am…

在線教育網站項目第四步:deepseek騙我, WSL2不能創建兩個獨立的Ubuntu,但我們能實現實例互訪及外部訪問

一、說明 上一章折騰了半天&#xff0c;搞出不少問題&#xff0c;今天我們在deepseek的幫助下&#xff0c;完成多個獨立ubuntu24.04實例的安裝&#xff0c;并完成固定ip&#xff0c;實踐證明&#xff0c;deepseek不靠譜&#xff0c;浪費我2個小時時間&#xff0c;我們將在下面實…

CMake 保姆級教程

CMake 是一個跨平臺的構建工具&#xff0c;用于生成適合不同平臺和編譯器的構建系統文件&#xff08;如 Makefile 或 Visual Studio 項目文件&#xff09;。 在 Windows 下使用 CMake 構建項目時&#xff0c;CMake 會根據 CMakeLists.txt 文件生成適合 Windows 的構建系統文件&…

zabbix數據庫溯源

0x00 背景 zabbix數據庫如果密碼泄露被登錄并新增管理員如何快速發現&#xff1f;并進行溯源&#xff1f; 本文介紹數據庫本身未開啟access log的情況。 0x01 實踐 Mysql 數據庫查insert SELECT * FROM sys.host_summary_by_statement_type where statement like %insert% 查…

Spring Boot集成PageHelper:輕松實現數據庫分頁功能

Spring Boot集成PageHelper&#xff1a;輕松實現數據庫分頁功能 1. 為什么需要分頁&#xff1f; 分頁是處理大數據量查詢的核心技術&#xff0c;其重要性體現在&#xff1a; 性能優化&#xff1a;避免單次查詢返回過多數據導致內存溢出或響應延遲。用戶體驗&#xff1a;前端展…

Spring Cloud之負載均衡之LoadBalance

目錄 負載均衡 問題 步驟 現象 什么是負載均衡&#xff1f; 負載均衡的一些實現 服務端負載均衡 客戶端負載均衡 使用Spring Cloud LoadBalance實現負載均衡 負載均衡策略 ?編輯 ?編輯LoadBalancer原理 服務部署 準備環境和數據 服務構建打包 啟動服務 上傳J…

數據無憂:自動備份策略全解析

引言 在信息化飛速發展的今天&#xff0c;數據已成為個人、企業乃至國家最為寶貴的資產之一。無論是日常辦公文檔、科研數據、客戶資料&#xff0c;還是個人隱私信息&#xff0c;一旦丟失或損壞&#xff0c;都可能帶來不可估量的損失。因此&#xff0c;備份文件作為數據安全的…

Latex2024安裝教程(附安裝包)Latex2024詳細圖文安裝教程

文章目錄 前言一、Latex2024下載二、Texlive 2024安裝教程1.準備安裝文件2.啟動安裝程序3.配置安裝選項4.開始安裝5.安裝完成6.TeX Live 2024 安裝后確認 三、Texstudio 安裝教程1.準備 Texstudio 安裝2.啟動 Texstudio 安裝向導3.選擇安裝位置4.等待安裝完成5.啟動 Texstudio6…

C++ 語法之函數和函數指針

在上一章中 C 語法之 指針的一些應用說明-CSDN博客 我們了解了指針變量&#xff0c;int *p;取變量a的地址這些。 那么函數同樣也有個地址&#xff0c;直接輸出函數名就可以得到地址&#xff0c;如下&#xff1a; #include<iostream> using namespace std; void fun() …

centos【rockylinux】安裝【supervisor】的注意事項【完整版】

重新加載 systemd 配置推薦使用pip的方式安裝 pip install supervisor 第二步&#xff1a;添加supervisord.conf配置文件 [unix_http_server] file/tmp/supervisor.sock ; UNIX socket 文件&#xff0c;supervisorctl 會使用 ;chmod0700 ; socket 文件的…

Spring Cloud Gateway 使用ribbon以及nacos實現灰度發布

1、Spring Cloud Gateway配置文件 gateway:userId-limit: 1000 agent-bff:ribbon:NFLoadBalancerRuleClassName: com.anlitech.gateway.gray.GrayRule operator-bff:ribbon:NFLoadBalancerRuleClassName: com.anlitech.gateway.gray.GrayRule spring:cloud:gateway:locator:en…

關于“碰一碰發視頻”系統的技術開發文檔框架

以下是關于“碰一碰發視頻”系統的技術開發文檔框架&#xff0c;涵蓋核心功能、技術選型、開發流程和關鍵模塊設計&#xff0c;幫助您快速搭建一站式解決方案 --- 隨著短視頻平臺的興起&#xff0c;用戶的創作與分享需求日益增長。而如何讓視頻分享更加便捷、有趣&#xff0c…

基于django+vue的購物商城系統

開發語言&#xff1a;Python框架&#xff1a;djangoPython版本&#xff1a;python3.8數據庫&#xff1a;mysql 5.7數據庫工具&#xff1a;Navicat11開發軟件&#xff1a;PyCharm 系統展示 系統首頁 熱賣商品 優惠資訊 個人中心 后臺登錄 管理員功能界面 用戶管理 商品分類管理…

Ardunio 連接OLED觸摸屏(SSD1106驅動 4針 IIC通信)

一、準備工作 1、硬件 UNO R3 &#xff1a;1套 OLED觸摸屏&#xff1a;1套 導線諾干 2、軟件 arduino 二、接線 UNO R3OLED5VVCCGNDGNDA5SCLA4SDA 腳位如下圖所示&#xff1a; Uno R3腳位圖 觸摸屏腳位圖 查閱顯示屏的驅動規格&#xff1a;通常顯示屏驅動芯片有SSD1306,SH110…

機器人技能列表

一、機器人制作基礎入門 &#xff08;一&#xff09;機器人概述 1.機器人的定義與分類 2.機器人的發展歷程與現狀 3.機器人在各領域的應用案例 &#xff08;二&#xff09;必備工具與材料 4.常用電子工具介紹&#xff08;萬用表、電烙鐵等&#xff09; 5.機械加工工具&…

07. 面向對象高級(2)_設計模式

什么是設計模式 一個問題通常有種解法&#xff0c;其中肯定有一種解法是最優的&#xff0c;這個最優的解法被人總結出來了&#xff0c;稱之為設計模式。 設計模式有20多種&#xff0c;對應20多種軟件開發中會遇到的問題。 關于設計模式&#xff0c;主要學什么&#xff1f; 解…

【面試場景題-Redis中String類型和map類型的區別】

今天在面試中碰到一個場景題&#xff1a;在 Redis 中存儲 100 萬用戶數據時&#xff0c;使用 String 類型和 Hash&#xff08;Map&#xff09;類型的主要區別是什么&#xff1f;體現在以下幾個方面&#xff1a; 1. 存儲結構與內存占用 String 類型 存儲方式&#xff1a;每個用…