1. 程式人生 > 其它 >第七章 資料庫 附件-MySQL的安裝與使用

第七章 資料庫 附件-MySQL的安裝與使用

一、MySQL安裝與使用

1、服務端

1.1、服務端-安裝步驟

1. 安裝檔案 mysql-5.5.62-winx64.msi 上,滑鼠右鍵 2. 安裝
準備安裝 ......
1. 下一步
1. 同意安裝協議 2. 下一步
1. 典型安裝 注意:為了統一教學演示路徑,MySQL 推薦預設安裝到 C 盤下。 (安裝完的檔案路徑不要再次修改,例如:將資料夾名字修改為中文或者變動檔案存放位置)
1. 安裝
安裝過程 ......
1. 確認 啟動 MySQL 配置嚮導 選項為勾選狀態 2. 安裝步驟完成
1.2、服務端-配置步驟

1. 下一步
1. 詳細配置 2. 下一步
1. 開發者機器(裝置型別) 2. 下一步
1. 多功能資料庫 (資料庫型別) 2. 下一步
1. 下一步
1. 決策支援(連線數量) 2. 下一步
1. MySQL 預設的埠號為: 3306 2. 為此埠新增防火牆例外(新增 MySQL 埠號到防火牆的白名單,允許被連線使用) 3. 下一步
1. 手動選擇預設字符集 2. 字符集: utf8 (防止中文亂碼) 3. 下一步
1. 預設服務名: MySQL 2. 允許服務隨系統開機自動啟動 3. 新增 MySQL 到系統環境變數 (該操作確保可以在系統內的任意路徑下,都可以使用 命令列 連線 MySQL)
1. 設定 MySQL 預設使用者的密碼 (預設使用者名稱為 root ,此處不需要設定使用者名稱,直接設定密碼即可。例 如: 123456 ) 2. 再次輸入密碼(目的:確認輸入的密碼無誤) 3. 允許遠端連線訪問 MySQL (如果不勾選此項,則從外部無法連線 MySQL) 4. 下一步
1. 執行(配置)
執行過程 ......
1. 此處全部為 勾選狀態 ,才為配置成功! 2. 配置步驟結束
1.3、MySQL 服務-啟動/停止/重啟

  1. 開始 選單
  2. 搜尋 服務
  3. 搜尋結果中選擇 服務
  1. 安裝完的 MySQL 服務預設為: 自動 和 已啟動 狀態
  2. 可以 停止 服務, 重啟動 服務(暫停功能沒有使用場景)
1.4、MySQL 服務-修改設定

  1. MySQL 服務名上
  2. 滑鼠右鍵 -> 屬性
  1. 設定 啟動型別 (預設為 自動 )
1.5、MySQL 配置檔案位置
注意:MySQL 配置檔案的位置很重要,MySQL 的相關設定都和配置檔案有關,例如:修改預設使用者 root的密碼

2、客戶端

2.1、MySQL 自帶命令列客戶端的使用

  1. 開始 選單
  2. 搜尋 mysql
  3. 搜尋結果中選擇 MySQL 5.5 Command Line Client
  1. 輸入配置 MySQL 時設定的密碼
注意:如果輸入完密碼, 命令列 視窗 閃退 ,請確認 密碼是否正確 或 MySQL 服務是否為開啟狀態
  1. 輸入密碼後,按 回車鍵 ,如果顯示如圖的 mysql> ,則為登入 MySQL 成功
  1. 可以輸入 exit 或 quit 命令,退出 MySQL 命令列客戶端
2.2、MySQL 第三方客戶端的使用
注意:
  1. 由於 MySQL 自帶的命令列客戶端 易用性 不強,因此在日常工作中多用 第三方 的 影象化客戶端 ,例如: Navicat
  2. Navicat 客戶端的安裝與啟用步驟,請參考 Navicat 12 Windows版本的安裝與啟用步驟 文件,此處不再贅述。

二、MySQL內建函式

1、字串函式

  • 拼接字串concat(str1,str2...)

select concat(12,34,'ab');
  • 包含字元個數length(str)

select length('abc');
  • 擷取字串

    • left(str,len)返回字串str的左端len個字元

    • right(str,len)返回字串str的右端len個字元

    • substring(str,pos,len)返回字串str的位置pos起len個字元

select substring('abc123',2,3);
  • 去除空格

    • ltrim(str)返回刪除了左空格的字串str

    • rtrim(str)返回刪除了右空格的字串str

select ltrim(' bar '); 
  • 大小寫轉換,函式如下

    • lower(str)

    • upper(str)

select lower('aBcD');

2、數字函式

  • 求四捨五入值round(n,d),n表示原數,d表示小數位置,預設為0
select round(1.6); 
  • 求x的y次冪pow(x,y)
