国产探花免费观看_亚洲丰满少妇自慰呻吟_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觸發器的方法有進一步的了解,如果還想學習更多內容。

(編輯:武林網)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 新泰市| 五原县| 涡阳县| 江孜县| 遂昌县| 牙克石市| 岑溪市| 克山县| 于田县| 舟山市| 科尔| 安顺市| 全南县| 奉化市| 磴口县| 平度市| 邵阳市| 绥芬河市| 乌兰县| 睢宁县| 广饶县| 汉川市| 涪陵区| 开阳县| 昌宁县| 乌鲁木齐县| 怀来县| 南投市| 哈巴河县| 托里县| 黔西县| 友谊县| 堆龙德庆县| 大连市| 若尔盖县| 门头沟区| 龙江县| 张掖市| 芮城县| 大化| 崇义县|