简体   繁体   中英

What is the alternative for generated column in MySQL 5.6

I have a MySQL alter statement

ALTER TABLE `employee`
ADD `employee_name_generator` CHAR(20) GENERATED ALWAYS AS
    (COALESCE(concat(`employee_name`), '^')) VIRTUAL;

This is needed for adding employee_name_generator in a unique constraint. This works fine in MySQL 5.7 onwards. But the environment where I need this has MySQL 5.6. Is there an alternative for MySQL 5.6?

If your earlier version of MySQL does not support generated columns, then you'll have to compute that column at the time you query. One option would be a view:

CREATE VIEW yourView AS (
    SELECT *, COALESCE(CONCAT(employee_name, '^')) AS employee_name_generator
    FROM employee
)

MySQL does not support materialized views (directly). So, if you really needed the behavior of a materialized view, you would have to do something like create a temporary table using the select logic in the view I gave above.

You can use triggers as a workaround and achieve similar results.

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
//

If you will also be updating the employee_name field after the insert, you'll also need a trigger on update:

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
//

Keep in mind that in MySQL 5.6, per table you get only one trigger for before insert and one for update, so if you need more than one generated column, you would chain the set statements into the same trigger between "begin" and "end".

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM