MySQL 5.0觸發(fā)器參考教程第4/4頁
更新時間:2008年09月10日 09:20:36 作者:
需要學(xué)習(xí)mysql觸發(fā)器的朋友需要了解的東西,整理的比較多,建議大家慢慢多練習(xí)
例如:
CREATE TABLE t25(s1 INT, s2 CHAR(5), PRIMARY KEY (s1),
CHECK (LEFT(s2,1)='A'))
ENGINE=INNODB;
這里CHECK的意思是"當(dāng)s2列的最左邊的字符不是'A'時,insert和update語句都會非法",MySQL的視圖不支持CHECK,我個人是很希望它能支持的。但如果你很需要在表中使用這樣的功能,我建議大家使用觸發(fā)器來實(shí)現(xiàn)。
CREATE TABLE t25
(s1 INT, s2 CHAR(5),
PRIMARY KEY (s1))
ENGINE=INNODB//
CREATE TRIGGER t25_bi
BEFORE INSERT ON t25
FOR EACH ROW
IF LEFT(NEW.s2,1)<>'A' THEN SET NEW.s1=0; END IF;//
CREATE TRIGGER t25_bu
BEFORE UPDATE ON t25
FOR EACH ROW
IF LEFT(NEW.s2,1)<>'A' THEN SET NEW.s1=0; END IF;//
我只需要使用BEFORE INSERT和BEFORE UPDATE語句就行了,刪除了觸發(fā)器不會對表有影響,同時AFTER的觸發(fā)器也不能修改NEW的過程變量(transition variables)。為了激活觸發(fā)器,我執(zhí)行了向表中的行插入s1=0的數(shù)據(jù),之后只要執(zhí)行符合LEFT(s2,1) <> 'A'條件的動作都會失?。?
INSERT INTO t25 VALUES (0,'a') /* priming the pump */ //
INSERT INTO t25 VALUES (5,'b') /* gets error '23000' */ //
Don't Believe The Old MySQL Manual
該拋棄舊的MySQL的手冊了
我在這里警告大家不要相信過去的MySQL手冊中所說的了。我們已經(jīng)去掉了關(guān)于觸發(fā)器的錯誤的語句,但是仍舊有很多舊版本的手冊在網(wǎng)上,舉個例子,這是一個德國的Url上的:
http://dev.mysql.com/doc/mysql/de/ANSI_diff_Triggers.html.
這個手冊上說觸發(fā)器就是存儲過程,忘掉吧,你也已經(jīng)看見了,觸發(fā)器就是觸發(fā)器,而存儲過程還是存儲過程。
手冊上還說觸發(fā)器可以從其他表上來刪除,或者是當(dāng)你刪除一個事務(wù)的時候激發(fā),無論他說的是什么意思,忘掉吧,MySQL不會去實(shí)現(xiàn)這些的。
最后關(guān)于說使用觸發(fā)器會對查詢速度產(chǎn)生影響的說法也是錯的,觸發(fā)器不會對查詢產(chǎn)生任何影響。
Bugs
?。ú缓玫臇|西就不翻譯了)
On December 14 2004, I did an "Advanced Search" in http://bugs.mysql.com for 'trigger' or
'triggers', I found that there were 17 active bugs as of that date. Of course they might disappear
before you read this, but just in case they haven't, I'll mention the important ones. If they're still
there, you'll have to work around them when you're trying triggers.
Bug#5859 DROP TABLE does not drop triggers.
(刪除表的時候沒有自動刪除觸發(fā)器)
When you drop a table, dropping the table's triggers should be automatic.
Bug#5892 Triggers have the wrong namespace.
?。ㄓ|發(fā)器的命名空間有錯,你必須在前面加上表的名字才能刪除觸發(fā)器,下面是例子)
You have to say "DROP TRIGGER <table name> . <trigger name>".
The correct way is "DROP TRIGGER <trigger name>".
Bug#5894 Triggers with altered tables cause corrupt databases.
(觸發(fā)器對表的改變可能會造成數(shù)據(jù)庫數(shù)據(jù)被破壞)
Do not alter a table that has a trigger on it, until you know this is fixed.
相關(guān)文章
優(yōu)化mysql數(shù)據(jù)庫的經(jīng)驗(yàn)總結(jié)
本篇文章是對優(yōu)化mysql數(shù)據(jù)庫的經(jīng)驗(yàn)進(jìn)行了詳細(xì)的總結(jié)介紹,需要的朋友參考下2013-06-06
MySQL日期函數(shù)與日期轉(zhuǎn)換格式化函數(shù)大全
Mysql作為一款開元的免費(fèi)關(guān)系型數(shù)據(jù)庫,用戶基礎(chǔ)非常龐大,本文列出了MYSQL常用日期函數(shù)與日期轉(zhuǎn)換格式化函數(shù)2018-03-03
解決Java程序使用MySQL時返回參數(shù)為亂碼的示例教程
這篇文章主要介紹了解決Java程序使用MySQL返回參數(shù)為亂碼的問題的教程,通過示例來講解utf-8編碼在MySQL中的相關(guān)配置,示例需要的朋友可以參考下2015-12-12
MySQL 8.0.19支持輸入3次錯誤密碼鎖定賬戶功能(例子)
這篇文章主要介紹了MySQL 8.0.19支持輸入3次錯誤密碼鎖定賬戶功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下2020-01-01
SQL實(shí)現(xiàn)LeetCode(185.系里前三高薪水)
這篇文章主要介紹了SQL實(shí)現(xiàn)LeetCode(185.系里前三高薪水),本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-08-08
mysql啟動提示:錯誤2系統(tǒng)找不到指定文件的解決方案
這篇文章主要給大家介紹了mysql啟動提示:錯誤2系統(tǒng)找不到指定文件的解決方案,文中通過圖文結(jié)合的方式給大家講解的非常詳細(xì),對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2024-02-02
華為云云數(shù)據(jù)庫MySQL的體驗(yàn)流程
本文主要介紹了MySQL數(shù)據(jù)庫相關(guān)知識,華為云云數(shù)據(jù)庫的體驗(yàn)流程和云數(shù)據(jù)庫MySQL的性能測試,感興趣的小伙伴可以閱讀瀏覽2023-03-03

