1.存儲過程分爲兩種:函數和過程,使用call命令來調用過程,函數能夠嵌套在一條sql語句中,過程接受參數,函數有返回值。mysql
2.定義一個存儲過程當中的函數:sql
delimiter $$把mysql客戶端命令解析器的結束符號‘;’分號轉換成$$符號,由於在mysql客戶端程序中每條命令的結束是以分號結束的,可是存儲過程當中的函數結束也是使用的分號,爲了在mysql client中逐條編寫存儲過程,須要將解釋器的命令定義爲分號之外的其餘字符。founction shorten有兩個參數,isnull()判斷出入的字符串是否爲空,left將字符串長度從左開始截取爲長度n,concat將多個字符串鏈接成一個字符串。數據庫
執行存儲過程:select name,shorten(name,3) from my_student;函數
建立存儲函數:create function functionname(parameterlist) return datatype [options] sqlcode;存儲過程:create procedure functionname(parameterlist) [options] sqlcode;函數有返回值而過程沒有返回值。.net
刪除sp(存儲過程或函數):drop function|procedure [if exists] name;if exists是可選項,即若是存在就刪除。code
查看sp:show function status;orm
查看sp的代碼:show create function name;blog
調用sp過程:call database.spname();rem
對局部變量進行賦值:set var1=value;select var:=value;select count(*) from student into var;select 2*7 into var;select name,id from my_student where id=1 into @myname,@myid;字符串
3.觸發器:
建立觸發器的命令:
create trigger name before|after update|insert|delete on tablename for each row code;
old.column:返回update和delete在被修改以前的內容。
new.column:返回insert和update在被修改以後的內容。
刪除觸發器:drop [databasename.]triggername;
一個觸發器例子:
create trigger trigger_befor_insert before insert on my_student for each row begin if new.percent<0 or new.percent>1 then set new.percent=0.7;end if;end$$
在此後你沒插入一條數據都會檢查percent字段的值,若是不符合範圍將把他設置成0.7;
在插入一條數據時將auto_increment字段id設置爲了一個比較的值。經過下面命令查看當前的auto_increment的值。
select auto_increment from information_schema.tables where table.schema='數據庫名' and talbe.name='表名';
經過下面語句修改auto_increment 的值:
alter table tablename auto_increment=number;這裏要注意修改的值只能比當前的auto_increment的值大,不然會失敗。