MySQL命令(二)| 表的增刪查改、聚合函數(復合函數)、聯合查詢

文章目錄

  • 新增 (Create)
    • 全列插入
    • 指定列插入
  • 查詢 (Retrieve)
    • 全列查詢
    • 指定列查詢
    • 條件查詢
      • 關系元素運算符
      • 模糊查詢
    • 分頁查詢
    • 去重:DISTINCT
    • 別名:AS
    • 升序 or 降序
  • 更新 (Update)
  • 刪除 (Delete)
  • 分組(GROUP BY)
  • 聯合查詢
    • 內連接(inner join)
    • 自連接
    • 外連接
      • 左連接(left join)
      • 右連接(left join)
    • 子查詢(嵌套查詢)
    • 合并查詢
      • UNION
      • UNION ALL
  • 聚合函數(復合函數)
    • 最大最小
    • 總數、總和、平均值、保留小數
  • 條件函數
    • IF
    • CASE
  • 日期函數
    • 時間戳和日期的轉換
    • 年月日截取
    • 日期差計算
  • 文本函數


新增 (Create)

全列插入

語法

INSERT INTO [表名] VALUES(參數1, 參數2, 參數3......);

示例

INSERT INTO book VALUES(4, "C++Primer", 99.9, "2000-08-02", 103);mysql> SELECT * FROM book-> ;
+------+-----------+-------+------------+------+
| id   | name      | price | publish    | num  |
+------+-----------+-------+------------+------+
|    4 | C++Primer |   100 | 2000-08-02 |  103 |
+------+-----------+-------+------------+------+
1 rows in set (0.00 sec)

這里 price 的值為 100 而不是 99.9 是因為 默認decimal為(10,0) ,也就是 0 位小數,保存的時候將小數點后面的值四舍五入。
在這里插入圖片描述


指定列插入

即只插入部分列內容

語法

INSERT INTO [表名](1,列2,列3.......) values(參數1, 參數2, 參數3......);

示例

mysql> INSERT INTO book(id,name,price)-> VALUES(8,"紅樓夢",94.4);
Query OK, 1 row affected, 1 warning (0.01 sec)mysql> SELECT * FROM book;
+------+-----------+-------+------------+------+
| id   | name      | price | publish    | num  |
+------+-----------+-------+------------+------+
|    4 | C++Primer |   100 | 2000-08-02 |  103 |
|    8 | 紅樓夢    |    94 | NULL       | NULL |
+------+-----------+-------+------------+------+
2 rows in set (0.00 sec)

查詢 (Retrieve)

全列查詢

語法

SELECT * FROM [表名];

示例

mysql> SELECT * FROM book;
+------+-----------+-------+------------+------+
| id   | name      | price | publish    | num  |
+------+-----------+-------+------------+------+
|    4 | C++Primer |   100 | 2000-08-02 |  103 |
|    8 | 紅樓夢    |    94 | NULL       | NULL |
+------+-----------+-------+------------+------+
2 rows in set (0.00 sec)

指定列查詢

語法

SELECT1,列2,列3..... FROM [表名];

示例

mysql> SELECT name, price FROM book;
+-----------+-------+
| name      | price |
+-----------+-------+
| C++Primer |   100 |
| 紅樓夢    |    94 |
+-----------+-------+
2 rows in set (0.00 sec)

條件查詢

關系元素運算符

在這里插入圖片描述
語法

SELECT * FROM [表名] WHERE [條件];

示例

mysql> SELECT * FROM book WHERE id=8;
+------+-----------+-------+---------+------+
| id   | name      | price | publish | num  |
+------+-----------+-------+---------+------+
|    8 | 紅樓夢    |    94 | NULL    | NULL |
+------+-----------+-------+---------+------+
1 row in set (0.00 sec)

模糊查詢

語法

SELECT * FROM [表名] WHERE [列名] LIKE%XX%// 查詢名字中帶XX的數據
SELECT * FROM [表名] WHERE [列名] LIKE ”XX%// 查詢名字中以XX開頭的數據
SELECT * FROM [表名] WHERE [列名] LIKE%XX“
// 查詢名字中以XX結尾的數據

