2022-08-18 MySQL常用函數

来源:https://www.cnblogs.com/YQuicksilver/archive/2022/08/21/16610982.html
-Advertisement-
Play Games

概述 由一個或多個 Sentinel(哨兵)實例組成的 Sentinel 系統可以監視任意多個主伺服器,以及這些主伺服器屬下的所有從伺服器,併在被監視的主伺服器進入下線狀態時,自動將下線主伺服器屬下的某個從伺服器升級為新的主伺服器 簡單來說,哨兵就是帶有自動故障轉移功能的主從架構 搭建哨兵架構 以 ...


MySQL常用函數

聚合函數

  • count:計數。count(*)≈count(1)>count(主鍵)
    • count(*):MySQL對count(*)底層優化,count(0)。
    • count(1)
    • count(主鍵)
    • count(欄位)
  • min:最小值
  • max:最大值
  • sum:求和
  • avg:平均值

數值型函數

主要是對數值型進行處理。

  • ceiling(x):向上取整
  • floor(x):向下取整
  • round(x):四捨五入
  • truncate(x,y):返回數字x截斷為y位小數的結果
  • PI:圓周率,π
  • rand:返回0到1的隨機數
  • abs:絕對值
-- 絕對值
select ABS(-4) 4的絕對值,ABS(-1.1);
-- 向下取整,向上取整,四捨五入
select CEILING(4.1),FLOOR(1.1),ROUND(-4.4)
-- 取餘
select MOD(60,11);
-- 隨機數
select RAND(),RAND(),RAND()
-- 截斷
select TRUNCATE(2.33999999,2);

字元串型函數

對字元串進行處理。

  • length(s):字元串的長度
  • concat(s1,s2,.....sn):合併字元串
  • lower(str):將字母轉成小寫
  • upper(str):將字母轉成大寫
  • left(str,x):返回字元串str的左邊的x個字元
  • right(str,x):返回字元串str右邊的x個字元
  • trim:去掉左右兩邊的空格
  • replace:替換
  • substring:截取
  • reverse:反轉
select LEFT('abcdefg',2);
select RIGHT('abcdefg',2);
select REVERSE('hijklmn');
select REPLACE('abcdefg','abc','x');

日期和時間函數

date,time,datetime,timestamp,year。

獲取時間和日期

  • 【curdate】和【current_date】,返回當前的系統日期。
  • 【curtime】和【current_time】,返回當前的系統時間。
  • 【now】和【sysdate】,返回當前的系統時間和日期。
select CURRENT_DATE();
select CURTIME();
select now();

時間戳和日期轉換函數

  • 【UNIX_TIMESTAMP】獲取unix時間戳函數
  • 【FROM_UNIXTIME】將時間戳轉換為時間格式
select UNIX_TIMESTAMP();
select FROM_UNIXTIME(1660785720);

根據日期獲取年月日的數值

select MONTH(SYSDATE());
select MONTHNAME(SYSDATE());
select DAYNAME(SYSDATE());
select DAYOFWEEK(SYSDATE());
select WEEK(SYSDATE());
select DAYOFMONTH(SYSDATE());
select YEAR(SYSDATE());

時間日期的計算

-- 日期加法
select DATE_ADD(SYSDATE(),INTERVAL 70 DAY);
-- 日期減法
select DATE_SUB(SYSDATE(),INTERVAL 10 DAY);
-- 時間間隔
select DATEDIFF('2023-01-01',SYSDATE());
-- 日期格式化
select DATE_FORMAT(SYSDATE(),'%W %M %D %Y');

加密函數

-- 把傳入的參數的字元串按照md5演算法進行加密,得到一個32位的16進位的字元串
select MD5('123456');

md5演算法是不可逆的。

流程式控制制函數

可以進行條件判斷,用來實現SQL語句的邏輯。

  • if(test,t,f):如果test是真,則返回t,否則返回f
  • ifnull(arg1,arg2):如果arg1不是空,返回arg1,否則返回arg2
  • nullif(arg1,arg2):如果arg1=arg2返回null,否則返回arg1
select IF(2 > 1,'a','b');
select IFNULL(sal,0);
select NULLIF(age,0);

對一系列的值進行判斷:

-- 輸出學生的各科的成績,以及評級,60以下D,60-70是C,71-80是B,80以上是A
SELECT
	*,
CASE
		
		WHEN score < 60 THEN 'D' WHEN score >= 60 
		AND score < 70 THEN 'C' WHEN score >= 70 
			AND score < 80 THEN 'B' WHEN score >= 80 THEN
				'A' 
			END AS '評級' 
	FROM
	mystudent;
-- 行轉列
SELECT
	user_name,
	max( CASE course WHEN '數學' THEN score ELSE 0 END ) '數學',
	max( CASE course WHEN '語文' THEN score ELSE 0 END ) '語文',
	max( CASE course WHEN '英語' THEN score ELSE 0 END ) '英語' 
FROM
	mystudent 
GROUP BY
	user_name

資料庫設計

三範式

  • 第一範式:要求有主鍵,並且要求每一個欄位的原子性不能再分。
  • 第二範式:要求所有的非主鍵欄位完全依賴主鍵,不能產生部分依賴
  • 第三範式:所有非主鍵欄位和主鍵欄位之間不能產生傳遞依賴。

第一範式

不符合第一範式表結構:

id name 聯繫方式
1001 aaa [[email protected] , 13314569878](mailto:[email protected] , 13314569878)
1002 bbb [[email protected] , 13245678945](mailto:[email protected] , 13245678945)
1003 ccc [[email protected] , 15000456987](mailto:[email protected] , 15000456987)

