天天看點

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

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總結
MySQL函數、事務、索引、權限管理和備份、規範資料庫設計

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 可視化管理      
MySQL函數、事務、索引、權限管理和備份、規範資料庫設計
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範式

第三範式需要確定資料表中的每一列資料都和主鍵直接相關,而不能間接相關。

規範性 和 性能的問題

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

  • 考慮商業化的需求和目标,(成本,使用者體驗!)資料庫的性能更加重要
  • 在規範性能的問題的時候,需要适當的考慮以下規範性!
  • 故意給某些增加一些備援的字段。(從多表查詢中變為單表查詢)
  • 故意增加一些計算列(從大資料量降低為小資料量的查詢:索引)