分頁查詢

語法

SELECT * FROM [表名] LIMIT [每頁條數] OFFSET [偏移條數];

示例

mysql> SELECT * FROM book;
+------+-----------+-------+------------+------+
| id   | name      | price | publish    | num  |
+------+-----------+-------+------------+------+
|    4 | C++Primer |   100 | NULL       |  103 |
|    4 | C++Primer |   100 | 2000-08-02 |  103 |
|    8 | 紅樓夢    |    94 | NULL       | NULL |
+------+-----------+-------+------------+------+
3 rows in set (0.00 sec)// 限制顯示條數
mysql> SELECT * FROM book LIMIT 1;
+------+-----------+-------+---------+------+
| id   | name      | price | publish | num  |
+------+-----------+-------+---------+------+
|    4 | C++Primer |   100 | NULL    |  103 |
+------+-----------+-------+---------+------+
1 row in set (0.00 sec)// 限制顯示條數、規定偏移量
mysql> SELECT * FROM book LIMIT 1 OFFSET 1;
+------+-----------+-------+------------+------+
| id   | name      | price | publish    | num  |
+------+-----------+-------+------------+------+
|    4 | C++Primer |   100 | 2000-08-02 |  103 |
+------+-----------+-------+------------+------+
1 row in set (0.00 sec)// 剩余數據不足LIMIT限制時,不會報錯,而是輸出所有剩余的
mysql> SELECT * FROM book LIMIT 2 OFFSET 2;
+------+-----------+-------+---------+------+
| id   | name      | price | publish | num  |
+------+-----------+-------+---------+------+
|    8 | 紅樓夢    |    94 | NULL    | NULL |
+------+-----------+-------+---------+------+
1 row in set (0.00 sec)

去重:DISTINCT

語法

SELECT DISTINCT * FROM [表名];

示例

mysql> SELECT * FROM book;
+------+-----------+-------+------------+------+
| id   | name      | price | publish    | num  |
+------+-----------+-------+------------+------+
|    4 | C++Primer |   100 | NULL       |  103 |
|    4 | C++Primer |   100 | 2000-08-02 |  103 |
|    8 | 紅樓夢    |    94 | NULL       | NULL |
|    4 | C++Primer |   100 | 2000-08-02 |  103 |
+------+-----------+-------+------------+------+
4 rows in set (0.00 sec)mysql> SELECT DISTINCT * FROM book;
+------+-----------+-------+------------+------+
| id   | name      | price | publish    | num  |
+------+-----------+-------+------------+------+
|    4 | C++Primer |   100 | NULL       |  103 |
|    4 | C++Primer |   100 | 2000-08-02 |  103 |
|    8 | 紅樓夢    |    94 | NULL       | NULL |
+------+-----------+-------+------------+------+
3 rows in set (0.00 sec)

別名:AS

語法

SELECT 列a,列b...... AS [別名] FROM [表名];

示例

mysql> SELECT name, price * num AS total FROM book;
+-----------+-------+
| name      | total |
+-----------+-------+
| C++Primer | 10300 |
| C++Primer | 10300 |
| 紅樓夢    |  NULL |
| C++Primer | 10300 |
+-----------+-------+
4 rows in set (0.00 sec)

升序 or 降序

語法

SELECT * FROM [表名] ORDER BY [列名] DESC
// DESC為降序排序,ASC為升序排序,默認為ASC。

示例

mysql> SELECT name, price * num AS total FROM book ORDER BY total;
+-----------+-------+
| name      | total |
+-----------+-------+
| 紅樓夢    |  NULL |
| C++Primer | 10300 |
| C++Primer | 10300 |
| C++Primer | 10300 |
+-----------+-------+
4 rows in set (0.00 sec)

更新 (Update)

語法

UPDATE [表名] SET [修改項] = [修改結果] 

示例

