史萊姆論壇

返回   史萊姆論壇 > 專業主討論區 > 論壇程式討論區
忘記密碼?
論壇說明 標記討論區已讀

歡迎您來到『史萊姆論壇』 ^___^

您目前正以訪客的身份瀏覽本論壇,訪客所擁有的權限將受到限制,您可以瀏覽本論壇大部份的版區與文章,但您將無法參與任何討論或是使用私人訊息與其他會員交流。若您希望擁有完整的使用權限,請註冊成為我們的一份子,註冊的程序十分簡單、快速,而且最重要的是--註冊是完全免費的!

請點擊這裡:『註冊成為我們的一份子!』

Google 提供的廣告


發文 回覆
 
主題工具 顯示模式
舊 2007-10-19, 09:42 AM   #1
Admin1
管理員
 
Admin1 的頭像
榮譽勳章
UID - 112827
在線等級: 級別:29 | 在線時長:972小時 | 升級還需:48小時級別:29 | 在線時長:972小時 | 升級還需:48小時級別:29 | 在線時長:972小時 | 升級還需:48小時級別:29 | 在線時長:972小時 | 升級還需:48小時級別:29 | 在線時長:972小時 | 升級還需:48小時級別:29 | 在線時長:972小時 | 升級還需:48小時級別:29 | 在線時長:972小時 | 升級還需:48小時級別:29 | 在線時長:972小時 | 升級還需:48小時級別:29 | 在線時長:972小時 | 升級還需:48小時
註冊日期: 2007-02-18
VIP期限: 0000-00
文章: 3507
精華: 0
現金: 1702 金幣
資產: 10196 金幣
預設 SQL - MySQL 的 Trigger 滿好用的

有的時候有些程式邏輯實在是不想在 PHP 等前端程式做處理,原因有很多。例如這個系統是買來的商用系統,自己本身無法掌握所有的程式細節,因此怕改錯一個地方系統就整個完蛋但又不想浪費時間耗時的測試,這時就可以試著將一些程式邏輯推遲到資料庫這層來處理(也就是不用去改前端的 PHP 程式)。

MySQL 的 Trigger 功能可以在你對於 record 進行處理時,觸發特定的事件。舉個例子,若是資料表中有個欄位(eg. dateline)的 Data Type 是 datetime,那麼它的預設值就必定要是常數(constant)。這樣一來若是你要利用這個欄位來記錄這筆 record 被修改的時間,你勢必要在程式端(PHP 等)修改 record 的時候自行取得現在的 "時間",然後再寫入到資料庫中。若是改用 Trigger 來處理,我們可以告訴資料庫當某個資料表的 record 被 update 的時候,請資料庫自動取得現在的 "時間" 並寫入 dateline 欄位中,這樣子一來就等同於讓 datetime 這個欄位的 Default Value 變成 CURRENT_TIMESTAMP。

範例:
PHP 語法:
delimiter $
CREATE TRIGGER default_for_datetime_update BEFORE UPDATE ON mytable
  
FOR EACH ROW BEGIN
    SET 
NEW.dateline CURRENT_TIMESTAMP;
  
END 

從範例中還可以看出我們可以在 Trigger 中對即將寫入 DB 的新資料,與原本就存在 DB 中的舊料進行處理。新的(將要寫入的)資料運用方式就是 NEW.資料表的欄位;而原本就存在的資料則是透過 OLD.資料表的欄位 來運用。


當然 Trigger 中也可以使用程式邏輯,例如在下面這個 Trigger 中使用了 IF 這個判斷式:
PHP 語法:
delimiter $
CREATE TRIGGER default_for_timestamp_update BEFORE UPDATE ON mytable
  
FOR EACH ROW BEGIN
    
IF NEW.hidetype != OLD.hidetype AND NEW.hidetype != 0 THEN SET NEW.charge_dateline UNIX_TIMESTAMP(); END IF;
  
END 

透過 Trigger 就可以處理許多以前必需要在程式端處理的問題,十分的方便。

此帖於 2007-10-25 07:30 PM 被 Admin1 編輯.
Admin1 目前離線  
送花文章: 8870, 收花文章: 2195 篇, 收花: 5820 次
回覆時引用此帖
有 2 位會員向 Admin1 送花:
Pichumax (2007-10-23),superxboy (2007-10-19)
感謝您發表一篇好文章
發文 回覆


主題工具
顯示模式

發表規則
不可以發文
不可以回覆主題
不可以上傳附加檔案
不可以編輯您的文章

論壇啟用 BB 語法
論壇啟用 表情符號
論壇啟用 [IMG] 語法
論壇禁用 HTML 語法
Trackbacks are 禁用
Pingbacks are 禁用
Refbacks are 禁用

相似的主題
主題 主題作者 討論區 回覆 最後發表
MySQL 效能監控工具--mysqlreport Admin1 作業系統操作技術文件 1 2007-06-17 09:24 PM
系統 - 常見連接阜的關閉 psac 作業系統操作技術文件 6 2006-09-08 08:42 AM
軟體 - IIS+MySQL+PHP+Zend Optimizer+PHPMyAdmin安裝筆記 psac 網路軟硬體架設技術文件 0 2006-08-08 10:48 AM
一步一步教你網站同步映射 psac 程式 & 網頁設計技術文件 0 2005-05-12 03:29 AM


所有時間均為台北時間。現在的時間是 02:36 AM


Powered by vBulletin® 版本 3.6.8
版權所有 ©2000 - 2024, Jelsoft Enterprises Ltd.


SEO by vBSEO 3.6.1