2011-06-16 129 views
12

我可以,如果可以,我怎样才能将一个MySQL表中的字段的默认值设置为另一个字段的值?MySQL默认值作为其他字段的值

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

在此先感谢!

+0

可能的复制e的[mysql设置字段默认值为其他列](https://stackoverflow.com/questions/15384429/mysql-set-field-default-value-to-other-column) – River 2017-11-05 20:18:39

回答

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启发)

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

3

它是一个坏主意,具有重新自动增量列,因此更好的主意是

添加列sort_num表

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

UPDATE data SET sort_num = ID 

现在用sort_num柱玩,因为它没有影响对列ID

+0

好吧,我从来没有打算有自动增加列重新排列,sort_num只需要另一个值作为默认值,以便重新排列sort_num列,而不会混淆索引和自动增量 – arik 2011-06-16 20:33:27

+1

那么您可以使用上述建议的方法或在服务器上处理侧。像做insert一样,获取last_insert_key然后更新表数据集sort_num = id where id = last_insert_key – 2011-06-16 20:36:59

相关问题