2011-03-18 65 views
0

是否存儲過程,觸發器?mysql觸發器和存儲過程diff

我被要求編寫一個mysql腳本文件,並在不支持觸發器的服務器上開發數據庫。所以我的問題是,因爲我不能使用觸發器,那麼我不能使用存儲過程嗎?

+0

可能的[存儲過程與觸發器在MySQL中]重複(http://stackoverflow.com/questions/4171432/stored-procedures-vs-triggers-in-mysql) – 2011-03-18 13:29:08

+0

你可以在觸發器中做的所有事情都可以完成在一片雜草中。你可以在雜誌中做的所有事情都不能在觸發器中完成。 – 2011-03-18 13:39:53

+0

@ f00:我原以爲這是另一種方式。觸發器有觸發事件(插入/更新/刪除),增加了存儲過程中不可用的一些功能。是的,觸發器的本體本質上是一個存儲過程,並且每次更改記錄時,MySQL中的觸發器都會被調用一次,因此從某種意義上說,觸發器的「範圍」僅限於該記錄。不過,我仍然更傾向於說觸發器可以完成存儲過程所做的所有事情(如果它與該記錄無關,通常不會做太多事情)。 – hardmath 2011-03-18 13:51:39

回答

1

您使用的是哪個版本的MySQL?

觸發器和存儲過程都在5.0中添加,所以如果您使用3.X或4.X,則不能使用觸發器或存儲過程。

+0

即時通訊使用版本5 – pantelis 2011-03-18 13:50:36

+0

那麼爲什麼你說你的服務器不支持觸發器? – 2011-03-18 14:18:42

+0

要清楚,即時通訊新的SQL開發。現在我正在使用工作臺版本5.2,但是告訴我,即將執行我的sql腳本的服務器不支持觸發器 – pantelis 2011-03-18 15:00:08

2

觸發器涉及存儲過程(本質上),但並非所有存儲過程都是觸發器。因此,如果數據庫是MySQL的舊版本(根據Ike的答案),兩者都不存在。

但是,它可能是您的設計(「開發數據庫」)的一般格言不使用觸發器。通過將業務邏輯推入數據庫的觸發器,項目可能會陷入麻煩。是的,有時候可以解決執行復雜表間相關性的難題。但是你的任務可能是做一個或多或少的香草設計,避免在第一次迭代中觸發。

存儲過程沒有那麼多的設計風險。它並不試圖在業務邏輯中「執行」任何東西,只是(希望)遵守它。存儲過程在被調用時運行,因此它基本上充當了一種將腳本存儲在數據庫中的機制,並且比從客戶端連接運行腳本更簡單。存儲過程可能對設計數據組和報告有用,如果這些都在您的任務範圍內。

相關問題