我可以,如果可以的话,如何将MySQL表中字段的默认值设置为另一个字段的值?
事情是:我有数据,每个数据对象在表中都有自己的ID。但是,我希望有可能重新排列数据,改变他们的排序索引,而不改变他们的ID。因此,默认情况下,字段sort_num
应设置为自动递增的索引字段ID
的值。
提前致谢!
答案 0 :(得分:8)
我看到两种可能的解决方案:
<强> 1。可能性:强>
如果未设置,则使用函数忽略sort_num
:
`SELECT * FROM mytable ORDER BY coalesce(sort_num, id)`
coalesce()
返回第一个非空值,因此如果您确实需要重新排序项目,则应插入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
//
(灵感来自this comment)
但是,这可能会遇到并行化问题(同时插入多个查询)
答案 1 :(得分:4)
重新安排自动增量列是一个坏主意,因此更好的想法是
将一个列sort_num添加到表
ALTER TABLE data ADD sort_num column-definition; (column definition same as ID)
UPDATE data SET sort_num = ID
现在使用sort_num列,因为它对列ID没有影响