程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySql5.0基礎

編輯:關於MYSQL數據庫

CREATE PROCEDURE
建立一個存放在MySQL數據庫的表格的存儲過程

CREATE FUNCTION
建立一個用戶自定義的函數,尤其是返回數據的存儲過程。

ALTER PROCEDURE
更改用CREATE PROCEDURE 建立的預先指定的存儲過程,其不會影響相關存儲過程或存儲功能。.

ALTER FUNCTION
更改用CREATE FUNCTION 建立的預先指定的存儲過程,其不會影響相關存儲過程或存儲功能。.

DROP PROCEDURE
從MySQL的表格中刪除一個或多個存儲過程。

DROP FUNCTION
從MySQL的表格中刪除一個或多個存儲函數。

SHOW CREATE PROCEDURE
返回使用CREATE PROCEDURE 建立的預先指定的存儲過程的文本。這一聲明是SQL:2003規范的一個MySQL擴展。

SHOW CREATE FUNCTION
返回使用CREATE  FUNCTION建立的預先指定的存儲過程的文本。這一聲明是SQL:2003規范的一個MySQL擴展。

SHOW PROCEDURE STATUS
返回一個預先指定的存儲過程的特性,包括名稱、類型、建立者、建立日期、以及更改日期。這一聲明是SQL:2003規范的一個MySQL擴展。

SHOW FUNCTION STATUS
返回一個預先指定的存儲函數的特性,包括名稱、類型、建立者、建立日期、以及更改日期。這一聲明是SQL:2003規范的一個MySQL擴展。

CALL
調用一個使用CREATE PROCEDURE建立的預先指定的存儲過程。

BEGIN ... END
包含一組執行的多聲明。

DECLARE
用於指定當地變量、環境、處理器,以及指針。

SET
用於更改當地和全局服務器變量的值。

SELECT ... INTO
用於存儲顯示變量的縱列。

OPEN
用於打開一個指針。

FETCH
使用特定指針來獲得下一列。

CLOSE
用於關閉和打開指針。

IF
一個An if-then-else-end if 聲明。

CASE ... WHEN
一個 case聲明的結構

LOOP
一個簡單的循環結構;可以使用LEAVE 語句來退出。

LEAVE
用於退出IF,CASE,LOOP,REPEAT以及WHILE 語句。

ITERATE
用於重新開始循環。

REPEAT
在結束時測試的循環。

WHILE
在開始時測試的循環。

RETURNS
返回一個存儲過程的值。

 

MySQL 5.0支持存儲過程語句。

 

一.創建存儲過程

1.基本語法:

create procedure sp_name()
begin
.........
end

2.參數傳遞

二.調用存儲過程

1.基本語法:call sp_name()
注意:存儲過程名稱後面必須加括號,哪怕該存儲過程沒有參數傳遞

三.刪除存儲過程

1.基本語法:
drop procedure sp_name//
2.注意事項
(1)不能在一個存儲過程中刪除另一個存儲過程,只能調用另一個存儲過程

四.區塊,條件,循環

1.區塊定義,常用
begin
......
end;
也可以給區塊起別名,如:
lable:begin
...........
end lable;
可以用leave lable;跳出區塊,執行區塊以後的代碼
2.條件語句

if 條件 then
statement
else
statement
end if;

3.循環語句
(1).while循環

[label:] WHILE expression DO

statements

END WHILE [label] ;

 

(2).loop循環

[label:] LOOP

statements

END LOOP [label];


(3).repeat until循環

[label:] REPEAT

statements

UNTIL expression

END REPEAT [label] ;


五.其他常用命令

1.show procedure status
顯示數據庫中所有存儲的存儲過程基本信息,包括所屬數據庫,存儲過程名稱,創建時間等
2.show create procedure sp_name

存儲過程創建語法:

CREATE PROCEDURE procedure_name ([parameter[,...])

[LANGUAGE SQL]

[ [NOT] DETERMINISTIC ]

[{CONTAINS SQL|MODIFIES SQL DATA|READS SQL DATA|NO SQL}]

[SQL SECURITY {DEFINER|INVOKER} ]

[COMMENT comment_string]

procedure_statements


可用SHOW PROCEDURE STATUS 或 SHOW CREATE PROCEDURE 來查看存儲過程信息
另,系統表INFORMATION_SCHEMA.ROUTINES也包含了存儲過程的一些信息
同樣地,函數也可以使用同樣方式查看(SHOW FUNCTION STATUS)

函數的創建


CREATE FUNCTION function_name (parameter[,...])

RETURNS datatype

[LANGUAGE SQL]

[ [NOT] DETERMINISTIC ]

[ {CONTAINS SQL | NO SQL | MODIFIES SQL DATA | READS SQL DATA} ]

[ SQL SECURITY {DEFINER|INVOKER} ]

[ COMMENT comment_string ]

語句體

函數與存儲過程基本一樣,其區別主要有:
1、  要使用RETURNS指定返回類型
2、  函數必須返回值,且在語句體中使用RETURN返回(注意:指定返回類型用RETURNS,返回值用RETURN)
3、  參數不區分IN,OUT,全部為IN類形

例:
CREATE FUNCTION cust_status(in_status CHAR(1))
    RETURNS VARCHAR(20)
BEGIN DECLARE long_status VARCHAR(20);
    IF in_status="O" THEN SET long_status="Overdue";
    ELSEIF in_status="U" THEN SET long_status="Up to date";
    ELSEIF in_status="N" THEN SET long_status="new";
    END IF;
    RETURN(long_status);
END;

調用:
SELECT cust_status('O');

觸發器

CREATE [DEFINER={user|CURRENT_USER}] TRIGGER trigger_name

{BEFORE|AFTER} {UPDATE|INSERT|DELETE}

ON table_name

FOR EACH ROW

trigger_statements


意義:當對表table_name執行update,insert,delete操作之前(before)或之後(after)時觸發語句trigger_statements操作

例:
MySQL> CREATE TRIGGER account_balance_au
AFTER UPDATE ON account_balance FOR EACH ROW
BEGIN
  DECLARE dummy INT;
  IF NEW.balance<0 THEN
     SET NEW.balance=NULL;
  END IF;
END

上述觸發器表示:當更新表account_balance之後,如果更新的值balance小於0,則將它改為NULL,
注:如果為OLD.balance則表示更新前的原值

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved