国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數(shù)據(jù)庫 > MySQL > 正文

MYSQL數(shù)據(jù)庫觸發(fā)器怎么用

2024-07-24 12:33:10
字體:
供稿:網(wǎng)友
  今天小編給大家分享一下MYSQL數(shù)據(jù)庫觸發(fā)器怎么用的相關(guān)知識點(diǎn),內(nèi)容詳細(xì),邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。
 
  先了解一下觸發(fā)器,再來討論是否能完全代替外鍵
 
  什么是觸發(fā)器?
 
  概念:觸發(fā)器(trigger)是SQL server 提供給程序員和數(shù)據(jù)分析員來保證數(shù)據(jù)完整性的一種方法,它是與表事件相關(guān)的特殊的存儲過程,它的執(zhí)行不是由程序調(diào)用,也不是手工啟動,而是由事件來觸發(fā),比如當(dāng)對一個(gè)表進(jìn)行操作( insert,delete, update)時(shí)就會激活它執(zhí)行。觸發(fā)器經(jīng)常用于加強(qiáng)數(shù)據(jù)的完整性約束和業(yè)務(wù)規(guī)則等。 觸發(fā)器可以從 DBA_TRIGGERS ,USER_TRIGGERS 數(shù)據(jù)字典中查到。SQL3的觸發(fā)器是一個(gè)能由系統(tǒng)自動執(zhí)行對數(shù)據(jù)庫修改的語句。
 
  通俗的來講,觸發(fā)器就是一個(gè)觸發(fā)裝置,裝置里面存有一段操作。這個(gè)裝置有觸發(fā)條件,達(dá)到某個(gè)條件就會觸發(fā)這個(gè)裝置,觸發(fā)裝置就會執(zhí)行存儲的一段操作。
 
  如何在數(shù)據(jù)庫中建立觸發(fā)器
 
  建立觸發(fā)器實(shí)例(關(guān)鍵詞:trigger)
 
  例一:建立一個(gè)用戶表(用戶ID,用戶姓名),建立一個(gè)觸發(fā)器(當(dāng)用戶表中插入數(shù)據(jù)時(shí),自動生成一個(gè)全局唯一的ID)
 
  先建立user表
 
  create table user(
 
  id int PRIMARY KEY,
 
  name varchar(20)
 
  );
 
  MYSQL數(shù)據(jù)庫觸發(fā)器怎么用
 
  建立觸發(fā)器
 
  -- 建立觸發(fā)器名為tt
 
  create TRIGGER tt
 
  -- 觸發(fā)條件,向user表中插入數(shù)據(jù)時(shí)啟動觸發(fā)器
 
  BEFORE insert on user
 
  -- 檢查表中每一行,對新插入的數(shù)據(jù)進(jìn)行操作
 
  for EACH ROW
 
  -- 執(zhí)行操作
 
  BEGIN
 
  set new.id=UUID();
 
  END
 
  剛剛建立的觸發(fā)器(查看當(dāng)前數(shù)據(jù)庫下全部觸發(fā)器的代碼show triggers)
 
  MYSQL數(shù)據(jù)庫觸發(fā)器怎么用
 
  效果:向表中插入三個(gè)用戶名,自動生成三個(gè)ID
 
  insert user(name) VALUE('張三'),('李四'),('王五')
 
  MYSQL數(shù)據(jù)庫觸發(fā)器怎么用
 
  例二:再建立一個(gè)訂單表DD(訂單ID,商品名稱,用戶ID),建立一個(gè)觸發(fā)器tq1(當(dāng)刪除一個(gè)用戶時(shí),該用戶的訂單也將刪除)
 
  建表
 
  create table DD(
 
  ddid int PRIMARY KEY,
 
  ddname VARCHAR(20),
 
  userid VARCHAR(50)
 
  )
 
  MYSQL數(shù)據(jù)庫觸發(fā)器怎么用
 
  建立觸發(fā)器
 
  delimiter $
 
  -- 建立觸發(fā)器名為tq
 
  create TRIGGER tq1
 
  -- 觸發(fā)條件,再dd表刪除數(shù)據(jù)之后啟動觸發(fā)器
 
  AFTER DELETE on user
 
  -- 檢查表中每一行,對新插入的數(shù)據(jù)進(jìn)行操作
 
  for EACH ROW
 
  -- 執(zhí)行操作
 
  BEGIN  
 
  DELETE FROM dd WHERE old.id=userid;
 
  END $
 
  delimiter ;
 
  MYSQL數(shù)據(jù)庫觸發(fā)器怎么用
 
  向表中添加兩條數(shù)據(jù)
 
  MYSQL數(shù)據(jù)庫觸發(fā)器怎么用
 
  效果:刪除user表中的用戶,dd表中的記錄也跟隨刪除
 
  刪除張三
 
  delete from user WHERE name='張三'
 
  MYSQL數(shù)據(jù)庫觸發(fā)器怎么用
 
  MYSQL數(shù)據(jù)庫觸發(fā)器怎么用
 
  觸發(fā)器能否完全代替外鍵
 
  上面的例二如果用外鍵也可以實(shí)現(xiàn)同樣的效果,那么是不是說明外鍵可以做到的,觸發(fā)器都可以做到,外鍵做不到的觸發(fā)器也可以做到呢?
 
  與外鍵相比,觸發(fā)器的靈活性更高功能更多,可以執(zhí)行更多功能在一定程度上可以代替外鍵,實(shí)現(xiàn)外鍵的功能。
 
  觸發(fā)器也可用于強(qiáng)制引用完整性,以便在多個(gè)表中添加、更新或刪除行時(shí),保留在這些表之間所定義的關(guān)系。然而,強(qiáng)制引用完整性的最好方法是在相關(guān)表中定義主鍵和外鍵約束。如果使用數(shù)據(jù)庫關(guān)系圖,則可以在表之間創(chuàng)建關(guān)系以自動創(chuàng)建外鍵約束。
 
  以上就是“MYSQL數(shù)據(jù)庫觸發(fā)器怎么用”這篇文章的所有內(nèi)容,感謝各位的閱讀!
 

(編輯:武林網(wǎng))

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 郎溪县| 千阳县| 山西省| 鹤壁市| 科尔| 十堰市| 枞阳县| 班玛县| 淮安市| 静安区| 上犹县| 美姑县| 海丰县| 钟山县| 乳山市| 张家界市| 资源县| 黎川县| 河池市| 武胜县| 东辽县| 高青县| 左云县| 五寨县| 龙游县| 舟山市| 江都市| 醴陵市| 衡东县| 上栗县| 陆丰市| 济南市| 阿合奇县| 兴海县| 长寿区| 贵溪市| 鹿邑县| 河池市| 沂源县| 黄骅市| 军事|