加入收藏 | 设为首页 | 会员中心 | 我要投稿 武汉站长网 (https://www.027zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

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

发布时间:2022-10-20 15:31:51 所属栏目:MySql教程 来源:转载
导读: 一、选择数据库
use test;

二、查看当前环境的字符集编码
一定要保证客户端和服务端字符集编码一致,比如表中插入中文时,避免出现乱码!
如果数据库字符集编码是utf8,而插入端是gbk或者

一、选择数据库

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;

mysql触发器_触发器有两种触发方式_上升沿触发和下降沿触发

(编辑:武汉站长网)

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