網站製作學習誌

記錄學習製作網站的一切

MySQL 5 可用於正式產品上了

前陣子看到 MySQL 5 已經正式推出了,支援 Stored Procedures 、 Functions 、 Views 、 Triggers 等。

目前 phpMyAdmin 2.6.4 好像還不支援這些新特色 (View 可以看得到,但是沒有建立的介面?) ,不過 MySQL 官方自己推了一個 MySQL Query Browser ,還不錯用, 缺點是中文的支援性不佳 (輸入中文時會怪怪的) 。

小試了一下用 MySQL Query Browser 寫一個 Stored Procedure :

1
2
3
4
5
6
7
8
9
<strong>DELIMITER $$</strong>
DROP PROCEDURE IF EXISTS `spTest` $$
CREATE PROCEDURE `spTest`(p_title VARCHAR(200), p_description TEXT)
<strong>DETERMINISTIC</strong>
BEGIN
INSERT INTO category (title, description)
VALUES (p_title, p_description);
END $$
<strong>DELIMITER ;</strong>

其中 DELIMITER 是用來決定 SQL 分隔符號的,在寫 Stored Procedure 前,要先把預設的分號換掉,不然按下 MySQL Query Browser 的 Execute 按鈕時,會真的去跑裡面的 INSERT 指令。寫完 Stored Procedure 的 routine_body 後,再回復成預設的分號。

另外我在寫這個 Stored Procedurce 時,發現一定要加上 characteristic 才行,也就是上面的 DETERMINISTIC 。可是官方手冊明明寫可略過,這我就沒時間研究為什麼了。

另外就是參數的名稱, MySQL 5 不像 MSSQL 是用 @param 來表示 Stored Procedure 的參數?這樣有點難以分辨參數及資料表欄位,不過也不是不能解決。

執行這個 Stored Procedure 的方法是用 CALL:

1
CALL spTest 'TEST', 'ABC';

當然語法不同,就會造成寫 PHP 程式的不方便,改天來找找看有沒有比較好的抽象層資料庫存取介面 (就是像 PEAR::DB 或 ADOdb 之類的物件類別庫) ,可以支援不同類型資料庫的 Stored Procedure 。

Stored Procedure 的寫法可參考:http://dev.mysql.com/doc/refman/5.0/en/stored-procedures.html

Trigger 的寫法可參考:http://dev.mysql.com/doc/refman/5.0/en/triggers.html

View 的寫法可參考:http://dev.mysql.com/doc/refman/5.0/en/views.html

Comments