任何人都可以帮助我如何从现有的 MS SQL 触发器逻辑中执行 MySQL 触发器逻辑

Can anyone help me out how to perform MySQL trigger logic from existing MS SQL trigger Logic

我有两个 tables,一个是 Master table,每日数据不断加载。另一个是 Audit Table,它会在 Master Table 上发生更新(single/multiple 列更新)时进行跟踪。以下是用于 MS SQL

的逻辑
/*** Mastertable creation **/
CREATE TABLE [dbo].[Master](
    [ID] [uniqueidentifier] primary key NOT NULL DEFAULT (newid()),
    [Name] [varchar](100) ,
    [Status] [varchar](10),
    [Dept] [varchar](10) ) 

/** Inserting Data to Master table ***/
Insert into [dbo].[Master] ([Name],[Status],[Dept]) Values
('AAAA', 'Open','EC'),
('BBBB', 'Closed','CS') 

/** Audit Table creation ***/
CREATE TABLE [dbo].[Orders_Audit](
    [Id] [uniqueidentifier] NOT NULL,
    [ColName] [varchar](50),
    [OldValue] [varchar](200),
    [NewValue] [varchar](200),
    [ModifiedAt] [datetime],
    [ModifiedBy] [varchar](50) ) 
Go

/*** Trigger used based on columns for any updates in Master Table***/

Create TRIGGER [dbo].[Tr_Master]
ON [dbo].[Master]
FOR UPDATE 
AS

BEGIN

        Declare @action varchar(50)

    IF UPDATE([Status])
           BEGIN
                  SET @Action = 'Status'

    Insert into [dbo].[Orders_Audit] (Id,ColName,OldValue,NewValue,ModifiedAt,ModifiedBy)
    select i.Id,@action ,d.[Status] ,i.[Status] ,getdate() ,SUSER_SNAME()
    from inserted i,
    deleted d where i.Id = d.Id
    END


    IF UPDATE([Dept])
           BEGIN
                  SET @Action = 'Dept'

    Insert into [dbo].[Orders_Audit] (Id,ColName,OldValue,NewValue,ModifiedAt,ModifiedBy)
    select i.Id,@action ,d.[Dept] ,i.[Dept] ,getdate() ,SUSER_SNAME()
    from inserted i,
    deleted d where i.Id = d.Id
    END

End

GO

需要在 MySQL 中实现相同的逻辑 提前致谢!!

CREATE TRIGGER trigger_name 
AFTER UPDATE ON Master
FOR EACH ROW
BEGIN
IF NOT (OLD.Status <=> NEW.Status) THEN
    INSERT INTO Orders_Audit (Id, ColName, OldValue, NewValue, ModifiedAt, ModifiedBy)
    SELECT NEW.Id, 'Status', OLD.Status, NEW.Status, NOW(), CURRENT_USER();
END IF;
IF NOT (OLD.Dept <=> NEW.Dept) THEN
    INSERT INTO Orders_Audit (Id, ColName, OldValue, NewValue, ModifiedAt, ModifiedBy)
    SELECT NEW.Id, 'Dept', OLD.Dept, NEW.Dept, NOW(), CURRENT_USER();
END IF;
END

IF NOT (OLD.column <=> NEW.column) 检查列值是否已更改。此表达式是 NULL-safe(而不是 IF OLD.column <> NEW.column)- 即当其中一个值或两个值都为 NULL 时,它会正确检查结果。

PS。 CURRENT_USER() returns 用于身份验证的帐户名。如果您在身份验证期间需要客户端提供的用户名,请改用 USER() 函数。示例:用户可以提供 'john'@'1.2.3.4'(和 USER() return 这个)但是使用的帐户可能是 'john'@'%'(和 CURRENT_USER() return 这个).对于存储的 objects/views CURRENT_USER() 可能 return 不是调用者而是定义者帐户(取决于 SECURITY 属性)。