我有两个表,新表和已注册表,我想要的是在对布尔值进行更新(已接受= 1,将其发送到已注册)时以及在信息重新插入后将注册的新内容。要再次注册删除相同的对象,请尝试创建一个可以执行此操作的触发器,但是尽管这样做可以使我很好地保存,但触发器不会前进并且不会执行操作
BEGIN
CREATE TRIGGER `trigger_1` AFTER UPDATE ON `new`
FOR EACH ROW INSERT INTO registered (Num_Registered, Name_Registered, Type_Id, Semes_Registered, Fac_Registered, Pass) SELECT Mat_New, Name_New, Id_New, Semes_New, Fac_New, Pass_New FROM new WHERE Accepted=1;
DELETE FROM new WHERE Accepted=1 OR Accepted=0;//Here taking into account that 0 is rejected and deleted, and 1 is accepted and sent to registered
END;
以相同的方式,我尝试制作2个触发器(一个触发器将一个表插入到另一个表,然后另一个触发器在插入后首先删除了表中的表),但它们仅彼此冲突*错误1442-无法更新存储函数/触发器中的新表,因为调用该存储函数/触发器的语句已在使用该表
CREATE TRIGGER `trigger_1` BEFORE UPDATE ON `new`
FOR EACH ROW INSERT INTO registered (Num_Registered, Name_Registered, Type_Id, Semes_Registered, Fac_Registered, Pass) SELECT Mat_New, Name_New, Id_New, Semes_New, Fac_New, Pass_New FROM new WHERE Accepted=1;
CREATE TRIGGER `trigger_2` AFTER UPDATE ON `new`
FOR EACH ROW DELETE FROM new WHERE Accepted=1 OR Accepted=0;//Here taking into account that 0 is rejected and deleted, and 1 is accepted and sent to registered
答案 0 :(得分:0)
显然,插入到registrations
表中很简单。而且我能理解您为什么要这样做的原因。例如,您可能具有“被接受”人员的其他数据。您可能只希望外键关系“被接受”。
挑战在于您希望update
变成delete
。我认为在MySQL触发器中这是不可能的。但是一个简单的替代方法是只使用视图:
create view v_new as
select n.*
from new n
where n.accepted <> 1;
这还具有以下优点:即使使用视图的用户看不到新用户,您也可以对其进行记录。