加入收藏 | 设为首页 | 会员中心 | 我要投稿 天瑞地安资讯网_保定站长网 (https://www.52baoding.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

MySql触发器之--主表记录删除并备份以及相关联子表记录自动删除

发布时间:2022-10-24 11:17:55 所属栏目:MySql教程 来源:
导读:  一、选择数据库

  use test;

  二、查看当前环境的字符集编码

  一定要保证客户端和服务端字符集编码一致,比如表中插入中文时,避免出现乱码!

  如果数据库字符集编码是utf8,而插入端
  一、选择数据库
 
  use test;
 
  二、查看当前环境的字符集编码
 
  一定要保证客户端和服务端字符集编码一致,比如表中插入中文时,避免出现乱码!
 
  如果数据库字符集编码是utf8,而插入端是gbk或者说反过来,二者就会冲突,最后造成表中的数据中文乱码
 
  mysql> show variables like '%character%';
 
  +--------------------------+-----------------------------------------------+
 
  | Variable_name | Value |
 
  +--------------------------+-----------------------------------------------+
 
  | character_set_client | utf8 |
 
  | character_set_connection | utf8 |
 
  | character_set_database | utf8 |
 
  | character_set_filesystem | binary |
 
  | character_set_results | utf8 |
 
  | character_set_server | utf8 |
 
  | character_set_system | utf8 |
 
  | character_sets_dir | E:\wamp\bin\mysql\mysql5.6.12\share\charsets\ |
 
  +--------------------------+-----------------------------------------------+
 
  mysql触发器_上升沿触发和下降沿触发_触发器有两种触发方式
 
  三、创建表
 
  (1)主表A:
 
  create table A
 
  (id int not null auto_increment primary key,
 
  name varchar(10) not null
 
  );
 
  mysql触发器_上升沿触发和下降沿触发_触发器有两种触发方式
 
  (2)子表B(和表A通过a_id关联)
 
  create table B
 
  (id int not null auto_increment primary key,
 
  a_id int not null,
 
  job varchar(20) not null
 
  );
 
  上升沿触发和下降沿触发_mysql触发器_触发器有两种触发方式
 
  (3)A表删除记录的备份表A_del_bak
 
  create table A_del_bak
 
  (id int not null ,
 
  name varchar(10) not null,
 
  delTime datetime
 
  );
 
  上升沿触发和下降沿触发_mysql触发器_触发器有两种触发方式
 
  四、插入表数据
 
  insert into A(name) values('appleyk');
 
  insert into A(name) values('张三');
 
  insert into A(name) values('李四');
 
  insert into B values(1,1,'Java');
 
  insert into B values(2,2,'Delphi');
 
  insert into B values(3,3,'C++');
 
  上升沿触发和下降沿触发_触发器有两种触发方式_mysql触发器
 
  五、使用内连接inner join连接A和B,组合查询数据
 
  select a.id as aid,b.id as bid,a.name,b.job from A a inner join B b on a.id=b.a_id;
 
  触发器有两种触发方式_上升沿触发和下降沿触发_mysql触发器
 
  六、为表A创建一个触发器,基于删除操作,目的是在删除数据前
 
  (1)备份要删除的数据到表A_del_bak,并记录删除数据的时间
 
  (2)同时删除与表A关联的子表B中,和A相关的记录
 
  delimiter @
 
  drop trigger if exists A_DEL_BEFORE;
 
  create trigger A_DEL_BEFORE before delete on A for each row
 
  begin
 
  insert into A_del_bak select id,name,now() from A where id = old.id;
 
  delete from B where a_id = old.id;
 
  end;
 
  @
 
  mysql触发器_触发器有两种触发方式_上升沿触发和下降沿触发
 
  mysql默认的一条语句执行完,是';',如果执行的是一个代码块的话,需要修改分隔符mysql触发器,否则,代码块中遇到';'号就结束,导致你死活不能完整的创建一个存储过程或者一个触发器,因此,我们需要在一开始,指定一个分隔符为'@',最后创建完我们的代码块后,再以'@'结尾,这样的话,才能创建我们的触发器A_DEL_BEFORE
 
  用完,记得,将delimiter再置回来
 
  七、删除A表中,id = 1的记录
 
  (1)删除前,看一眼记录集
 
  select*from A;
 
  触发器有两种触发方式_上升沿触发和下降沿触发_mysql触发器
 
  (2)执行删除
 
  delete from A where id=1;
 
  上升沿触发和下降沿触发_mysql触发器_触发器有两种触发方式
 
  (3)删除后,触发器A_DEL_BEFORE的作用效果如下
 
  A. 表A_del_bak增加了一条记录,来自于表A的记录删除
 
  select*from A_del_bak;
 
  触发器有两种触发方式_上升沿触发和下降沿触发_mysql触发器
 
  B.同时表B中,关于a_id = 1的记录被移除
 
  select*from B where a_id = 1;
 
  C.我们再一次用A和B内连接,组合查询数据如下
 
  select a.id as aid,b.id as bid,a.name,b.job from A a inner join B b on a.id=b.a_id;
 
 

(编辑:天瑞地安资讯网_保定站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!