更改表名和触发器流程和命令

1、查询旧表的触发器名字从而进行删除旧触发器。

查看当前表的触发器名称 event_object_table = '表名'

-- 查看当前表的触发器名称 event_object_table = '原表名'
SELECT trigger_name, event_object_table
FROM information_schema.triggers
WHERE event_object_table = 'b_project_data';

-- 查看当前表的触发器名称 event_object_table = '新表名'
SELECT trigger_name, event_object_table
FROM information_schema.triggers
WHERE event_object_table = 'bb_project_data';

2、删除旧触发器。

示例:

DROP TRIGGER 触发器名字 ON 设置触发器的表名;

-- 删除旧表触发器 trg_after_delete_content 等是通过查询出触发器的名字,从而进行删除
DROP TRIGGER trg_after_delete_content ON bb_project_data;

DROP TRIGGER trg_after_insert_content ON bb_project_data;

DROP TRIGGER trg_after_update_content ON bb_project_data;

3、修改表名。

示例:

ALTER TABLE OldTableName RENAME TO NewTableName ;

-- 修改表名
ALTER TABLE a_project RENAME TO aa_project;
​
ALTER TABLE b_project_data RENAME TO bb_project_data;
​
ALTER TABLE c_project_data_log RENAME TO cc_project_data_log;

4、更新触发器。

-- 更新触发器语句

CREATE OR REPLACE FUNCTION trg_after_update_content_func() RETURNS TRIGGER AS $$
BEGIN
    INSERT INTO cc_project_data_log (original_id, project_id, original_content, operate_type, update_time)
    VALUES (OLD.id, OLD.project_id, OLD.content, 'UPDATE', NOW());
    RETURN NEW;
END;
$$ LANGUAGE plpgsql;
​
​
CREATE TRIGGER trg_after_update_content
AFTER UPDATE ON bb_project_data
FOR EACH ROW
EXECUTE PROCEDURE trg_after_update_content_func();
​


-- 删除触发器

CREATE OR REPLACE FUNCTION trg_after_delete_content_func() RETURNS TRIGGER AS $$
BEGIN
    INSERT INTO cc_project_data_log (original_id, project_id, original_content, operate_type, update_time)
    VALUES (OLD.id, OLD.project_id, OLD.content, 'DELETE', NOW());
    RETURN OLD;
END;
$$ LANGUAGE plpgsql;
​
​
CREATE TRIGGER trg_after_delete_content
AFTER DELETE ON bb_project_data
FOR EACH ROW EXECUTE PROCEDURE trg_after_delete_content_func();
​


-- 创建插入数据的触发器


CREATE OR REPLACE FUNCTION trg_after_insert_content_func() RETURNS TRIGGER AS $$
BEGIN
    INSERT INTO cc_project_data_log (original_id, project_id,original_content,operate_type,update_time)
    VALUES (NEW.id,NEW.project_id,NEW.content, 'INSERT', NOW());
    RETURN NEW;
END;
$$ LANGUAGE plpgsql;
​
​
CREATE TRIGGER trg_after_insert_content AFTER INSERT ON bb_project_data 
FOR EACH ROW EXECUTE PROCEDURE trg_after_insert_content_func();



删除表所有数据语句:

delete from bb_project_data_log;(错误)

DELETE from bb_project_data_log;(正确)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值