MySql 5.0基礎(chǔ)知識(shí)和常用命令詳細(xì)介紹
2024-07-24 12:40:29
供稿:網(wǎng)友
CREATE PROCEDURE 建立一個(gè)存放在MySQL數(shù)據(jù)庫(kù)的表格的存儲(chǔ)過(guò)程。 CREATE FUNCTION 建立一個(gè)用戶自定義的函數(shù),尤其是返回?cái)?shù)據(jù)的存儲(chǔ)過(guò)程。 ALTER PROCEDURE 更改用CREATE PROCEDURE 建立的預(yù)先指定的存儲(chǔ)過(guò)程,其不會(huì)影響相關(guān)存儲(chǔ)過(guò)程或存儲(chǔ)功能。. ALTER FUNCTION 更改用CREATE FUNCTION 建立的預(yù)先指定的存儲(chǔ)過(guò)程,其不會(huì)影響相關(guān)存儲(chǔ)過(guò)程或存儲(chǔ)功能。. DROP PROCEDURE 從MySQL的表格中刪除一個(gè)或多個(gè)存儲(chǔ)過(guò)程。 DROP FUNCTION 從MySQL的表格中刪除一個(gè)或多個(gè)存儲(chǔ)函數(shù)。 SHOW CREATE PROCEDURE 返回使用CREATE PROCEDURE 建立的預(yù)先指定的存儲(chǔ)過(guò)程的文本。這一聲明是SQL:2003規(guī)范的一個(gè)MySQL擴(kuò)展。 SHOW CREATE FUNCTION 返回使用CREATE FUNCTION建立的預(yù)先指定的存儲(chǔ)過(guò)程的文本。這一聲明是SQL:2003規(guī)范的一個(gè)MySQL擴(kuò)展。 SHOW PROCEDURE STATUS 返回一個(gè)預(yù)先指定的存儲(chǔ)過(guò)程的特性,包括名稱、類型、建立者、建立日期、以及更改日期。這一聲明是SQL:2003規(guī)范的一個(gè)MySQL擴(kuò)展。 SHOW FUNCTION STATUS 返回一個(gè)預(yù)先指定的存儲(chǔ)函數(shù)的特性,包括名稱、類型、建立者、建立日期、以及更改日期。這一聲明是SQL:2003規(guī)范的一個(gè)MySQL擴(kuò)展。 CALL 調(diào)用一個(gè)使用CREATE PROCEDURE建立的預(yù)先指定的存儲(chǔ)過(guò)程。 BEGIN ... END 包含一組執(zhí)行的多聲明。 DECLARE 用于指定當(dāng)?shù)刈兞俊h(huán)境、處理器,以及指針。 SET 用于更改當(dāng)?shù)睾腿址?wù)器變量的值。 SELECT ... INTO 用于存儲(chǔ)顯示變量的縱列。 OPEN 用于打開一個(gè)指針。 FETCH 使用特定指針來(lái)獲得下一列。 CLOSE 用于關(guān)閉和打開指針。 IF 一個(gè)An if-then-else-end if 聲明。 CASE ... WHEN 一個(gè) case聲明的結(jié)構(gòu) LOOP 一個(gè)簡(jiǎn)單的循環(huán)結(jié)構(gòu);可以使用LEAVE 語(yǔ)句來(lái)退出。 LEAVE 用于退出IF,CASE,LOOP,REPEAT以及WHILE 語(yǔ)句。 ITERATE 用于重新開始循環(huán)。 REPEAT 在結(jié)束時(shí)測(cè)試的循環(huán)。 WHILE 在開始時(shí)測(cè)試的循環(huán)。 RETURNS 返回一個(gè)存儲(chǔ)過(guò)程的值。 MySQL 5.0支持存儲(chǔ)過(guò)程語(yǔ)句。 一.創(chuàng)建存儲(chǔ)過(guò)程 1.基本語(yǔ)法: create procedure sp_name() begin ......... end 2.參數(shù)傳遞 二.調(diào)用存儲(chǔ)過(guò)程 1.基本語(yǔ)法:call sp_name() 注意:存儲(chǔ)過(guò)程名稱后面必須加括號(hào),哪怕該存儲(chǔ)過(guò)程沒(méi)有參數(shù)傳遞 三.刪除存儲(chǔ)過(guò)程 1.基本語(yǔ)法: drop procedure sp_name// 2.注意事項(xiàng) (1)不能在一個(gè)存儲(chǔ)過(guò)程中刪除另一個(gè)存儲(chǔ)過(guò)程,只能調(diào)用另一個(gè)存儲(chǔ)過(guò)程 四.區(qū)塊,條件,循環(huán) 1.區(qū)塊定義,常用 begin ...... end; 也可以給區(qū)塊起別名,如: lable:begin ........... end lable; 可以用leave lable;跳出區(qū)塊,執(zhí)行區(qū)塊以后的代碼 2.條件語(yǔ)句 if 條件 then statement else statement end if; 3.循環(huán)語(yǔ)句 (1).while循環(huán) [label:] WHILE expression DO statements END WHILE [label] ; (2).loop循環(huán) [label:] LOOP statements END LOOP [label]; (3).repeat until循環(huán) [label:] REPEAT statements UNTIL expression END REPEAT [label] ; 五.其他常用命令 1.show procedure status 顯示數(shù)據(jù)庫(kù)中所有存儲(chǔ)的存儲(chǔ)過(guò)程基本信息,包括所屬數(shù)據(jù)庫(kù),存儲(chǔ)過(guò)程名稱,創(chuàng)建時(shí)間等 2.show create procedure sp_name 存儲(chǔ)過(guò)程創(chuàng)建語(yǔ)法: 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 來(lái)查看存儲(chǔ)過(guò)程信息 另,系統(tǒng)表INFORMATION_SCHEMA.ROUTINES也包含了存儲(chǔ)過(guò)程的一些信息 同樣地,函數(shù)也可以使用同樣方式查看(SHOW FUNCTION STATUS) 函數(shù)的創(chuàng)建 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 ] 語(yǔ)句體 函數(shù)與存儲(chǔ)過(guò)程基本一樣,其區(qū)別主要有: 1、 要使用RETURNS指定返回類型 2、 函數(shù)必須返回值,且在語(yǔ)句體中使用RETURN返回(注意:指定返回類型用RETURNS,返回值用RETURN) 3、 參數(shù)不區(qū)分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; 調(diào)用: SELECT cust_status('O'); 觸發(fā)器 CREATE [DEFINER={user|CURRENT_USER}] TRIGGER trigger_name {BEFORE|AFTER} {UPDATE|INSERT|DELETE} ON table_name FOR EACH ROW trigger_statements 意義:當(dāng)對(duì)表table_name執(zhí)行update,insert,delete操作之前(before)或之后(after)時(shí)觸發(fā)語(yǔ)句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 上述觸發(fā)器表示:當(dāng)更新表account_balance之后,如果更新的值balance小于0,則將它改為NULL, 注:如果為OLD.balance則表示更新前的原值