ALTER TABLE `employee`
ADD `employee_name_generator` CHAR(20);
delimiter //
create trigger trig_create_employee_name_generator before insert on `employee`
for each row
begin
set NEW.`employee_name_generator` = COALESCE(concat(NEW.`employee_name`), '^');
end
//
如果插入后还将更新employee\u name字段,则还需要一个更新触发器:
delimiter //
create trigger trig_update_employee_name_generator before update on `employee`
for each row
begin
set NEW.`employee_name_generator` = COALESCE(concat(NEW.`employee_name`), '^');
end
//
2条答案
按热度按时间ar5n3qh51#
您可以使用触发器作为解决方法,并获得类似的结果。
如果插入后还将更新employee\u name字段,则还需要一个更新触发器:
请记住,在MySQL5.6中,每个表只有一个用于插入前的触发器和一个用于更新的触发器,因此如果需要多个生成的列,可以将set语句链接到“begin”和“end”之间的同一个触发器中。
zujrkrfu2#
如果早期版本的mysql不支持生成的列,那么您必须在查询时计算该列。一个选项是视图:
mysql不支持物化视图(直接)。因此,如果您真的需要一个物化视图的行为,那么您必须使用上面给出的视图中的select逻辑创建一个临时表。