【发布时间】:2021-10-28 14:08:45
【问题描述】:
这是我从另一个开发人员那里得到的由 Postgresql 编写的代码,但是我只能在我的环境中使用 mysql。有谁知道如何将代码从 Postgresql 转换为 Mysql?
只是一个免责声明,我实际上是 sql 的新手,我对下面的代码几乎一无所知 我什至不知道如何创建一个表。这真的让我感到失落。 所以我需要有人帮我把代码转移到mysql,这样我就可以在桌子上做一些实验了
第 1 部分:
1.每次插入数据时声明trigger_set_create_time_update_time()函数
2.更新数据时声明trigger_set_update_time()函数
CREATE OR REPLACE FUNCTION public.trigger_set_create_time_update_time()
RETURNS trigger
LANGUAGE plpgsql
AS $function$
begin
NEW.create_time = NOW() at time zone 'utc' ;
NEW.update_time = NOW() at time zone 'utc' ;
RETURN NEW;
END;
$function$
;
CREATE OR REPLACE FUNCTION public.trigger_set_update_time()
RETURNS trigger
LANGUAGE plpgsql
AS $function$
BEGIN
NEW.update_time = NOW() at time zone 'utc' ;
RETURN NEW;
END;
$function$
;
第二部分:
1.创建一个包含所有变量的表并设置一个主键。
2.创建触发器以在情况合适时调用函数。
CREATE TABLE public.good_info (
id varchar NOT NULL,
"name" varchar NULL,
price int8 NOT NULL,
create_time timestamp NOT NULL,
update_time timestamp NOT NULL,
CONSTRAINT good_info_pk PRIMARY KEY (id)
);
create trigger set_create_time_update_time before
insert
on
public.good_info for each row execute function trigger_set_create_time_update_time();
create trigger set_update_time before
update
on
public.good_info for each row execute function trigger_set_update_time();
【问题讨论】:
-
我建议您提出一个问题,包括样本数据、期望的结果以及触发器应该做什么的清晰解释。
-
如果您问是否有办法自动转换,那么答案是否定的。另外,这个论坛上没有人会为你做这件事。因此,为了回应@GordonLinoff 所说的内容,请针对您在重写代码时遇到的特定问题提出一个重点问题
-
这个问题在我写答案时突然关闭。简短的回答是,在 MySQL 中,您不需要触发器来维护时间戳。阅读本手册以了解如何使用默认行为声明时间戳列:dev.mysql.com/doc/refman/8.0/en/timestamp-initialization.html
-
@BillKarwin 非常感谢您的帮助!
-
@BillKarwin 。 . .问题现已重新打开。
标签: mysql sql postgresql