创建锁定和解锁记录的触发器

时间:2013-04-24 14:14:53

标签: mysql triggers locking record

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

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

因此,当我将名为'date_invoiced'的字段从其NULL默认更新为有效日期时,它会锁定整个记录不被更新,除非您通过MySQL登录获得许可,以便将其更改回来到它的默认值为NULL(有效地“重新打开”发票)
  
不知道怎么做,任何帮助都会很棒

2 个答案:

答案 0 :(得分:0)

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

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

SUPER

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

RTM。和RTM

请阅读此link以...&这个帖子Applying column permissions for a table over a triggerCan't create MySQL trigger with TRIGGER privilege on 5.1.32

答案 1 :(得分:0)

你不能锁定一行。我建议您在更新时使用TRIGGER,如果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 ;