數據庫管理工具Navicat Premium,使用MySQL 8中的觸發器驗證數據

Navicat Premium 是一套數據庫管理工具,讓你使用一個程序即可同時連接到 MySQL、MariaDB、SQL Server、SQLite、Oracle 和 PostgreSQL 數據庫。它與 Amazon RDS、Amazon Aurora、Amazon Redshift、Microsoft Azure、Oracle Cloud、MongoDB Atlas、阿里雲、騰訊雲和華爲雲等雲數據庫兼容。

有一些非常好的理由可以解釋爲什麼數據驗證最好在數據庫級別而不是在應用程序級別執行。例如,多個應用程序可以訪問相同的數據源。因此,您可以依賴於數據的一致性和有效性,而不必依賴於在應用程序端應用的驗證邏輯,這可能在不同的實現中不一致。此外,觸發器是驗證的理想選擇,因爲它們可以在插入或更新數據之前執行。觸發器還可以防止在提供錯誤消息時應用數據庫事務。

在這篇文章中,我們將在Navicat Premium中編寫一個觸發器,用於驗證MySQL數據庫表上的插入操作。

設計觸發器

我們將使用Sakila示例數據庫。它包含一些以虛構視頻租賃店爲主題的相關表格。在這裏,他們在Navicat Premium導航窗格中:

90sakila_tables.jpg

我們將把觸發器添加到電影表中。如果您在Designer中打開它,您會看到有幾個選項卡:

91designer_tabs.jpg

單擊“觸發器”選項卡可顯示已爲該表定義了一些觸發器。例如,ins_film觸發器將膠片信息複製到數據插入的film_text表中。這是分配給觸發器的常見任務。

92existing-triggers.jpg

現在我們將添加一個觸發器,確保使用original_language_id插入外國電影。

電影的語言實際存儲在語言查找表中:

93film_language_relationship.jpg

LANGUAGE_ID名稱 最後更新
1英語2006-02-15 05:02:19
2意大利2006-02-15 05:02:19
3日本2006-02-15 05:02:19
4普通話2006-02-15 05:02:19
5法國2006-02-15 05:02:19
6德語2006-02-15 05:02:19

除1之外的任何language_id也應具有original_language_id。我們的觸發器將檢查original_language_id列中的值。

1、在電影表的“設計視圖”中,選擇“觸發器”選項卡,然後單擊“添加觸發器”按鈕。

這將在觸發器表中添加一個新行。

2、分配名稱“ins_validate_language”,從Fires下拉菜單中選擇BEFORE,然後單擊Insert複選框。

3、這是觸發器Body:

BEGIN
  IF NEW.language_id != 1 AND NEW.original_language_id IS NULL
  THEN
    SIGNAL SQLSTATE '45000'
      SET MESSAGE_TEXT = 'Original language id is required for Foreign language films.';
  END IF;
END

這是我們的觸發器,填寫了所有字段:

94ins_validate_language.jpg


4、單擊“保存”按鈕以創建觸發器。

測試觸發器

現在是時候驗證我們的觸發器是否按預期工作。爲了測試它,讓我們用一個外語language_id爲電影表添加一個新行。

1、在編輯器中打開電影表。

2、導航到最後一行。

3、選擇表單視圖,然後單擊加號(+)按鈕添加新行:

95record_form.jpg

4、在表單中,您只需輸入標題和language_id;所有其他字段都具有默認值或不是必需的。

5、單擊添加(複選標記)按鈕時,您應該看到我們的錯誤消息:

96alert_message.jpg

結論

觸發器是驗證的理想選擇,因爲它們可以在插入或更新數據之前執行。我們通過在Navicat Premium中編寫觸發器,瞭解瞭如何將觸發器用於驗證目的。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章