人們之所以不愿改變,是因為害怕未知。但歷史唯一不變的事實,就是一切都會改變。?
前言
?這是我自己學習mysql數據庫的第四篇博客總結。后期我會繼續把mysql數據庫學習筆記開源至博客上。
? 上一期筆記是關于mysql數據庫的表格約束,沒看的同學可以過去看看:
【MySQL】從零開始:掌握MySQL數據庫的核心概念(三)-CSDN博客
https://blog.csdn.net/hsy1603914691/article/details/146385371
表格的增刪查改
增?
正常插入
//指定列單行插入
insert into tb_name() values();
//全列單行插入
insert into tb_name values();
//指定列多行插入
insert into tb_name() values(),();
//全列多行插入
insert into tb_name values(),();
沖突插入?
//插入更新
insert into tb_name() values()
on duplicate key update column_name1=xxx,column_name2=yyy,...;
//替換更新
replace into tb_name() values();
1. 此時無法正常插入,已經存在沖突數據,主鍵值重復或者唯一鍵值重復。
2. insert into插入更新時,會存在以下情況:
- -- 0 row affected: 表中有沖突數據,但沖突數據的值和update的值相等。
- -- 1 row affected: 表中沒有沖突數據,數據被插入。
- -- 2 row affected: 表中有沖突數據,并且數據已經被更新。
3. replace into替換更新時,會存在以下情況:
- -- 1 row affected: 表中沒有沖突數據,數據被插入。
- -- 2 row affected: 表中有沖突數據,刪除后重新插入。
查詢插入
insert into tb_name select ...;
1. 除了向表格中插入具體的數據,還可以向表格中插入查詢出來的數據。?
刪?
delete子句-turncate子句
//刪除表格的數據
delete from tb_name ...;
//重置表格
turncate table tb_name;
1. turncate只能對整個表格進行操作,不能像delete一樣針對部分數據操作。
2.?turncate會重置auto_increment項。
3.?實際上turncate不對數據操作,所以比delete更快,但是turncate在刪除數據的時候,并不經過真正的事物,所以無法回滾。
查?
整體查詢
//全列查詢
select * from tb_name;
//指定列查詢
select column_name1 column_name2 from tb_name;
//表達式運算查詢
select column_name1 as new_name1 column_name2+column_name3+num as new_name2 from tb_name;
//去重查詢
select distinct column_name1 from tb_name;
1. 通常情況下不建議使用全列查詢:
- 查詢的列越多,意味著需要傳輸的數據量越大。
- 可能會影響到索引的使用。
條件查詢
運算符
>,>=,<,<= | 大于,大于等于,小于,小于等于 |
= | 等于 |
!= | 不等于 |
between a and b | 范圍匹配, [a,b] ,如果 a<=value<=b ,返回 true(1) |
in(option,...) | 如果是 option中的任意一個,返回true(1) |
is null | 是 null |
is not null | 不是null |
like | 模糊匹配。其中 % 表示任意多個(包括 0 個)任意字符;其中 _ 表示任意一個字符。 |
and | 與運算 |
or | 并運算 |
not | 非運算 |
where子句
select ... from ... where ...
1. 語法上,先執行from...,再執行where...,最后執行select...。所以在where子句中,不能使用select...中定義的別名。
2. where子句中可以使用圓括號()來限制先后邏輯。
改?
修改數據
update tb_name set column_name_change ...;
1. column_name_change大部分以重新賦值的形式呈現。
查詢排序?
//升序
asc
//降序
desc
//
select ... from ... where ... order by column_name sort_order;
1. 在order by子句中,默認升序排序。
2. NULL值也參與排序,但是視為比任何值都小。
3. 語法上,先執行from...,再執行where...,然后執行select...,最后執行order by...。所以在where子句中,不能使用select...中定義的別名,但是在order by子句中,可以使用select...中定義的別名。
分頁篩選?
//從下標為0的數據開始,往后篩選n條數據
select ... from ... where ... limit n;
//從下標為s的數據開始,往后篩選n條數據
select ... from ... where ... limit n offset s;
1.?對未知表進行查詢時,最好加上:limit 1。避免因為表中數據過大,查詢全表數據導致數據庫卡死。
聚合函數
count() | 返回查詢到的數據的數量 |
sum() | 返回查詢到的數據的總和,不是數字沒有意義 |
avg() | 返回查詢到的數據的平均值,不是數字沒有意義 |
max() | 返回查詢到的數據的最大值,不是數字沒有意義 |
min() | 返回查詢到的數據的最小值,不是數字沒有意義 |
select func(column_name) from tb_name;
1. 聚合函數視為一個整體,相當于一個新的變量。
分組查詢?
select func(column_name1) from tb_name group by column_name2 having ...;
1. 分組的目的是為了更好的進行分組聚合統計。
2. 分組的依據一般是指定的列名,根據該列的不同數據來進行分組。
3. where主要是對具體的某一列進行條件篩選,having主要是對分組后的結果進行條件篩選。
4. where與having的條件篩選的階段是不同的。
致謝?
??感謝您花時間閱讀這篇文章!如果您對本文有任何疑問、建議或是想要分享您的看法,請不要猶豫,在評論區留下您的寶貴意見。每一次互動都是我前進的動力,您的支持是我最大的鼓勵。期待與您的交流,讓我們共同成長,探索技術世界的無限可能!