mysql> SELECT * FROM book;
+------+-----------+-------+------------+------+
| id   | name      | price | publish    | num  |
+------+-----------+-------+------------+------+
|    4 | C++Primer |   100 | NULL       |  103 |
|    4 | C++Primer |   100 | 2000-08-02 |  103 |
|    8 | 紅樓夢    |    94 | NULL       | NULL |
|    4 | C++Primer |   100 | 2000-08-02 |  103 |
+------+-----------+-------+------------+------+
4 rows in set (0.00 sec)mysql> UPDATE book SET num=55 WHERE id=8;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0mysql> SELECT * FROM book;
+------+-----------+-------+------------+------+
| id   | name      | price | publish    | num  |
+------+-----------+-------+------------+------+
|    4 | C++Primer |   100 | NULL       |  103 |
|    4 | C++Primer |   100 | 2000-08-02 |  103 |
|    8 | 紅樓夢    |    94 | NULL       |   55 |
|    4 | C++Primer |   100 | 2000-08-02 |  103 |
+------+-----------+-------+------------+------+
4 rows in set (0.00 sec)

刪除 (Delete)

語法

DELETE FROM [表名];

示例

mysql> DELETE FROM book WHERE id=4;
Query OK, 3 rows affected (0.00 sec)mysql> SELECT * FROM book;
+------+-----------+-------+---------+------+
| id   | name      | price | publish | num  |
+------+-----------+-------+---------+------+
|    8 | 紅樓夢    |    94 | NULL    |   55 |
+------+-----------+-------+---------+------+
1 row in set (0.00 sec)

分組(GROUP BY)

分組的意思是根據所選 列名 對數據進行分組,可以理解為作為分組依據的 不會變動,而對其余列按照要求進行相關操作,最后對照著 列中的項 展示對應的結果。

語法

SELECT * FROM [表名] WHERE [條件] GROUP BY [列名]
SELECT * FROM [表名] GROUP BY [列名] HAVING [過濾條件]
// WHERE 后跟的條件里不允許使用聚合函數,但 HAVING 后面的過濾條件可以。

示例
在這里插入圖片描述

SELECT gender, university, count(device_id) AS user_num,
avg(active_days_within_30) AS avg_active_days,
avg(question_cnt) as avg_question_cnt
FROM user_profile GROUP BY university, gender;

在這里插入圖片描述


聯合查詢

內連接(inner join)

內連接即查找兩個表中的 交集 ,找到兩個表中同時符合條件的數據,進行連接。

語法

select 字段 from1 別名1 [inner] join2 別名2 on 連接條件 and 其他條件; 
select 字段 from1 別名1,2 別名2 where 連接條件 and 其他條件; 

自連接

自連接是特殊的內連接,即與本表進行連接,需要對表名進行 別名顯示

語法

select 字段 from 表名1 別名1 [inner] join 表名2 別名2 on 連接條件 and 其他條件; 

外連接

外連接又分左外連接和右外連接。簡單來說就是,以左表的數據為基準就是左連接,以右表的數據為基準就是右連接


左連接(left join)

對于左連接,以左表的數據為基準,在右表中查找符合條件的數據,找不到的以 NULL 展示

語法

select 字段名 from 表名1 left join 表名2 on 連接條件; 
// 以 表1 為左基準,查詢 表2 中的符合數據

右連接(left join)

對于右連接,以右表的數據為基準,在左表中查找符合條件的數據,找不到的以 NULL 展示

語法

select 字段 from 表名1 right join 表名2 on 連接條件; 
//  以 表1 為右基準,查詢 表2 中的符合數據

子查詢(嵌套查詢)

子查詢又叫做嵌套查詢(窗口查詢),其實就是嵌入 其他sql語句 中的 select語句 ,一般用于 查詢的條件是另一條語句的結果 這一情況。

語法

select 字段 from 表名 where 查詢條件=(select 列名 from 表名 where 查詢條件);

示例

(題源牛客)找到每個學校gpa最低的同學來做調研,請你取出相應數據。

在這里插入圖片描述
在這里插入圖片描述

SELECT device_id, university, gpa
FROM user_profile
WHERE gpa IN( # IN 可替換為 = ANYSELECT min(gpa)FROM user_profileGROUP BY university
)
GROUP BY university # 保證學校名不重復
ORDER BY university; # 保證與題目要求輸出順序一致

