我可以,如果可以,我怎樣才能將一個MySQL表中的字段的默認值設置爲另一個字段的值?MySQL默認值作爲其他字段的值
事情是:我有數據,每個數據對象在表中有它的ID。但是,我希望能夠重新排列數據,改變它們的排序索引,而不改變它們的ID。因此,字段sort_num
應默認設置爲賦予自動遞增索引字段ID
的值。
在此先感謝!
我可以,如果可以,我怎樣才能將一個MySQL表中的字段的默認值設置爲另一個字段的值?MySQL默認值作爲其他字段的值
事情是:我有數據,每個數據對象在表中有它的ID。但是,我希望能夠重新排列數據,改變它們的排序索引,而不改變它們的ID。因此,字段sort_num
應默認設置爲賦予自動遞增索引字段ID
的值。
在此先感謝!
我看到這兩個可能的解決方案:
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啓發)
但是,這可能會遇到並行化問題(同時插入多個查詢)
它是一個壞主意,具有重新自動增量列,因此更好的主意是
添加列sort_num表
ALTER TABLE data ADD sort_num column-definition; (column definition same as ID)
UPDATE data SET sort_num = ID
現在用sort_num柱玩,因爲它沒有影響對列ID
好吧,我從來沒有打算有自動增加列重新排列,sort_num只需要另一個值作爲默認值,以便重新排列sort_num列,而不會混淆索引和自動增量 – arik 2011-06-16 20:33:27
那麼您可以使用上述建議的方法或在服務器上處理側。像做insert一樣,獲取last_insert_key然後更新表數據集sort_num = id where id = last_insert_key – 2011-06-16 20:36:59
可能的複製e的[mysql設置字段默認值爲其他列](https://stackoverflow.com/questions/15384429/mysql-set-field-default-value-to-other-column) – River 2017-11-05 20:18:39