MySQL触发器

触发器作用:是一种特殊的存储过程。
当当前表的数据发生改变的时候,会触发某个表的某数据也发生改变。有一种数据同步的样子。
咱们拿案例说话吧:
下面是一个测试表,想要做的是当某个库的这个表的数据发生变化,那么另一个库的这个表的数据也会改变。(前提是在同一个数据库服务器上的2个数据库实例的表)

CREATE TABLE `cc_command_url`
(
	`id` VARCHAR(36) NOT NULL COMMENT '主键 ',
	`title` VARCHAR(200) NULL COMMENT '舆情标题',
	`info_url` VARCHAR(500) NULL COMMENT '舆情URL链接',
	`content` TEXT NULL COMMENT '舆情内容',
	`source_type_name` VARCHAR(100) NULL COMMENT '舆情来源类型名称',
	`website_name` VARCHAR(50) NULL COMMENT '来源网站名称',
	`report_way` CHAR(1) NULL COMMENT '上报渠道:0互联网舆情上报  1内部录入 2舆情发现系统  3舆情监测分析 4态势感知系统 ',
	`reporter` VARCHAR(50) NULL COMMENT '上报人姓名',
	`reporter_tel` VARCHAR(50) NULL COMMENT '上报人联系方式',
	`report_reason` VARCHAR(200) NULL COMMENT '上报原因',
	`report_time` DATETIME NULL COMMENT '上报时间',
	`system_code` VARCHAR(30) NULL COMMENT '系统编号 ',
	CONSTRAINT `PK_cc_command_url` PRIMARY KEY (`id` ASC)
)

新增触发器:

CREATE TRIGGER `cc_command_url_insert` AFTER INSERT ON `cc_command_url` FOR EACH ROW
BEGIN
IF
	@cc_command_url_insert_trigger IS NULL THEN
	SET @cc_command_url_insert_trigger = 1;
INSERT INTO nm_lcs_private.cc_command_url 
( id, cd_id, title, info_url, content, source_type_name, website_name, report_way, reporter, reporter_tel, report_reason, report_time, system_code )
VALUES
	(
		new.id,
		new.cd_id,
		new.title,
		new.info_url,
		new.content,
		new.source_type_name,
		new.website_name,
		new.report_way,
		new.reporter,
		new.reporter_tel,
		new.report_reason,
		new.report_time,
		new.system_code 
	);
END IF;
SET @cc_command_url_insert_trigger = NULL;
END;

修改触发器:

create trigger `cc_command_url_update`
    after insert
    on `cc_command_url`
    for each row
begin
    if @cc_command_url_update_trigger is null then
        set @cc_command_url_update_trigger = 1;
        update nm_lcs_private.cc_command_url b
        set b.title               = new.title,
			b.cd_id               = new.cd_id,
            b.info_url            = new.info_url,
            b.content             = new.content,
            b.source_type_name    = new.source_type_name,
            b.website_name        = new.website_name,
            b.report_way          = new.report_way,
            b.reporter            = new.reporter,
            b.reporter_tel        = new.reporter_tel,
            b.report_reason       = new.report_reason,
            b.report_time         = new.report_time,
            b.system_code         = new.system_code
        where b.id = new.id;
    end if;
    set @cc_command_url_update_trigger = null;
end;

删除触发器:

drop trigger if exists `cc_command_url_delete`;
create trigger `cc_command_url_delete`
    after insert
    on `cc_command_url`
    for each row
begin
    if @cc_command_url_delete_trigger is null then
        set @cc_command_url_delete_trigger = 1;
		delete from nm_lcs_private.cc_command_url where id = old.id;		
    end if;
    set @cc_command_url_delete_trigger = null;
end;

说明:nm_lcs_private是数据库实例,也就是当前库的表的数据变了,nm_lcs_private所对应的表的数据也跟着改变。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值