日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql 进阶到高级_mysql的高级进阶(一)

發布時間:2025/4/5 数据库 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql 进阶到高级_mysql的高级进阶(一) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我們將我們的客戶端的編碼設置為utf8,客戶端和客戶端連接設為utf8,表設計為utf8,字段設置成utf8。

如果我們的客戶端是gbk的編碼,那我們就通知mysql服務器客戶端和客戶端連接是gbk的就行了。這樣也不會出現亂碼。

會話變量和全局變量

查看會話變量

show session variables [like ‘%關鍵字%‘]

查看字段的變量名稱select @@session.變量名稱。

指定會話變量的值 set @@session.變量名稱=值 也可以使用set 變量名稱=值

全局變量

全局變量一旦設置在所有的客戶端都有效。

查看全局變量

show global variables [like ‘%關鍵字%‘]

select @@global.變量名稱

指定全局變量的值 set global 變量名稱=值 set @@global.變量名稱=變量值。

用戶定義變量 set @變量名稱=值;比如set name=‘張三‘

存儲過程

存儲過程是為了完成特定功能的sql語句集,經過編譯后存儲在數據庫中,用戶通過指定存儲過程的名稱并給定參數來調用并執行他。有點類似于自定義函數。

優點:

1增強了sql語言的功能和流程性,我們可以完成復雜的判斷和運算

2存儲過程創建完成后,可以多次被調用。

3 存儲過程能實現較快的執行速度,如果一個操作包含大量的事務,那么存儲過程速度要快很多,因為存儲過程是預編譯的,首次運行mysql的優化器會對其進行優化,而批量處理事務每次都要進行編譯和優化,速度相對慢一些。

4 能減少網絡的流量,因為發送的數據少。

5 存儲過程相對來說安全。

存儲過程的存儲步驟

1 首先選中一個數據庫,存儲過程是放在某個數據庫下的。use 數據庫;

2 改變分割符,不要讓;作為執行結束的標記 使用:delimiter $$ 將$$作為sql語句執行的結束符。

3 創建一個存儲過程

create procedure 名稱()

begin

sql語句;

sql語句;

end

$$

4 恢復語句執行的分割符delimiter ;

5 執行存儲過程 call 名稱[(參數1,參數2,...)];

以上是存儲過程的基本用法,當然存儲過程是復雜的,接下來我們通過細節講解來學習存儲過程。

我們可以在存儲過程中定義局部變量,定義局部變量可以使用:

declare 變量名稱 類型(長度),比如:

create procedure 名稱()

begin

declare name varchar(20) default ‘‘;

select name;

end

$$

調用:call 名稱;

我們也能使用

create procedure 名稱()

begin

declare stu_no int;

set stu_no=10;

select stu_no;

end

$$;

調用: call 名稱;

我們在創建存儲過程時可以傳遞參數。

參數的類型:

IN:輸入參數,表示該參數的值必須在調用存儲過程之前指定,在存儲過程中修改的值不能被返回。

create procedure 名稱(IN number int)

begin

select number;

set number=number+1;

select number;

end

$$;

delimiter ;

set @number=3;

call 名稱(@number)

我們在重新查詢number的值

select @number 我們發現number的值還是3,并沒有發生什么改變,由此可見IN類型的參數在執行完存儲過程后他的值并不會發生任何變化,有點類似php的局部變量。

OUT:輸出參數,該值可以在存儲過程內部改變,并且可以返回,往往是用于獲取存儲過程里的參數值。

當我們傳進入一個變量值是存儲過程不認識,在重新賦值后就會有值了。

INOUT:輸入輸出參數,該值可以在調用時指定,并可修改和返回,是in和out的綜合使用。

mysql中流程控制語句之選擇語句

if分支

IF condition1 THEN

要執行的語句;

ELSEIF condition2 THEN

要執行的語句;

ELSE

要執行的語句;

ENDIF

和存儲過程結合

create procedure showage(in age int)

begin

if age>18 then

select "成年人";

else

select "未成年人";

end if;

end

$$

set @age=19;

call showage(@age);

case分支

CASE case_value

WHEN when_value THEN

要執行的語句;

[WHEN when_value THEN 要執行的語句]

[ELSE 要執行的語句]

END CASE

其中case_value參數表示條件判斷變量,when_value 表示變量取值。

create procedure addsalary(IN emno int)

begin

declare add int;

case emno

when 1001 then

set add=100;

when 1002 then

set add=200;

when 1003 then

set add=300;

else

set add=500;

end case;

update salary set money=money+add where emno=emno;

end;

$$

存儲過程的使用。

set @emno=1002;

call addsalary(emno);

我們也可以把控制流程寫到sql語句中

ifnull函數的使用,ifnull(exp1,exp2) 如果exp1為空值,那么返回的結果是exp2,如果exp1不為空,返回的結果就是exp1。

mysql中流程控制語句之循環語句

while語句

create procedure addnum()

begin

declare i int default 1;

declare sum int default 0;

while i < 100 do

set sum=sum+i;

set i=i+1;

end while

select sum;

end;

$$;

調用:call addnum

repeat .....until

create procedure updateGender()

begin

declare imin int default 1;

declare imax int default 1;

select min(emp_no) into imin from employees;

select max(emp_no) into imax from employees;

repeat

if imin % 2=0 then

update employees set gender=‘F‘ where emp_no=imin;

end if;

set imin=imin+1;

until imin >imax;

end repeat;

end;

$$

loop....end loop

create procedure updateHire()

begin

declare imin int default 1;

declare imax int default 1;

select min(emp_no) into imin from employees;

select max(emp_no) into imax from employees;

myloop:loop

if imin % 2=0 then

update employees set hire_date=‘1999-12-11‘ where emp_no=imin;

end if;

set imin=imin+1;

if imin > imax then

leave myloop;

end if;

end loop;

end;

$$

mysql中存儲過程中捕獲錯誤和處理

如果這樣寫存儲過程,會報錯。我們可以捕獲這個錯誤。

存儲過程的管理

show procedure status where db="庫名";顯示我們的數據庫下有那些存儲過程。

查看數據庫下存儲過程的列表

use 數據庫

select specific_name from mysql.proc;

查看存儲過程的創建過程

show create procedure 名稱

select specifie_name,body from mysql.proc where specific_name="名稱";

刪除存儲過程

drop procedure if exists 名稱

存儲函數

首先查看是否已經開啟了創建函數的功能

show variables like "%fun%";

如果值為off,那么需要開啟

set global log_bin_trust_function_creators=1;

創建函數的語法

create function 函數名稱(變量1,變量2)

returns 數據類型

begin

執行的程序的代碼

return 數據;

end;

求兩個數的和

可以通過show create function 函數名稱 可以看見創建的代碼。

可以通過drop function if exists 函數名稱;

下面的這個函數可以判斷用戶輸入用戶名稱和密碼是否登錄成功。

存儲函數和存儲過程的區別

我們的存儲函數必須要有返回值。

總結

以上是生活随笔為你收集整理的mysql 进阶到高级_mysql的高级进阶(一)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。