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

首頁 > 數據庫 > MySQL > 正文

使用mysql觸發器的方法

2024-07-24 12:35:44
字體:
來源:轉載
供稿:網友
  這篇文章主要講解了使用mysql觸發器的方法,內容清晰明了,對此有興趣的小伙伴可以學習一下,相信大家閱讀完之后會有幫助。
 
  什么是觸發器:
  觸發器用來在某些操作之后,“自動”執行一些操作。(比如插入了新的學生信息,那么在班級表中應該修改學生數)。
  當insert delete update設置觸發器之后,執行insert delete update操作就會自動觸發設置的內容。
  一張表最大能有6個觸發器(3*2,三種操作*兩種時間(before|after))。
  創建觸發器:
  語法:create trigger 觸發器名 before|after 事件 on 表名 for each row 觸發器語句;
  觸發器名建議為trigger_xxx,這樣便于區分,觸發器名不能重復。
  before|after 代表觸發器語句執行時間,如果是before,就是在insert delete update操作之前執行觸發器語句;after就是之后。
  事件就是insert delete update操作中的一個。
  for each row 是代表任何記錄執行對應操作都會觸發器。
  觸發器語句就是觸發器觸發時要執行的語句。
  比如:下面是一個當插入新用戶時,在用戶創建時間表中插入一條新數據,是當前時間。
  create trigger trigger_addUserTime
  before
   insert
  on user_info
  for each row
  insert into usercreatetime(create_time) values(now());
     
  create table user_info(
  id int primary key auto_increment,
  username varchar(20) not null,
  password varchar(20) not null
  )
 
  create table usercreatetime(
  id int primary key auto_increment,
  create_time datetime
  );
 
  create trigger trigger_addUserTime before insert on user_info for each row insert into usercreatetime(create_time) values(now());
 
  insert into user_info(username,password) values("admin","admin888");
 
  select * from usercreatetime;
  多條觸發器語句情況:
  需要將多條語句包裹在begin end中
  比如: 
  但要注意,上述情況適用于非命令行模式(上面是在navicat中運行的),如果要命令行中執行需要修改命令結束符(mysql命令默認以“;”為語句結束符,如果我們不修改,那么鍵入一條觸發器語句并以;結束時就會認為語句已經結束,然后就會因為語句不完整報錯)【delimiter 自定義符號-- 臨時修改語句結束符為指定符號】。
  【將結束符定義成$$就可以在觸發器語句中使用;結束】
  delimiter $$ -- 一般定義成$$
  create trigger 觸發器名 before|after 事件 on 表名 for each row
  begin
    語句;語句;
  end
  $$
 
  delimiter ;
  -- 示例
  delimiter $$ -- 一般定義成$$
  create trigger trigger_addUserTime23 before insert on user_info for each row
  begin
  insert into usercreatetime(create_time) values(now());
  insert into usercreatetime(create_time) values(now());
  end
  $$
  delimiter ;
  
  查看觸發器:
  使用show triggers/G 查看所有觸發器使用mysql觸發器的方法
  在數據庫information_schema中通過查看觸發器表,來查看觸發器:使用select * from  triggers/G;【當然可以以觸發器名作為where條件查找數據】使用mysql觸發器的方法
  查看觸發器創建語句:show create trigger 觸發器名/G;
  刪除觸發器:
  使用drop trigger 觸發器名;來刪除觸發器
  觸發器的新舊記錄引用:
  對于某些情況有時候可能需要引用一下之前的數據,比如增加學生數需要知道之前的學生數
  new是新插入的數據,old是原來的數據【插入的時候沒有舊數據,刪除沒有新數據,更新既有舊又有新。(這里指的是事件類型)】
  使用odl/new.字段名來引用數據。(注意引用的是觸發觸發器(事件)的語句的數據)
  下面是一個例子:(當插入學生記錄時,通過new.name獲取新插入的學生的名字,然后將new.name插入到另一個表中)
  create table student(
  id int primary key auto_increment,
  name varchar(15) not null,
  gender varchar(15) not null
  );
 
  create table stu_info(
  name varchar(15) not null
  );
 
  create trigger addCount before insert on student
  for each row
  insert into stu_info values(new.name);
 
  insert into student(name,gender) values("lilei","male");
  select * from stu_info;
  看完上述內容,是不是對使用mysql觸發器的方法有進一步的了解,如果還想學習更多內容。

(編輯:武林網)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 商洛市| 武宣县| 保亭| 万年县| 怀仁县| 太仓市| 塘沽区| 无棣县| 建阳市| 沾化县| 潞城市| 招远市| 永川市| 固镇县| 永康市| 阿巴嘎旗| 宁武县| 葫芦岛市| 昌平区| 盈江县| 呼伦贝尔市| 颍上县| 保山市| 永康市| 宿迁市| 松潘县| 英吉沙县| 临清市| 浦北县| 嵩明县| 宁南县| 霍州市| 越西县| 清水河县| 六安市| 确山县| 德昌县| 宽城| 慈溪市| 南召县| 长沙县|