MySQL默认值作为其他字段';s值

MySQL默认值作为其他字段';s值,mysql,dynamic,default,Mysql,Dynamic,Default,我可以,如果可以,我如何将MySQL表中一个字段的默认值设置为另一个字段的值 问题是:我有数据,每个数据对象在表中都有它的ID。但是,我希望能够重新排列数据,更改其排序索引,而不更改其ID。因此,默认情况下,字段sort_num应设置为自动递增索引字段ID的值 提前谢谢 重新排列自动递增列是个坏主意,因此最好 向表中添加列排序编号 ALTER TABLE data ADD sort_num column-definition; (column definition same as ID) UP

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

问题是:我有数据,每个数据对象在表中都有它的ID。但是,我希望能够重新排列数据,更改其排序索引,而不更改其ID。因此,默认情况下,字段
sort_num
应设置为自动递增索引字段
ID
的值


提前谢谢

重新排列自动递增列是个坏主意,因此最好

向表中添加列排序编号

ALTER TABLE data ADD sort_num column-definition; (column definition same as ID)

UPDATE data SET sort_num = ID

现在使用sort_num column,因为它对列ID没有影响

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

1。可能性:

如果未设置该函数,则可以使用该函数忽略排序数值:

`SELECT * FROM mytable ORDER BY coalesce(sort_num, id)`
coalesce()
返回第一个非空值,因此,如果确实需要对项目重新排序,可以为
sort\u 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
//
(灵感来自)


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

嗯,我从来没有打算重新排列自动增量列,sort_num只需要将另一个的值作为默认值,以便重新排列sort_num列,而不会弄乱索引和自动递增。您可以使用上述建议的方法或在服务器端处理此问题。与执行insert类似,获取last_insert_键,然后更新表数据集sort_num=id,其中id=last_insert_键可能重复