select pow(2,3); 
  • 獲取圓周率PI()
select PI();
  • 隨機數rand(),值為0-1.0的浮點數
select rand(); 

3、日期時間函式

  • 當前日期current_date()
select current_date(); 
  • 當前時間current_time()
select current_time(); 
  • 當前日期時間now()
select now(); 
  • 日期格式化date_format(date,format)
  • 引數format可選值如下
%Y 獲取年,返回完整年份
%y 獲取年,返回簡寫年份
%m 獲取月,返回月份
%d 獲取日,返回天值
%H 獲取時,返回24進位制的小時數
%h 獲取時,返回12進位制的小時數
%i 獲取分,返回分鐘數
%s 獲取秒,返回秒數
  • 例:將使用-拼接的日期轉換為使用空格拼接
select date_format('2016-12-21','%Y %m %d'); 

4、流程控制函式

  • case語法:等值判斷
  • 說明:當值等於某個比較值的時候,對應的結果會被返回;如果所有的比較值都不相等則返回else的結果;如 果沒有else並且所有比較值都不相等則返回null
casewhen 比較值1 then 結果1 when 比較值2 then 結果2 ... else 結果 end 
例:
select case 1 when 1 then 'one' when 2 then 'two' else 'zero' end as result;

5、自定義函式

建立

  • 語法如下
delimiter $$ 
create function 函式名稱(引數列表) returns 返回型別

begin 
sql語句 
end 
$$
delimiter ;
  • 說明:delimiter用於設定分割符,預設為分號
  • 在“ SQL 語句”部分編寫的語句需要以分號結尾,此時回車會直接執行,所以要建立儲存過程前需要指定其它 符號作為分割符,此處使用//,也可以使用其它字元

示例

  • 要求:建立函式my_trim,用於刪除字串左右兩側的空格
  • step1:設定分割符
delimiter $$ 
  • step2:建立函式
create function my_trim(str varchar(100)) returns varchar(100) 
begin 
return ltrim(rtrim(str)); 
end 
$$ 
  • step3:還原分割符
delimiter ; 

使用自定義函式

select ' abc ',my_trim(' abc ') 

三、MySQL儲存過程

儲存過程,也翻譯為儲存程式,是一條或者多條 SQL 語句的集合

1、建立

  • 語法如下
delimiter // 
create procedure 儲存過程名稱(引數列表) 
begin 
sql語句 
end 
//
delimiter ; 
  • 說明:delimiter 用於設定分割符,預設為分號
  • 在“ SQL 語句”部分編寫的語句需要以分號結尾,此時回車會直接執行,所以要建立儲存過程前需要指定其它 符號作為分割符,此處使用//,也可以使用其它字元

2、示例

  • 要求:建立查詢過程,查詢學生資訊
  • step1:設定分割符
delimiter // 
  • step2:建立儲存過程
create procedure proc_stu() 
begin 
select * from students; 
end 
// 
  • step3:還原分割符
delimiter ;

3、呼叫

  • 語法如下
call 儲存過程(引數列表); 

呼叫儲存過程proc_stu 
call proc_stu(); 
  • 儲存過程和函式都是為了可重複的執行操作資料庫的 SQL 語句的集合。
  • 儲存過程和函式都是一次編譯,就會被快取起來,下次使用就直接命中快取中已經編譯好的 SQL 語句,不需要重複編譯
  • 減少網路互動,減少網路訪問流量

四、事務

1、為什麼要有事務

  • 事務廣泛的運用於訂單系統、銀行系統等多種場景

  • 例如:A使用者和B使用者是銀行的儲戶,現在A要給B轉賬500元,那麼需要做以下幾件事:

    • 1. 檢查A的賬戶餘額>500元;
    • 2. A 賬戶中扣除500元;
    • 3. B 賬戶中增加500元;
  • 正常的流程走下來,A賬戶扣了500,B賬戶加了500,皆大歡喜。那如果A賬戶扣了錢之後,系統出故障了 呢?A白白損失了500,而B也沒有收到本該屬於他的500。以上的案例中,隱藏著一個前提條件:A扣錢和B 加錢,要麼同時成功,要麼同時失敗。事務的需求就在於此
  • 所謂事務,它是一個操作序列,這些操作要麼都執行,要麼都不執行,它是一個不可分割的工作單位。例如, 銀行轉帳工作:從一個帳號扣款並使另一個帳號增款,這兩個操作要麼都執行,要麼都不執行。所以,應該把 他們看成一個事務。事務是資料庫維護資料一致性的單位,在每個事務結束時,都能保持資料一致性

2、事務命令

  • 要求:表的引擎型別必須是 innodb 型別才可以使用事務,這是 MySQL 表的預設引擎
  • 查看錶的建立語句,可以看到 engine=innodb