合并查詢

UNION

該操作符用于取得兩個結果集的并集。當使用該操作符時,會自動去掉結果集中的重復行

語法

select 字段 from 表名 where 查詢條件
UNION
select 列名 from 表名 where 查詢條件;

同樣的結果也可以通過 or語句 來得到

select 字段 from 表名 where 查詢條件1 or 查詢條件2;

但是OR這個邏輯運算符會忽略索引、掃描全表,所以在海量數據查詢中性能會下降很多。


UNION ALL

該操作符用于取得兩個結果集的并集。當使用該操作符時,不自動去掉結果集中的重復行

語法

select 字段 from 表名 where 查詢條件
UNION ALL
select 列名 from 表名 where 查詢條件;

聚合函數(復合函數)

最大最小

  • MAX(): 返回查詢到的數據的最大值
  • MIN(): 返回查詢到的數據的最小值

語法

SELECT max([列名]) FROM [表名]
// 查詢對應列中最大的數據
SELECT min([列名]) FROM [表名]
// 查詢對應列中最小的數據

示例

mysql> SELECT * FROM class;
+------+------+-------+
| id   | num  | name  |
+------+------+-------+
| NULL | NULL | li    |
| NULL | NULL | chen  |
| NULL | NULL | zhang |
+------+------+-------+
3 rows in set (0.00 sec)mysql> SELECT max(name) FROM class-> ;
+-----------+
| max(name) |
+-----------+
| zhang     |
+-----------+
1 row in set (0.00 sec)

總數、總和、平均值、保留小數

  • COUNT(): 返回查詢到的數據的數量
  • SUM(): 返回查詢到的數據的總和
  • AVG(): 返回查詢到的數據的平均值
  • ROUND(): 返回查詢數據的保留小數結果,常與 sum、avg 搭配。

語法

SELECT count([列名]) FROM [表名]
// 查詢對應列中數據的總數
SELECT sum([列名]) FROM [表名]
// 查詢對應列中數據的和
SELECT avg([列名]) FROM [表名]
// 查詢對應列中數據的平均值
SELECT round([數據], n) FROM [表名]
// 查詢對應數據保留n位小數的結果,數據可以為count、avg的結果

條件函數

IF

條件函數 if(x,a,b)表示如果 x 成立、則返回 a;否則返回 b 。常用來劃分查詢結果的輸出情況。

語法

SELECT IF(X, A, B) AS [列名] FROM [表名]

示例
(題源牛客)現在運營想要將用戶劃分為25歲以下和25歲及以上兩個年齡段,分別查看這兩個年齡段用戶數量:
在這里插入圖片描述
在這里插入圖片描述

SELECT if(age>=25, '25歲以及上', '25歲以下') AS age_cut,
COUNT(device_id) AS Number FROM user_profile
GROUP BY age_cut;

CASE

數據庫中的 case運算符 類似于 C語言 中的 switch語句WHEN 用來羅列情況,THEN 將情況與輸出結果相對應,ELSE 總結未羅列的情況,END 標識語句結束。

語法

SELECT
CASEWHEN [條件] THEN [輸出結果]WHEN [條件] THEN [輸出結果]ELSE [輸出結果]
END
AS [列名] FROM [表名]

示例
(題源牛客)現在運營想要將用戶劃分為20歲以下,20-24歲,25歲及以上三個年齡段,分別查看不同年齡段用戶的明細情況,請取出相應數據。
在這里插入圖片描述
在這里插入圖片描述

SELECT device_id, gender,
CASEWHEN age>=25 THEN '25歲以上'WHEN age BETWEEN 20 AND 24 THEN "20-24歲"WHEN age<20  THEN '20歲以下'ELSE '其他'
END
AS age_cut FROM user_profile

日期函數

時間戳和日期的轉換

時間戳是數據庫中自動生成的唯一二進制數字,表明數據庫中數據修改發生的相對順序,其記錄形式類似:1627963699 ,在實際工作環境中,對于用戶行為發生的時間通常都是用時間戳進行記錄。

from_unixtime 可以將時間戳轉換成日期,其使用語法如下:

