我正在为MySQL数据库创建一个php脚本,我称之为MySQL触发器。
触发器应该影响一张实际上是发票的表格:
因此,当我将名为'date_invoiced'的字段从其NULL默认更新为有效日期时,它会锁定整个记录不被更新,除非您通过MySQL登录获得许可,以便将其更改回来到它的默认值为NULL(有效地“重新打开”发票)
不知道怎么做,任何帮助都会很棒
答案 0 :(得分:0)
添加触发器对于开发保留强制参照完整性的复杂MySQL数据库至关重要。外键无法处理可能涉及多个列的复杂情况(例如item_id和item_type_id方案)。
仅在打开二进制日志记录时创建或删除触发器时才需要SUPER 。
原因似乎与复制问题有关(MySQL 5.0文档)。
请阅读此link以...&这个帖子Applying column permissions for a table over a trigger,Can'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 ;