mysql複合語句、儲存過程、遊標
一、概念:
1、mysql複合語句:必須放在儲存過程或者函式或者其他資料庫物件中
2、儲存過程:一組SQL語句組成,可以帶引數,用於實現特定功能
BEGIN
#Routine body goes here...
END;
放在BEGIN……END中的語句就是複合語句
二、複合語句的使用
1、宣告變數
1)使用關鍵字declare,寫法:declare 變數名稱 變數型別
declare i int;#定義一個整型的變數i
declare name varchar(20);
注意:變數的宣告必須寫在其他複合語句之前
2)宣告變數的同時制定預設值,使用關鍵字declare...default:
declare address varchar(50) default '成都';
3)定義全域性變數使用@,全域性變數是同一個連線不同查詢都可以使用的變數。
<span style="font-size:12px;">[email protected]=1;//定義全域性變數x,並賦初值</span>
2、給變數賦值,使用關鍵字set
set i=100;
set name='趙文卓';
3、分支語句
1)if-else-then語句。
注意:每個if需要使用end if結束條件。if i>90 && i<100 then set result='優'; else if i>80 then set result='良'; else set result='及格'; end if; end if;#注意使用end if結束
2)case when
select address as '地點',
case address
when '重慶' then '火鍋'
when '成都' then '肥腸粉'
when '上海' then '甜品'
end
as '特產'
from employee;
4、 迴圈語句
1)while迴圈
2)loop迴圈declare tem_salary int; declare i int; declare sum int; #查詢salary賦值到tem_salary select salary into tem_salary from employee where id=101; while tem_salary<1000000 do set tem_salary=tem_salary+5000; end while;
loop1:loop#loop1是迴圈的標籤
set tem_salary=tem_salary-2000;#迴圈體
if tem_salary>500000 then
iterate loop1;#iterate讓迴圈繼續
end if;
leave loop1;#leave讓迴圈結束
end loop;
update employee set salary=tem_salary where id=101;
3)repeat迴圈
set i=1;
set sum=0;
repeat #重複執行以下語句,直到i>10為止
set i=i+1;
set sum=sum+i;
until i>10
end repeat;
5、異常處理,SQL使用sqlstate:標準SQL的錯誤程式碼,由5位數字組成。mysql特有的錯誤程式碼,mysql_error_code mysql由4位組成,一般使用sqlstate。
BEGIN
#如果出現23000異常,則把全域性變數x設定為1,異常處理程式,出了異常就會執行的程式碼
#出了異常就繼續
declare continue handler for sqlstate '23000' [email protected]=1;
#出現異常就退出
declare exit handler for sqlstate 'HY000' [email protected]=1;
set @y=1;
insert into employee values(125,'松子',27,15000,'上海',1001,107);
set @y=2;
insert into employee values(125,'松子',27,15000,'上海',1001,107);
set @y=3;#如果異常處理成功,則會處理該行程式碼
END
更多sqlstate,標準SQL的錯誤程式碼參考mysql官網:http://dev.mysql.com/doc/refman/5.7/en/error-messages-server.html三、遊標的使用
1、概念:遊標,存放結果集。
2、遊標的使用步驟:
1)宣告遊標:declare 遊標名稱 cursor for 查詢結果集;
2)開啟遊標:open 遊標名稱;
3)使用遊標(遊標本身不帶迴圈),使用fetch一次取遊標中一行資料存入臨時變數中:fetch 遊標名稱 into 臨時變數集合;
4)關閉遊標: close 遊標名稱;
參考程式碼:
BEGIN
declare c_id int;#臨時變數
declare c_salary int;#臨時變數
declare done int default false;#done表示是否有資料
#1 宣告遊標 查詢employee中所有記錄修改前的id,salary
declare c1 cursor for select id,salary from employee;
#當遊標資料獲取完畢,丟擲異常,把結束標誌設定為true
declare continue handler for not found
set done=true;
#2 開啟遊標
open c1;
#3 使用遊標,遊標本身不帶迴圈
loop1:loop
if done THEN#如果結束標誌為true則結束迴圈
leave loop1;
end if;
fetch c1 into c_id,c_salary;#fetch一次取遊標中一行資料存入臨時變數中
#根據當前的c_id 為當前資料的salary加500
update employee set salary=c_salary+500 where id=c_id;
end loop loop1;
# 關閉遊標
close c1;
END
四、儲存過程,實現特定功能一組SQL語句組成。
1、不帶引數的儲存過程
1)使用SQL建立不帶引數的儲存過程
create procedure getEmp()
BEGIN
#不帶引數的儲存過程
select * from employee;
END;
2)呼叫不帶引數的儲存過程
call getEmp();
2、帶引數的儲存過程
1)儲存過程的引數分為三種:
a)in:傳入引數,不會返回資料。
b)out:傳出引數,返回資料給呼叫的方法。
c)inout:傳入,傳出引數。
2)使用SQL建立帶引數的儲存過程,用法參考:CREATE PROCEDURE calcs(IN c_id int,OUT c_name varchar(20),INOUT c_salary int)
BEGIN
#將查詢結果放入傳出引數,條件使用的傳入引數
select name into c_name from employee where id=c_id;
#將傳入的c_salary加上1000,然後存入傳出引數
select salary+c_salary into c_salary from employee where id=c_id;
END;
3)呼叫帶引數的儲存過程:set @c_id=101;#傳入引數,呼叫完後不再使用
set @c_salary=5000;#傳入傳出引數,呼叫完後可以接受值
call calcs(@c_id,@c_name,@c_salary);
3)驗證結果:
select @c_name,@c_salary;
相關推薦
mysql複合語句、儲存過程、遊標
一、概念: 1、mysql複合語句:必須放在儲存過程或者函式或者其他資料庫物件中 2、儲存過程:一組SQL語句組成,可以帶引數,用於實現特定功能 BEGIN #Routine body goes here... END;放在BEGIN……END中的語句就是複合語句 二、
mysql 初級篇(三) 觸發器、儲存過程、遊標
mysql 初級篇(三) 觸發器、儲存過程、遊標 觸發器triggerCreat trigger buggoodAfterInsertOn ordFor each rowBeginUpdate goods set num=num-new.much where id=new.gidEnd
初學mysql(十)-資料庫之儲存過程、函式與遊標-自定義函式和流程控制(下)
上一篇部落格講了儲存過程、函式、以及遊標,這一篇部落格接著上一篇部落格來說。首先說說mysql資料庫中的流程控制及自定義函式的使用。 自定義函式: 根據所需要的功能,使用流程控制來完成所需要的功能,完成功能的程式碼就稱為自定義函式。要想完成自定義函式就必須學會流程控制的使
MySQL 第八篇:自定義函式、儲存過程、遊標
本篇內容由猿道教育的課程內容整理而來。 我把MySQL的內容整理成9篇部落格,學完這9篇部落格雖不能說能成為大神,但是應付一般中小企業的開發已經足夠了,有疑問或建議的歡迎留言討論。 自定義函式 一、函式的概念與定義 1、理解函式 函式可以看作是
Mysql的檢視、儲存過程、函式、索引全解析
檢視是查詢命令結果構成的一個虛擬表(非真實存在),其本質是【根據SQL語句獲取動態的資料集,併為其命名】,使用者使用時只需使用【名稱】即可獲取結果集合,並可以當作表來查詢使用。 1建立檢視 --格式:CREATE VIEW 檢視名稱 AS SQL語句 CREATE VIEW v1 AS S
mysql-檢視、觸發器、事務、儲存過程、函式
目錄 檢視 觸發器 事務 儲存過程 流程控制 一、檢視 檢視是由查詢結果構成的一張虛擬表,和真實的表一樣,帶有名稱的列和行資料 強調:檢視是永久儲存的,但是檢視儲存的不是資料,只是一條sql語句 檢視的特點: 檢視的列可以來自不同的表,是表的抽象和邏輯意義上建立的新關係。
mysql資料庫學習11-儲存過程、函式、觸發器
儲存的程式 ======================================== * 資料庫中儲存的程式,對資料進行運算處理 * 儲存過程 * 函式 * 觸發器 會話變數
MySQL:檢視、觸發器、儲存過程、事務
檢視: 檢視,虛擬表 建立虛擬表: # 語法: # create view 虛擬表名稱 as 虛擬表; create view course_and_teacher as select * from course inner join teacher on course.teacher_id =
【轉】MySQL資料庫 外來鍵、檢視、儲存過程、觸發器的優缺點
https://www.yiibai.com/mysql/introduction-sql-views.html 檢視 使用資料庫檢視的優點 資料庫檢視允許簡化複雜查詢:資料庫檢視由與許多基礎表相關聯的SQL語句定義。 您可以使用資料庫檢視來隱藏終端使用者和外部應用
MySql—檢視、函式、儲存過程、觸發器
MySql高階—檢視、函式、儲存過程、觸發器 目錄一、檢視 1 一、檢視 1、檢視的定義 檢視的定義: 檢視是由查詢結果形成的一張虛擬表,是表通過某種運算得到的一個投影。 同一張表可以建立多個檢視 建立檢視的語法: create view view_name as select 語句 說明:
遊標、例外、儲存過程、儲存函式、java呼叫儲存過程、觸發器(Oracle之二)
--遊標(游標) 一般用於多行資料 語法:cursor 遊標名稱 (引數名 引數型別 ..) is select語句 --操作遊標 open 遊標名; --開啟遊標 loop fetch 遊標名
mysql 神器 if 語句,儲存過程或遊標
BEGIN declare key_list varchar(255) default ''; declare mykey varchar(255) default ''; declare int_flag int default 0; declare done int
mysql筆記三-----sql儲存過程、事務的隔離級別和sql各查詢的區別、防黑
儲存過程 ※※儲存過程※※※ 定義: create procedure 過程名(引數) begin 多條sql語句 end 呼叫: call 過程名(實參) 例項1--無參的儲存過程: △小細節:要把預設的語句結束“;”號改成其它如“$$”,
我的Python成長之路--Day48--mysql高階(檢視、觸發器、事物、儲存過程、函式、流程控制、資料備份與恢復)
目錄 1、檢視 2、觸發器 3、事物 自定義函式 1、檢視 1.1、什麼是檢視 檢視是一張表或者多張表的查詢結果構成的一張虛擬表
MySQL觸發器、儲存過程、自定義函式、檢視 常用SQL
1.建立一個userinfo表新增記錄時的觸發器 將新增日誌加入到userinfolog 2.建立一個向userinfo表新增記錄的儲存過程 3.根據userinfo表的出生日期欄位 我們將建立一個簡單算得年齡的自定義函式 4.建立一個userinfo的檢視 呼叫年齡函式
檢視、觸發器、事務、儲存過程、函式,流程控制
檢視 檢視是一個虛擬表(非真實存在),其本質是【根據SQL語句獲取動態的資料集,併為其命名】,使用者使用時只需使用【名稱】即可獲取結果集,可以將該結果集當做表來使用。 使用檢視我們可以把查詢過程中的臨時表摘出來,用檢視去實現,這樣以後再想操作該臨時表的資料時就無需重寫複雜的sql了,直接去檢視中查詢即可,
Oracle刪除當前使用者下的所有表、檢視、序列、函式、儲存過程、包(轉)
最近在用oracle,發現了一個批量刪除資料庫中的各種結構的好方法。 --delete tables select 'drop table ' ||&
子查詢、儲存過程、檢視
子查詢:把內層的查詢結果供外層使用,先執行內層,再執行外層,先做內層,再做外層 例:查詢比Tom小的所有學生的資訊 SELECT * FROM student WHERE birthday> ( SELECT birthday FROM student W
表、檢視、儲存過程、函式、觸發器、事件
儲存過程(Stored Procedure)是一組為了完成特定功能的SQL語句集,經編譯後儲存在資料庫中。使用者通過指定儲存過程的名字並給出引數(如果該儲存過程帶有引數)來執行它。儲存過程是資料庫中的一個重要物件,任何一個設計良好的資料庫應用程式都應該用到儲存過程。函式l過程不必返回值l函式必須返回值l過程可
SqlServer中檢視、儲存過程、事務的使用。
前言 熟悉SqlServer中檢視、儲存過程、事務的使用會在操作資料時帶來更大的方便。 正文 檢視-VIEW VIEW介紹 定義: 檢視(VIEW)虛擬表,一般是不儲存資料的,但是Sqlserver的索引檢視例外(儲存資料)