符合第一範式的表結構:

id name 郵箱 手機號
1001 aaa [email protected] 12321321321
1002 bbb [email protected] 32132654654
1003 ccc [email protected] 45654654654

必須有主鍵,這是資料庫設計的基本要求,一般情況下我們採用數值型或定長字元串,列不能再分,比如:聯繫方式。

關於第一範式,保證每一行的數據是唯一,每個表必須有主鍵。

第二範式

建立在第一範式的基礎上,要求所有非主鍵欄位完全依賴於主鍵,不能產生部分依賴。

學號 性別 姓名 課程編號 課程名稱 教室 成績
1001 a 2001 java 301 89
1002 b 2002 mysql 302 90
1003 c 2003 html 303 91
1004 d 2004 python 304 52
1005 e 2005 c++ 305 67
1006 f 2006 c# 306 84

解決方案:

學生表:學號是主鍵

學號 性別 姓名
1001 a
1002 b
1003 c
1004 d
1005 e
1006 f

課程表:課程編號是主鍵

課程編號 課程名稱 教室
2001 java 301
2002 mysql 302
2003 html 303
2004 python 304
2005 c++ 305
2006 c# 306

成績表:學號和課程編號為聯合主鍵

學號 課程編號 成績
1001 2001 89
1002 2002 90
1003 2003 91
1004 2004 52
1005 2005 67
1006 2006 84

第三範式

建立在第二範式基礎上,非主鍵欄位不能傳遞依賴於主鍵欄位。

不滿足第三範式:

學號 姓名 課程編號 課程名稱
1001 a 2001 java
1002 b 2002 mysql
1003 c 2003 html
1004 d 2004 python
1005 e 2005 c++
1006 f 2006 c#

解決方案:

學生表:學號是主鍵

學號 姓名 課程編號
1001 a 2001
1002 b 2002
1003 c 2003
1004 d 2004
1005 e 2005
1006 f 2006

課程表:課程編號是主鍵

課程編號 課程名稱
2001 java
2002 mysql
2003 html
2004 python
2005 c++
2006 c#

常見的表關係

一對一

學生信息表分為基本信息表和信息信息表。

  • 分為兩張表,共用主鍵。
  • 分兩張表,用外鍵連接。

一對多

兩張表,外鍵在多的一方。

  • 分兩張表存儲,在多的一方加外鍵
  • 這個外鍵欄位引用是一的一方的主鍵

多對多

  • 分三張表存儲,在學生表存儲學生信息,在課程表存儲課程信息。
  • 在成績表中存儲學生和課程的對應關係。

mysql未完待續....

索引視圖,存儲過程,觸發器,函數....


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 微任務 在js中,當使用promise,會將當前任務加入事件執行的微任務隊列,有且只有這一種方法可以,因為當使用了promise,在JS引擎中會觸發VM::queueMicrotask,會向m_microtaskQueue隊列中壓入事件,在V8中只有這一種暴露方式,沒有其他介面可以調用這個方法 vo ...
  • C# 在中國的採用需要一個殺手級應用的帶動, 那麼這樣的一個殺手級應用是 Unity嗎,我這裡大膽推測採用CoreCLR 的新一代完全採用C#構建的Unity 將是這樣的一個殺手級應用。Unity已被廣泛應用於數字孿生、數字城市、數字工廠等場景,成為各產業加速數字化轉型的一個通用技術平臺底座,而對接 ...
  • 學習內容及其引用 [ ] 委托的定義以及如何理解委托 [ ] 委托的聲明及其由來 [ ] 委托類型的實例 [ ] 多播委托 [ ] 委托的缺點 [ ] Action委托與Func委托 委托•語法篇 C#語言入門詳解 Delegate詳解 委托的定義以及如何理解委托 委托現實的定義: 本人不需要親自去 ...
  • #前言 前段時間需要在一個新項目里添加兩個後臺任務,去定時請求兩個供應商的API來同步數據;由於項目本身只是一個很小的服務,不太希望引入太重的框架,同時也沒持久化要求;於是我開始尋找在Quartz.Net、Hangfire之外,是否還有更為輕量級的框架滿足我的要求,最終我選擇了Coravel. #簡 ...
  • 由於net core 中預設沒有System.Drawing,可以通過nuget下載一個來代替System.Drawing.Common 直接壓縮圖片 /// <summary> /// 圖片壓縮 /// </summary> /// <param name="sFile">原圖片位置</param ...
  • Mac哪款三維人物動畫製作工具好用呢?DAZ Studio Pro for Mac是一款應用在Mac平臺上的3d人物動畫製作軟體,,它擁有輕鬆簡約的ui界面以及強大的虛擬化3d建模功能,通過軟體自帶的虛擬人物模型,您不僅可以自由的添加場景環境等虛擬元素,還可以進行相關主題以及光線效果的設置,用戶可以 ...
  • 小眾的2.4G射頻收發晶元, 和 Ci24R1, XN297L 一樣, 都屬於 nRF24L01 派生的 SOP8 版本. 在寄存器和操作上類似於nRF24L01, 但是寄存器中存在大量多位元組的設置, 沒有中斷, 完全靠輪詢工作, 這是這個型號的特點. 在相容性上, 和XN297L管腳佈局一致但是寄... ...
  • Oracle序列學習與使用總結 by:授客 QQ:1033553122 簡述 序列是oracle提供的用於生成一系列數字的資料庫對象,序列會自動生成順序遞增的序列號,可用於提供唯一的自動遞增主鍵。序列和視圖一樣,並不占用實際的存儲空間,只是在數據字典中保存他的定義信息。 創建序列 當創建序列時必須擁 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...