MySQL默认值为其他字段的值

ari*_*rik 12 mysql default dynamic

我可以,如果可以的话,我如何将MySQL表中字段的默认值设置为另一个字段的值?

事情是:我有数据,每个数据对象在表中都有自己的ID.但是,我希望有可能重新排列数据,改变他们的排序索引,而不改变他们的ID.因此,sort_num默认情况下,该字段应设置为赋予自动递增索引字段的值ID.

提前致谢!

Dan*_*oap 8

我看到两个可能的解决方案:

1.可能性:

sort_num如果未设置,则使用函数简单地忽略:

`SELECT * FROM mytable ORDER BY coalesce(sort_num, id)`
Run Code Online (Sandbox Code Playgroud)

coalesce()返回第一个非null值,因此sort_num如果确实需要重新排序项,则应插入值.

2.可能性:

您编写了一个触发器,如果​​未在insert语句中设置该值,则会自动设置该值:

DELIMITER //

CREATE TRIGGER sort_num_trigger
BEFORE INSERT ON mytable
FOR EACH ROW BEGIN
    DECLARE auto_inc INT;
    IF (NEW.sort_num  is null) THEN
         -- determine next auto_increment value
        SELECT AUTO_INCREMENT INTO auto_inc FROM information_schema.TABLES
        WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME = 'mytable';
        -- and set the sort value to the same as the PK
        SET NEW.sort_num = auto_inc;
    END IF;
END
//
Run Code Online (Sandbox Code Playgroud)

(受此评论的启发)

但是,这可能会遇到并行化问题(同时插入多个查询)