1. 程式人生 > 其它 >MySQL函式、事務、索引、許可權管理和備份、規範資料庫設計

MySQL函式、事務、索引、許可權管理和備份、規範資料庫設計

官網:https://dev.mysql.com/doc/refman/8.0/en/built-in-function-reference.html

5.1、常用函式
-- ==============常用函式===============
-- 數字運算
SELECT ABS(-7) -- 絕對值
SELECT CEILING(9.4) -- 向上取整
SELECT FLOOR(9.4) -- 向下取整
SELECT RAND() -- 返回一個0~1之間的隨機數
SELECT SIGN(10) -- 判斷一個數的符號 負數返回-1,正數返回1

-- 字串函式
SELECT CHAR_LENGTH('我愛資料庫') -- 字串長度
SELECT CONCAT('我','愛','你們') -- 拼接字串
SELECT LOWER('ZhangGuorong') -- 小寫字母
SELECT UPPER('ZhangGuorong') -- 大寫字母
SELECT INSERT('我愛程式設計helloWorld',1,2,'超級熱愛') -- 查詢,從某個位置開始替換某個長度
SELECT SUBSTR('榮哥說堅持就能成功',4,6) -- 返回指定的子字串
SELECT REPLACE('榮哥說堅持就能成功','堅持','努力') -- 替換出現的指定字串
SELECT REVERSE('你愛我') -- 反轉

-- 查詢 姓 周的同學 ,把周替換成張
SELECT REPLACE(studentName,'周','張') FROM student
WHERE studentName LIKE '周%'

-- 時間和日期函式 (記住)
SELECT CURRENT_DATE() -- 獲取當前日期
SELECT LOCALTIME() -- 本地時間
SELECT SYSDATE() -- 系統時間

SELECT YEAR(NOW()) -- 顯示當前年份
SELECT DAY(NOW()) -- 天
SELECT SECOND(NOW()) -- 秒

-- 系統
SELECT VERSION()
SELECT USER()
SELECT SYSTEM_USER()

5.2、聚合函式(常用)
函式名稱描述
count() 計數
sum() 求和
avg() 平均值
max() 最大值
min() 最小值
... ...
5.3資料庫級別的MD5加密(擴充套件)

什麼是MD5

主要增強演算法的複雜性和不可逆性

MD5 不可逆,具體的值的 MD5 是一樣的

MD5 破解網站的原理,背後有一個字典,MD5加密後的值,加密前的值

-- 加密
UPDATE student SET pwd=MD5(pwd) WHERE id=1
UPDATE student SET pwd=MD5(pwd) -- 加密全部的密碼

-- 插入的時候加密
INSERT INTO student (`id`,`name`,`pwd`) VALUES('13','胡',MD5('123456'))

-- 如何校驗:將使用者傳遞進來的密碼,進行md5加密,然後比對加密後的值
SELECT * FROM student WHERE `name` = '胡' AND pwd=MD5('123456')
select總結

6、事務

6.1、什麼是事務

要麼都成功,要麼都失敗

事務原則:ACID原則  原子性,一致性,隔離性,永續性 (髒讀,幻讀。。。)

原子性:要麼都成功,要麼都失敗

一致性:事務前後的資料完整性要保證一致

永續性:事務一旦提交則不可逆,被持久化到資料庫中

隔離性:事務的隔離性是多個使用者併發訪問資料庫時,資料庫為每一個使用者開啟的事務,不能被其他事務的運算元資料所幹擾,多個併發事務之間要相互隔離

-- 模擬轉賬:事務
SET autocommit = 0 -- 關閉自動提交
START TRANSACTION -- 開啟一個事務

UPDATE `account` SET money = money-500 WHERE `name` = 'A' -- A減500
UPDATE `account` SET money = money+500 WHERE `name` = 'B' -- B加500

COMMIT; -- 提交事務,就被持久化了,這時候在按回滾就回不去了
ROLLBACK; -- 回滾

SET autocommit = 1; -- 恢復預設值

7、索引

MySQL官方對索引的定義為:索引(index)是幫助MySQL高效獲取資料的資料結構。
提取句子主幹,就可以得到索引的本質:索引是資料結構
7.1、索引的分類
在一個表中,主鍵索引只能有一個,唯一索引可以有多個
  • 主鍵索引 (PRIMARY KEY)

    • 唯一的標識,主鍵不可重複,只能有一個列作為主鍵

  • 唯一索引(UNIQUE KEY)

    • 避免重複的列出現,唯一索引可以重複,多個列都可以標識位 唯一索引

  • 常規索引 (KEY/INDEX)

    • 預設的, index、key關鍵字來設定

  • 全文索引(FullText)

    • 在特定的資料庫引擎下才有,MyISAM

    • 快速定位資料

