在phpMyAdmin的MySQL中添加存储列报错,求正确实现方案
解决MySQL生成列添加时“delimiter is missing”报错问题
你遇到的核心问题不是分隔符缺失,而是MySQL的存储生成列(STORED)不允许在表达式中使用子查询,phpMyAdmin返回的报错信息有误导性。
可行解决方案:
方案1:普通列+数据同步+触发器(适合需要永久存储部门数据的场景)
- 先给
leavedata添加普通文本列:
ALTER TABLE leavedata ADD empDept text;
- 同步
empdata中的部门数据到新列:
UPDATE leavedata l INNER JOIN empdata e ON l.empID = e.empID SET l.empDept = e.eDept;
- 若要后续自动同步数据(比如
empdata中部门变更、leavedata新增记录时),创建触发器:
-- 更新empdata时同步leavedata的部门信息 DELIMITER // CREATE TRIGGER sync_dept_after_emp_update AFTER UPDATE ON empdata FOR EACH ROW BEGIN UPDATE leavedata SET empDept = NEW.eDept WHERE empID = NEW.empID; END // DELIMITER ; -- 新增leavedata记录时自动填充部门信息 DELIMITER // CREATE TRIGGER sync_dept_after_leave_insert AFTER INSERT ON leavedata FOR EACH ROW BEGIN SELECT e.eDept INTO NEW.empDept FROM empdata e WHERE e.empID = NEW.empID; END // DELIMITER ;
方案2:创建视图(适合不需要永久存储,只需要实时关联查询的场景)
不用修改原表,直接创建包含部门信息的视图,查询时用视图代替原表即可:
CREATE VIEW leavedata_with_dept AS SELECT l.*, e.eDept AS empDept FROM leavedata l LEFT JOIN empdata e ON l.empID = e.empID;
关于手动添加列的Expression
因为MySQL生成列不支持子查询表达式,所以你想要的“从另一表取数自动填充”的Expression无法直接实现,只能用上面两种方案替代。
内容的提问来源于stack exchange,提问作者SNAD
相关产品推荐
相关产品推荐

