mysql數據庫—函數、數據備份、流程控制


函數

內置函數

日期相關:

字符串相關:

數字相關:

其他函數:

當然也包括之前學習的聚合函數

自定義函數

語法:

CREATE FUNCTION f_name(paramters)
returns dataType;
return value;

說明:
paramters 只能是in 輸入參數 參數名 類型
必須有返回值
不能呢加begin 和end
returns 后面是返回值的類型 這里不加分號
return 后面是要返回的值

案例:
將兩數相加

create function addfuntion(a int,b int)
returns int return a + b;
#執行函數
select addfuntion(1,1);

注意:

函數只能返回一個值
函數一般不涉及數據的增刪改查 就是一個通用的功能
調用自定義的函數 與調用系統的一致 不需要call 使用select 可獲得返回值
函數中不能使用sql語句
就像在java中不能識別sql語句一樣

數據備份與恢復

使用mysqldump程序進行備份

mysqldump -u -p db_name [table_name,,,] > fileName.sql

可以選擇要備份哪些表 如果不指定代表 全部備份

#示例:
#單庫備份
mysqldump -uroot -p123 db1 > db1.sql
mysqldump -uroot -p123 db1 table1 table2 > db1-table1-table2.sql

#多庫備份
mysqldump -uroot -p123 --databases db1 db2 mysql db3 > db1_db2_mysql_db3.sql

#備份所有庫
mysqldump -uroot -p123 --all-databases > all.sql

使用 mysql 進行恢復

1.退出數據庫后

mysql -u -p < filename.sql;

2.不用退出數據庫

2.1 創建空數據庫

2.2選擇數據庫

2.3然后使用source filename; 來進行還原

use db1;
source /root/db1.sql

數據庫遷移

務必保證在相同版本之間遷移
# mysqldump -h 源IP -uroot -p123 --databases db1 | mysql -h 目標IP -uroot -p456

流程控制

if語句的使用

if 條件 then
語句;
end if;
第二種 if elseif
if 條件 then
語句1;
elseif 條件 then
語句2;
else 語句3;
end if;

案例:編寫過程 實現 輸入一個整數type 范圍 1 - 2 輸出 type=1 or type=2 or type=other;

create procedure showType(in type int,out result char(20))
begin
if type = 1 then 
set result = "type = 1";
elseif type = 2 then 
set result = "type = 2";
else 
set result = "type = other";
end if;
end

CASE 語句

大體意思與Swtich一樣的 你給我一個值 我對它進行選擇 然后執行匹配上的語句
語法:

create procedure caseTest(in type int)
begin
CASE type 
when 1  then select "type = 1";
when 2  then select "type = 2";
else select "type = other";
end case;
end

定義變量

declare 變量名 類型 default 值;
例如: declare i int default 0;

WHILE循環

循環輸出10次hello mysql
create procedure showHello()
begin 
declare i int default 0;
while  i < 10 do
select "hello mysql";
set i  = i + 1;
end while;
end

LOOP循環的

沒有條件 需要自己定義結束語句
語法:

輸出十次hello mysql;
create procedure showloop()
begin 
declare i int default 0;
aloop: LOOP
select "hello loop";
set i = i + 1;
if i > 9 then leave aloop;
end if;
end LOOP aloop;
end

REPEAT循環

#類似do while
#輸出10次hello repeat
create procedure showRepeat()
begin
declare i int default 0;
repeat
select "hello repeat";
set i = i + 1;
until i > 9
end repeat;
end

#輸出0-100之間的奇數
create procedure showjishu()
begin
declare i int default 0;
aloop: loop
set i = i + 1;
if i >= 101 then leave aloop; end if;
if i % 2 = 0 then iterate aloop; end if;
select i;
end loop aloop;
end


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM