0

我正在为 MySQL 数据库创建一个 php 脚本,我称之为 MySQL 触发器。

触发器应该影响实际上是发票的表:

因此,当我将一个名为“date_invoiced”的字段从其 NULL 默认值更新为有效日期时,它会
锁定整个记录以防更新,除非您通过 MySQL 登录
获得将其更改回默认 NULL 的权限,(有效地“重新打开'发票)

不知道怎么做,任何帮助都会很棒

4

2 回答 2

0

添加触发器对于开发保留强制引用完整性的复杂 MySQL 数据库至关重要。外键无法处理可能涉及多于一列的复杂情况(例如 item_id 和 item_type_id 场景)。

仅在打开二进制日志记录时创建或删除触发器时才需要SUPER 。

原因似乎与复制问题有关(MySQL 5.0 文档)。

RTMRTM

阅读此链接到...和此线程Applying column permissions for a table over a trigger , Can't create MySQL trigger with TRIGGER privilege on 5.1.32

于 2013-04-24T15:01:20.707 回答
0

你不能把锁放在一行上。我建议你使用TRIGGERon update,如果 date_invoiced 是NOT NULL. 除非用户名是“超人”。我认为你可以按照这个例子编写你想要的代码。

DELIMITER ||

CREATE TRIGGER upd_lock
    BEFORE UPDATE
    ON table_name
    FOR EACH ROW
BEGIN
    IF OLD.date_invoiced IS NOT NULL AND USER() NOT LIKE '\'superman\'@%' THEN
        SIGNAL SQLSTATE VALUE '45000' SET MESSAGE_TEXT = '[upd_lock] - Record is locked';
    END IF;
END;

||
DELIMITER ;
于 2013-04-24T15:57:55.237 回答