這個你只能寫sql 語句去數(shù)據(jù)庫里面去查詢觸發(fā)器是否存在了 不是有個 if exists(SELECT * FROM information_schema.`TRIGGER `;) drop TRIGGER room_kq_detail_times
讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價值的長期合作伙伴,公司提供的服務(wù)項目有:域名注冊、網(wǎng)絡(luò)空間、營銷軟件、網(wǎng)站建設(shè)、襄州網(wǎng)站維護、網(wǎng)站推廣。
方法/步驟
首先,我們需要確定自己的Mysql數(shù)據(jù)庫的版本,因為my sql數(shù)據(jù)庫是從5.0.2版本才開始支持觸發(fā)器的。
我推薦大家在電腦的dos命令界面中輸入 mysql --version,來獲取mysql的版本號,注意version的兩個橫線和之前的mysql是有一個空格的。
上一步獲取了我們的mysql版本號,這一不我們就開始建立觸發(fā)器了。我采用的以視圖加代碼的方式創(chuàng)建,我們在數(shù)據(jù)表中找到要執(zhí)行刪除操作的表,然后右鍵設(shè)計表
這樣我們就打開了表的設(shè)計頁面,可以看到有一個觸發(fā)器選項卡,我們點擊“觸發(fā)器”
可以看到對應(yīng)的選項,我們在名里面添加我們需要新建的觸發(fā)器的名字,在觸發(fā)選項中選擇before或者after,然后在插入、更新、刪除三個選項中勾選一個。
這樣我們就建立了一個名為“datri”的觸發(fā)器,在刪除操作執(zhí)行之后觸發(fā)
然后我們在下面的定義下面的框中輸入我們需要執(zhí)行的操作。然后點擊sql預(yù)覽,可以看到整個觸發(fā)器的代碼
最后就是保存了,由于我們做的是觸發(fā)器,保存之后,在執(zhí)行刪除操作時,這個觸發(fā)器才相當(dāng)于 被執(zhí)行。
可以從information_schema架構(gòu)下的系統(tǒng)表查看
-- 查看約束
SELECT * FROM information_schema.`TABLE_CONSTRAINTS`;
-- 查看觸發(fā)器
SELECT * FROM information_schema.`TRIGGERS`;
語法說明如下。
1) 觸發(fā)器名
觸發(fā)器的名稱,觸發(fā)器在當(dāng)前數(shù)據(jù)庫中必須具有唯一的名稱。如果要在某個特定數(shù)據(jù)庫中創(chuàng)建,名稱前面應(yīng)該加上數(shù)據(jù)庫的名稱。
2) INSERT | UPDATE | DELETE
觸發(fā)事件,用于指定激活觸發(fā)器的語句的種類。
注意:三種觸發(fā)器的執(zhí)行時間如下。INSERT:將新行插入表時激活觸發(fā)器。例如,INSERT 的 BEFORE 觸發(fā)器不僅能被 MySQL 的 INSERT 語句激活,也能被 LOAD DATA 語句激活。DELETE: 從表中刪除某一行數(shù)據(jù)時激活觸發(fā)器,例如 DELETE 和 REPLACE 語句。UPDATE:更改表中某一行數(shù)據(jù)時激活觸發(fā)器,例如 UPDATE 語句。
3) BEFORE | AFTER
BEFORE 和 AFTER,觸發(fā)器被觸發(fā)的時刻,表示觸發(fā)器是在激活它的語句之前或之后觸發(fā)。若希望驗證新數(shù)據(jù)是否滿足條件,則使用 BEFORE 選項;若希望在激活觸發(fā)器的語句執(zhí)行之后完成幾個或更多的改變,則通常使用 AFTER 選項。
4) 表名
與觸發(fā)器相關(guān)聯(lián)的表名,此表必須是永久性表,不能將觸發(fā)器與臨時表或視圖關(guān)聯(lián)起來。在該表上觸發(fā)事件發(fā)生時才會激活觸發(fā)器。同一個表不能擁有兩個具有相同觸發(fā)時刻和事件的觸發(fā)器。例如,對于一張數(shù)據(jù)表,不能同時有兩個 BEFORE UPDATE 觸發(fā)器,但可以有一個 BEFORE UPDATE 觸發(fā)器和一個 BEFORE INSERT 觸發(fā)器,或一個 BEFORE UPDATE 觸發(fā)器和一個 AFTER UPDATE 觸發(fā)器。
5) 觸發(fā)器主體
觸發(fā)器動作主體,包含觸發(fā)器激活時將要執(zhí)行的 MySQL 語句。如果要執(zhí)行多個語句,可使用 BEGIN…END 復(fù)合語句結(jié)構(gòu)。
數(shù)據(jù)庫觸發(fā)器有下面的作用:
1.安全性。能夠基于數(shù)據(jù)庫的值使用戶具有操作數(shù)據(jù)庫的某種權(quán)利。
# 能夠基于時間限制用戶的操作,比如不同意下班后和節(jié)假日改動數(shù)據(jù)庫數(shù)據(jù)。
2.審計。能夠跟蹤用戶對數(shù)據(jù)庫的操作。???
# 審計用戶操作數(shù)據(jù)庫的語句。
# 把用戶對數(shù)據(jù)庫的更新寫入審計表。
3.實現(xiàn)復(fù)雜的數(shù)據(jù)完整性規(guī)則
# 實現(xiàn)非標(biāo)準(zhǔn)的數(shù)據(jù)完整性檢查和約束。觸發(fā)器可產(chǎn)生比規(guī)則更為復(fù)雜的限制。與規(guī)則不同,觸發(fā)器能夠引用列或數(shù)據(jù)庫對象。比如,觸發(fā)器可回退不論什么企圖吃進超過自己保證金的期貨。
# 提供可變的缺省值。
4.實現(xiàn)復(fù)雜的非標(biāo)準(zhǔn)的數(shù)據(jù)庫相關(guān)完整性規(guī)則。觸發(fā)器能夠?qū)?shù)據(jù)庫中相關(guān)的表進行連環(huán)更新。比如,在auths表author_code列上的刪除觸發(fā)器可導(dǎo)致對應(yīng)刪除在其他表中的與之匹配的行。
# 在改動或刪除時級聯(lián)改動或刪除其他表中的與之匹配的行。
# 在改動或刪除時把其他表中的與之匹配的行設(shè)成NULL值。
# 在改動或刪除時把其他表中的與之匹配的行級聯(lián)設(shè)成缺省值。
# 觸發(fā)器可以拒絕或回退那些破壞相關(guān)完整性的變化,取消試圖進行數(shù)據(jù)更新的事務(wù)。當(dāng)插入一個與其主健不匹配的外部鍵時,這樣的觸發(fā)器會起作用。比如,可以在books.author_code?列上生成一個插入觸發(fā)器,假設(shè)新值與auths.author_code列中的某值不匹配時,插入被回退。
5.同步實時地復(fù)制表中的數(shù)據(jù)。
6.自己主動計算數(shù)據(jù)值,假設(shè)數(shù)據(jù)的值達到了一定的要求,則進行特定的處理
可以從information_schema架構(gòu)下的系統(tǒng)表查看
-- 查看約束
SELECT * FROM information_schema.`TABLE_CONSTRAINTS`;
-- 查看觸發(fā)器
SELECT * FROM information_schema.`TRIGGERS`;