8、許可權管理和備份

8.1、使用者管理
SQL yog 視覺化管理

SQL命令操作

使用者表:mysql.user

本質:讀這張表進行增刪改查

-- 建立使用者 create user 使用者名稱 identified by '密碼'
CREATE USER kuangshen IDENTIFIED BY '123456'

-- 修改密碼(修改當前使用者密碼)
SET PASSWORD = PASSWORD('123456')

-- 修改密碼(修改指定使用者密碼)
SET PASSWORD FOR kuangshen = PASSWORD('111111')

-- 重新命名
RENAME USER kuangshen TO zhang

-- 使用者授權 all privileges 全部的許可權, 庫.表
-- all privileges 除了給別人授權,其他都能幹
GRANT USER PRIVILEGES ON *.* TO kuangshen2

-- 查詢許可權
SHOW GRANTS FOR kuangshen2 -- 檢視指定使用者許可權
SHOW GRANTS FOR root@localhost

-- ROOT使用者許可權:GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION

-- 撤銷許可權 revoke 哪些許可權,在哪個庫撤銷,給誰撤銷
REVOKE ALL PRIVILEGES ON *.* FROM kuangshen2

-- 刪除使用者
DROP USER kuangshen
8.2、MySQL備份

為什麼要備份:

  • 保證重要的資料不丟失

  • 資料轉移

MySQL資料庫備份的方式

  • 直接拷貝物理檔案(在date檔案裡面)

  • 在Sqlyog這種視覺化工具中手動匯出

    • 右鍵點選表,選擇備份或匯出

  • 使用命令列匯出 mysqldump 命令列使用(cmd)

# mysqldump -h 主機 -u 使用者名稱 -p 密碼 資料庫 表名 >物理磁碟位置/檔名
mysqldump -hlocalhost -uroot -p123456 school student >d:/a.sql

# mysqldump -h 主機 -u 使用者名稱 -p 密碼 資料庫 表1 表2 表3 >物理磁碟位置/檔名
mysqldump -hlocalhost -uroot -p123456 school student >d:/a.sql

# mysqldump -h 主機 -u 使用者名稱 -p 密碼 資料庫>物理磁碟位置/檔名
mysqldump -hlocalhost -uroot -p123456 school>d:/a.sql

#匯入(先在命令列登入資料庫,然後在use 要匯入的資料庫後在執行以下操作)
#登入的情況中,切換到指定的資料庫
#source 備份檔案
1.source d:/a.sql (推薦使用)
2.mysql -u使用者名稱 -p密碼 庫名< 備份檔案(不推薦)

假設你要備份資料庫,防止資料丟失。

9、規範資料庫設計

9.1、為什麼需要設計

當資料庫比較複雜的時候,我們就需要設計了

糟糕的資料庫設計:

  • 資料冗餘,浪費空間

  • 資料庫插入和刪除都會麻煩、異常【遮蔽使用物理外來鍵】

  • 程式的效能差

良好的資料庫設計:

  • 節省記憶體空間

  • 保證資料庫的完整性

  • 方便我們開發系統

軟體開發中,關於資料庫的設計

  • 分析需求:分析業務和需要處理的資料庫需求

  • 概要設計:設計關係圖E-R圖

9.2、三大正規化

為什麼需要資料規範化?

  • 資訊重複

  • 更新異常

  • 插入異常(無法正常顯示資訊)

  • 刪除異常(丟失有效的資訊)

三大正規化(瞭解)

第一正規化(1NF)

原子性:保證每一列不可再分

第二正規化(2NF)

前提:滿足第一正規化

每張表只描述一件事情

第三正規化(3NF)

前提:滿足第一、er正規化

第三正規化需要確保資料表中的每一列資料都和主鍵直接相關,而不能間接相關。

規範性 和 效能的問題

關聯查詢的表不得超過三張表

  • 考慮商業化的需求和目標,(成本,使用者體驗!)資料庫的效能更加重要

  • 在規範效能的問題的時候,需要適當的考慮以下規範性!

  • 故意給某些增加一些冗餘的欄位。(從多表查詢中變為單表查詢)

  • 故意增加一些計算列(從大資料量降低為小資料量的查詢:索引)