show create table students;
  • 修改資料的命令會觸發事務,包括insert、update、delete
  • 開啟事務,命令如下:
    • 開啟事務後執行修改命令,變更會維護到本地快取中,而不維護到物理表中
begin; 
  • 提交事務,命令如下
    • 將快取中的資料變更維護到物理表中
commit; 
  • 回滾事務,命令如下:
    • 放棄快取中變更的資料
rollback; 

3、提交事務

  • 為了演示效果,需要開啟兩個命令列視窗,使用同一個資料庫,操作同一張表

step1:查詢

  • 命令列1和命令列2:查詢學生資訊
select * from students where name in('大喬','小喬');

step2:修改資料

  • 命令列1:開啟事務,修改資料
begin; 
update students set age=age-5 where name='大喬'; 
update students set age=age+5 where name='小喬';
  • 命令列1:查詢資料,發現數據已經變化
select * from students where name in('大喬','小喬');

step3:查詢

  • 命令列2:查詢資料,發現數據沒有變化
select * from students where name in('大喬','小喬'); 

step4:提交

  • 命令列1:完成提交
commit; 

step5:查詢

  • 命令列2:查詢資料,發現數據已經變化
select * from students where name in('大喬','小喬');

4、回滾事務

  • 為了演示效果,需要開啟兩個命令列視窗,使用同一個資料庫,操作同一張表

step1:查詢

  • 命令列1和命令列2:查詢學生資訊
select * from students where name in('大喬','小喬'); 

step2:修改資料

  • 命令列1:開啟事務,修改資料
begin; 
update students set age=age-5 where name='大喬'; 
update students set age=age+5 where nama='小喬';
  • 命令列1:查詢資料,發現數據已經變化
select * from students where name in('大喬','小喬');

step3:查詢

  • 命令列2:查詢資料,發現數據沒有變化
select * from students where name in('大喬','小喬'); 

step4:回滾

  • 命令列1:完成回滾
rollback;

step5:查詢

  • 命令列1:查詢資料,發現數據恢復為開啟事務前的狀態
select * from students where name in('大喬','小喬'); 

五、檢視

  • 對於複雜的查詢,在多個地方被使用,如果需求發生了改變,需要更改sql語句,則需要在多個地方進行修 改,維護起來非常麻煩
  • 解決:定義檢視
  • 檢視本質就是對查詢的封裝
  • 定義檢視,建議以 v_ 開頭
語法: 
create view 檢視名稱 as select 語句; 
  • 例:建立檢視,查詢學生對應的成績資訊
create view v_stu_score_course as 
select
    stu.*,cs.courseNo,cs.name courseName,sc.score 
from
    students stu 
inner join scores sc on stu.studentNo = sc.studentNo 
inner join courses cs on cs.courseNo = sc.courseNo 
  • 使用:檢視的用途就是查詢
select * from v_stu_score_course; 
  • 檢視檢視:查看錶會將所有的檢視也列出來
show tables; 
  • 刪除檢視
drop view 檢視名稱; 
例:
drop view v_stu_score_course; 

六、使用者密碼

1、修改密碼

  • 使用root登入,修改mysql資料庫的user表
    • 使用password()函式進行密碼加密
    • 注意修改完成後需要重新整理許可權
use mysql; 

update user set password=password('新密碼') where user='使用者名稱'; 

例:
update user set password=password('123') where user='root'; 

重新整理許可權:flush privileges; 

2、忘記root賬號密碼怎麼辦

1、配置mysql登入時不需要密碼,修改配置檔案
  • Centos中:配置檔案位置為/data/server/mysql/my.cnf
  • Windows中:配置檔案位置為C:\Program Files (x86)\MySQL\MySQL Server 5.1\my.ini

修改,找到mysqld,在它的下一行,新增skip-grant-tables

[mysqld] 
skip-grant-tables 
2、重啟mysql,免密碼登入,修改mysql資料庫的user表
use mysql; 

update user set password=password('新密碼') where user='使用者名稱';
 
例:

update user set password=password('123') where user='root'; 

重新整理許可權:flush privileges; 
3、還原配置檔案,把剛才新增的skip-grant-tables刪除,重啟

七、MySQL日誌

記錄 MySQL 所有的操作日誌(包括增刪改查),不過它會耗費資料庫5%-10的效能,所以一般沒特別需要時不開啟此功能,一般在查詢問題時才打開,完成後及時關閉。

1、客戶端連線 MySQL
2、查詢日誌是否開啟: show variables like 'general%';

3、開啟日誌: set global general_log = 1;

4、開啟對應目錄下的日誌檔案,執行增刪改查等sql語句後,觀察日誌檔案的變化

注意:不需要使用日誌時及時關閉日誌: set global general_log = 0;