我有这个观点。
CREATE OR REPLACE VIEW `Registry`.`vOrganization` AS
SELECT ro.user_id,
ro.name AS fantasy_name,
ro.state_registration,
ro.county_registration,
ro.reference,
ru.name,
ru.document,
ru.id,
ru.password,
ru.cep,
ru.street,
ru.number,
ru.complement,
ru.district,
ru.city_id
FROM `Registry`.`User` ru
JOIN `Registry`.`Organization` ro ON ru.id = ro.user_id
WHERE length(ru.document) = 14;
这适用于insert语句,但是我只需要创建组织user_id insert,为此我在User表上创建了一个触发器:
DROP TRIGGER `Registry`.`AfterVOrganizationInsert`;
DELIMITER //
CREATE TRIGGER `Registry`.`AfterVOrganizationInsert`
AFTER INSERT
ON `Registry`.`User` FOR EACH ROW
BEGIN
IF(length(NEW.document) = 14) THEN
INSERT INTO `Registry`.`Organization` (user_id) VALUES ( NEW.id );
END IF;
END; //
DELIMITER ;
当在此View中运行插入时收到错误:
SQLSTATE[HY000]: General error: 1442 Can't update table 'Organization' in stored function/trigger beca
use it is already used by statement which invoked this stored function/trigger.
如何进行?我不能直接在User表上插入,并且视图必须返回文档长度为14的所有用户,我尝试使用左连接,可以正常选择,但不能使用insert。
我无法直接插入User表的原因是我们正在从postgres迁移到MySQL并且整个系统以这种方式工作,因为在postgres中我们可以使用而不是在视图上插入。