# 時間戳所在列轉換
SELECT
from_unixtime([時間戳所在列], 'yyyy-MM-dd’) AS [列名] # 日期格式有’yyyy-MM-dd’ 和 ‘yyyyMMdd’,這里選用前者
From [表名]
# 單個時間戳轉換
SELECT from_unixtime([時間戳], [日期格式]) AS [列名]

unix_timestamp 可以將日期轉換成時間戳,其使用語法如下:

  • 如果日期值格式滿足yyyy-MM-dd HH:mm:ss,則無需指定日期格式:
SELECT unix_timestamp([日期值]) AS [列名]
  • 如果日期值格式不滿足yyyy-MM-dd HH:mm:ss,則必須指定日期格式:
SELECT unix_timestamp(2021-09-02','yyyy-MM-dd’) AS [列名]

年月日截取

可以從完整日期格式中提取出年月日:

語法

SELECT year([日期值]), month([日期值]), day([日期值]) FROM [表名]
# 提取一列的年月日則可以將 日期值 改為 列名

示例

(題源牛客)計算出2021年8月每天用戶練習題目的數量,請取出相應數據。
在這里插入圖片描述
在這里插入圖片描述

SELECT DAY(date) AS day, COUNT(question_id) AS question_cnt
FROM question_practice_detail
WHERE YEAR(date)='2021' AND MONTH(date)='08'
GROUP BY day;

日期差計算

datedff

datediff 的作用為計算兩個日期之間的天數間隔。

語法

datediff(date1, date2)

返回起始時間 date1 和結束時間 date2 之間的天數,date1 大于 date2 的情況下,返回的天數為正數;date1 小于 date2 的情況下,返回的天數為負數。

date_sub

語法

date_sub (string startdate, interval int day) 

返回開始日期 startdate 減少 day 天后的日期。

date_add

語法

date_add(string startdate, interval int day) 

返回開始日期 startdate 增加 day 天后的日期。

示例

(題源牛客)查看用戶在某天刷題后第二天還會再來刷題的平均概率。請取出相應數據。
在這里插入圖片描述
在這里插入圖片描述

SELECT COUNT(q2.device_id)/COUNT(q1.device_id) AS avg_ret
FROM(SELECT DISTINCT device_id, dateFROM question_practice_detail
) q1
LEFT JOIN(SELECT DISTINCT device_id,date_sub(date, INTERVAL 1 DAY) AS dateFROM question_practice_detail
) q2
USING(date, device_id);
# USING 等同于 ON q1.date=q2.date AND q1.device_id=q2.device_id;

文本函數

  1. LOCATE(substr, str) :返回子串 substr 在字符串 str 中第一次出現的位置,如不存在,則返回0;
  2. POSITION(substr IN str)LOCATE函數 作用相同;
  3. LEFT(str, length) :從左邊開始截取 strlength 是截取的長度;
  4. RIGHT(str, length) :從右邊開始截取 strlength 是截取的長度;
  5. SUBSTRING_INDEX(str, substr, n) :返回字符 substrstr 中第 n 次出現位置之前的字符串,n 若為負數,則表倒數;
  6. SUBSTRING(str , n, m) :返回字符串 str 從第 n 個字符截取長度為 m 個字符;
  7. REPLACE(str, n, m) :將字符串 str 中的 n 字符替換成 m 字符;
  8. LENGTH(str) :計算字符串 str 的長度。

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

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

相關文章

Spring3.1+Quertz1.8實現多個計劃任務

1.主要是配置文件&#xff1a;如下&#xff1a;(這里說明一下主要是看紅色部分的配置&#xff0c;其他的可以根據自己的實際情況修改&#xff0c;這里只是個思路。) <?xml version"1.0"?> <beans xmlns"http://www.springframework.org/schema/beans…

MySQL | 數據庫的六種約束、表的關系、三大范式

文章目錄數據庫約束NOT NULL&#xff08;非空約束&#xff09;UNIQUE&#xff08;唯一約束&#xff09;DEFAULT&#xff08;缺省約束&#xff09;PRIMARY KEY&#xff08;主鍵約束&#xff09;AUTO_INCREMENT 自增FOREIGN KEY&#xff08;外鍵約束&#xff09;CHECK&#xff08…

哈希 :哈希沖突、負載因子、哈希函數、哈希表、哈希桶

文章目錄哈希哈希&#xff08;散列&#xff09;函數常見的哈希函數字符串哈希函數哈希沖突閉散列&#xff08;開放地址法&#xff09;開散列&#xff08;鏈地址法/拉鏈法&#xff09;負載因子以及增容對于閉散列對于開散列結構具體實現哈希表&#xff08;閉散列&#xff09;創建…

C++ 泛型編程(一):模板基礎:函數模板、類模板、模板推演成函數的機制、模板實例化、模板匹配規則

文章目錄泛型編程函數模板函數模板實例化隱式實例化顯式實例化函數模板的匹配規則類模板類模板的實例化泛型編程 泛型編程旨在削減重復工作&#xff0c;如&#xff1a; 將一個函數多次重載不如將他寫成泛型。 void Swap(int& left, int& right) {int temp left;lef…

你真的了解靜態變量、常量的存儲位置嗎?

文章目錄引言C對內存的劃分如何落實在Linux上自由存儲區和堆之間的問題棧常量區靜態存儲區靜態局部變量靜態局部變量、靜態全局變量、全局變量的異同macOS系統的測試結果總結引言 在動態內存的博客中&#xff0c;我提到&#xff1a; 在Linux 內存管理的博客中&#xff0c;我提…

C++ 泛型編程(二):非類型模板參數,模板特化,模板的分離編譯

文章目錄非類型模板參數函數模板的特化類模板的特化全特化偏特化部分參數特化參數修飾特化模板分離編譯解決方法非類型模板參數 模板的參數分為兩種&#xff1a; 類型參數&#xff1a; 則是我們通常使用的方式&#xff0c;就是在模板的參數列表中在 class 后面加上參數的類型…

Java操作——獲取文件擴展名,去掉文件擴展名

昨天收郵件&#xff0c;得知要參加一個產品部的會議&#xff0c;猜想&#xff0c;也許是因為我做的這個產品demo問題。于是昨天忙活到凌晨3點半&#xff0c;結果早上一來才知道又被調戲了。發郵件的MM把郵件誤發給我了。悲催啊有木有&#xff0c;困啊有木有&#xff01;自己還是…

數據結構 | B樹、B+樹、B*樹

文章目錄搜索結構B樹B樹的插入B樹的遍歷B樹的性能B樹B樹的插入B樹的遍歷B*樹B*樹的插入總結搜索結構 如果我們有大量的數據需要永久存儲&#xff0c;就需要存儲到硬盤之中。但是硬盤的訪問速度遠遠小于內存&#xff0c;并且由于數據量過大&#xff0c;無法一次性加載到內存中。…

MySQL 索引 :哈希索引、B+樹索引、全文索引

文章目錄索引引言常見的索引哈希索引自適應哈希索引B樹索引聚集索引非聚集索引使用方法聯合索引最左前綴匹配規則覆蓋索引全文索引使用方法索引 引言 為什么需要索引&#xff1f; 倘若不使用索引&#xff0c;查找數據時&#xff0c;MySQL必須遍歷整個表。而表越大&#xff0c;…

服裝店怎么引流和吸引顧客 服裝店鋪收銀系統來配合

實體店的同城引流和經營是實體經濟的一個重要的一環&#xff0c;今天我們來分享服裝行業的實體店鋪怎么引流和吸引、留住顧客&#xff0c;并實現復購。大家點個收藏&#xff0c;不然劃走就再也找不到了&#xff0c;另外可以點個關注&#xff0c;下次有新的更好的招&#xff0c;…

約瑟夫環(丟手絹問題)

文章目錄問題描述思路代碼實現問題描述 有 1~N 個數字&#xff0c;從 1~m 依次報數&#xff0c;數到 m 的數字要被刪掉&#xff0c;求最后剩下的數字是&#xff1f; 思路 第一次報數第二次報數1n-m12n-m2……m-2n-2m-1n-1m被刪掉了m11m22……n-1n-1-mnn-m 通過上面的表格&…

MySQL 鎖的相關知識 | lock與latch、鎖的類型、簡談MVCC、鎖算法、死鎖、鎖升級

文章目錄lock與latch鎖的類型MVCC一致性非鎖定讀&#xff08;快照讀&#xff09;一致性鎖定讀&#xff08;當前讀&#xff09;鎖算法死鎖鎖升級lock與latch 在了解數據庫鎖之前&#xff0c;首先就要區分開 lock 和 latch。在數據庫中&#xff0c;lock 和 latch 雖然都是鎖&…

Hibernate使用原生SQL適應復雜數據查詢

HQL盡管容易使用&#xff0c;但是在一些復雜的數據操作上功能有限。特別是在實現復雜的報表統計與計算&#xff0c;以及多表連接查詢上往往無能為力&#xff0c;這時可以使用SQL&#xff08;Native SQL&#xff09;實現HQL無法完成的任務。 1、使用SQL查詢 使用SQL查詢可以通過…

MySQL 存儲引擎 | MyISAM 與 InnoDB

文章目錄概念innodb引擎的4大特性索引結構InnoDBMyISAM區別表級鎖和行級鎖概念 MyISAM 是 MySQL 的默認數據庫引擎&#xff08;5.5版之前&#xff09;&#xff0c;但因為不支持事務處理而被 InnoDB 替代。 然而事物都是有兩面性的&#xff0c;InnoDB 支持事務處理也會帶來一些…

MySQL 事務 | ACID、四種隔離級別、并發帶來的隔離問題、事務的使用與實現

文章目錄事務ACID并發帶來的隔離問題幻讀&#xff08;虛讀&#xff09;不可重復讀臟讀丟失更新隔離級別Read Uncommitted (讀未提交)Read Committed (讀已提交)Repeatable Read (可重復讀)Serializable (可串行化)事務的使用事務的實現Redoundo事務 事務指邏輯上的一組操作。 …

MySQL 備份與主從復制

文章目錄備份主從復制主從復制的作用備份 根據備份方法的不同&#xff0c;備份可劃分為以下幾種類型&#xff1a; 熱備(Hot Backup) &#xff1a; 熱備指的是在數據庫運行的時候直接備份&#xff0c;并且對正在運行的數據庫毫無影響&#xff0c;這種方法在 MySQL 官方手冊中又…

C++ 流的操作 | 初識IO類、文件流、string流的使用

文章目錄前言IO頭文件iostreamfstreamsstream流的使用不能拷貝或對 IO對象 賦值條件狀態與 iostate 類型輸出緩沖區文件流fstream類型文件模式文件光標函數tellg() / tellp()seekg() / seekp()向文件存儲內容/讀取文件內容string流istringstreamostringstream前言 我們在使用 …

Hibernate 更新部分更改的字段 hibernate update

Hibernate 中如果直接使用 Session.update(Object o);或則是Session.updateOrUpdate(Object o); 會把這個表中的所有字段更新一遍。 如&#xff1a; ExperClass4k e new ExperClass4k(); e.setTime(time); e.setQ_num(q_num); e.setK(k); if (str "finch_fix")…

C++ 類的行為 | 行為像值的類、行為像指針的類、swap函數處理自賦值

文章目錄概念行為像值的類行為像指針的類概念引用計數動態內存實現計數器類的swap概念swap實現自賦值概念 行為像值的類和行為像指針的類這兩種說法其實蠻拗口的&#xff0c;這也算是 《CPrimer》 翻譯的缺點之一吧。。。 其實兩者的意思分別是&#xff1a; 行為像值的類&am…

C++ 右值引用 | 左值、右值、move、移動語義、引用限定符

文章目錄C11為什么引入右值&#xff1f;區分左值引用、右值引用move移動語義移動構造函數移動賦值運算符合成的移動操作小結引用限定符規定this是左值or右值引用限定符與重載C11為什么引入右值&#xff1f; C11引入了一個擴展內存的方法——移動而非拷貝&#xff0c;移動較之拷…