我有一個名爲customer
的表,其中有一個名爲name
的列和一個名爲first_name_start
的列。我想first_name_start
等於SUBSTRING(name, 1, 4)
。我將如何創建一個確保這種情況發生的觸發器?如何創建這個MySQL觸發器?
回答
DELIMITER $$
CREATE TRIGGER trigger_name BEFORE INSERT ON your_table
FOR EACH ROW
BEGIN
SET NEW.first_name_start = SUBSTRING(NEW.name, 1, 4);
END$$
CREATE TRIGGER trigger_name BEFORE UPDATE ON your_table
FOR EACH ROW
BEGIN
SET NEW.first_name_start = SUBSTRING(NEW.name, 1, 4);
END$$
DELIMITER ;
不幸的是,我沒有時間去測試它,它可能是完全錯誤的。
這個工作 - 我剛剛測試了一個幾乎完全相同的東西,它只處理插入,但是OP沒有指定插入/更新/一切。 – Erik 2011-04-28 13:41:29
@Erik:OP確實要求更新以便在評論中處理在他的問題上。 – 2011-04-28 13:46:27
如果你真的需要它作爲一個列,爲什麼不只是添加first_name_start
視圖呢?那麼您將不會存儲冗餘數據,但您可以像使用它一樣使用它。
這將是最合乎邏輯的事情,我希望我能做到,但它表現不佳。 – 2011-04-28 13:34:09
有趣。你有沒有測試你的子字符串列的解決方案(填充沒有觸發器當然),並發現它很快?如果是這樣,那麼MySQL不能使「最合理」的解決方案表現良好,這有點不幸。 – 2011-04-28 13:38:44
我只是做了我的查詢,並把一個'WHERE SUBSTRING(...',它是可笑的緩慢。 – 2011-04-28 13:42:56
- 1. 如何創建這種SQL觸發器?
- 2. 如何創建觸發器的MySQL 5.6
- 3. 如何創建MySQL觸發器?
- 4. 創建觸發器Mysql
- 5. 有什麼不對這個MySQL創建觸發器聲明
- 6. 如何創建觸發器?
- 7. 如何在創建觸發器時解決這兩個錯誤?
- 8. 不能在MySQL創建觸發器
- 9. 在MYSQL中創建BEFORE INSERT觸發器
- 10. 錯誤創建觸發器MYSQL PHPMyadmin
- 11. 通過PHP創建mysql觸發器?
- 12. mysql的創建觸發器1064錯誤
- 13. 錯誤的MySQL創建觸發器
- 14. 在MySQL觸發器中創建變量
- 15. mysql創建觸發器語法錯誤
- 16. Mysql使用觸發器創建表
- 17. 創建觸發器
- 18. 創建觸發器
- 19. 創建觸發器
- 20. 如何創建觸發器觸發器自引用觸發器......是啊
- 21. 如何創建觸發器做場
- 22. 如何在sqlite3中創建觸發器?
- 23. 我將如何創建此觸發器?
- 24. 如何創建觸發器與案例
- 25. 如何在sharepoint中創建觸發器?
- 26. 如何在MySQL插入數據創建觸發器到表
- 27. 如何創建將行插入歷史表的mysql觸發器?
- 28. 如何爲MySQL DB創建自動更新觸發器?
- 29. 如何在程序或觸發器中創建mysql事件?
- 30. 如何在MySql中爲特定數據庫創建觸發器?
你確定你需要做非規範化你的表嗎? – 2011-04-28 13:32:43
你想讓這個觸發器觸發什麼條件?僅在插入時更新名稱字段?我們需要更多信息。 – 2011-04-28 13:34:15
都插入並更新到'name'列。尼克,我確定。我希望我不必去規範化,但是我無法獲得我需要的其他性能。 (我檢查了) – 2011-04-28 13:36:03