MySQL---資料庫從入門走向大神系列(五)-儲存過程

weixin_33766168發表於2016-08-08

本篇部落格講解:
自動增長列、欄位值唯一性約束、儲存過程、區分大小寫的查詢!

自動增長列、欄位值唯一性約束

create table aa(
    id int auto_increment primary key,
    sname varchar(32) unique
);
insert into aa values(5,'abc');

建立一個自動增長的id屬性(最開始不設定就從0開始增長)
(後面的id如果有值了,如果新增資料時沒有設定id,MySQL就會用最大的id加1做為最新的id)
注意:auto_increment 在MySQL中支援,其他的資料庫設定自動增長列中關鍵字不一樣。
unique 對sname進行唯一性約束,也就是不能有相同的sname(可以有一個值是null)。

儲存過程:

其實這個SQL中的儲存過程很像Java中的定義函式,呼叫函式。

首先看定義:

create procedure 過程名(引數...)
begin
    SQL語句...
end

呼叫:

call 過程名(實參)

有一個需要注意的地方:
在定義前,需要先把預設的語句結束’;’號改成其它,如’&&’,這樣儲存過程中定義的分號就不會被看成是語句結束(否則會直接被提交)。
在定義完之後,還要把’;’還原成預設的結束符。

例項一:無參的儲存過程

delimiter &&
create procedure p1()
begin
    insert into stud values('P100','小李',43);
    select * from stud;
end&&
delimiter ;

call p1;/*呼叫p1()中的SQL語句,如果沒有call之前,p1()中的SQL語句是沒有被執行的*/

例項二:有參的儲存過程

delimiter &&
create procedure p2(in id varchar(32),in sname varchar(32),in age int)
begin
    insert into stud values(id,sname,age);
    select * from stud;
end &&
delimiter ;

call p2('P1007','小白',25);
call p2('P1008','小麗',28);

例項三:有返回值的儲存過程

delimiter &&
create procedure p3(in id varchar(32) ,in sname varchar(32),in age int ,out num int)
begin
    insert into stud values(id,sname,age);
    select * from stud;
    select count(*) into num from stud;
end&&
delimiter ;

call p3('P012','小小五',27, @num);
/*呼叫且用num接收結果*/

select @num; /*顯示使用者變數num*/

系統變數名稱:@@變數名
使用者變數名稱:@變數名

區分大小寫的查詢:

因為MySQL的查詢是預設不區分大小寫的:
如果有些時候需要區分大小寫,我們就需要binary這個關鍵字了。
可以這樣用,在stud表中查詢sname中帶’j’ /’J’:
先不寫binary進行查詢:

select * from stud where sname like 'J%';

寫binary進行查詢:

select * from stud where binary sname like 'J%';

相關文章