我正在設計一個消息系統。mysql,將列「id」(自動增量)的值設置爲列B的默認值
在我存儲消息的表中,message_id
列是自動遞增的。
我有另一列message_reference_id
。 我希望它的默認值是message_id
。
如何設置?
我正在設計一個消息系統。mysql,將列「id」(自動增量)的值設置爲列B的默認值
在我存儲消息的表中,message_id
列是自動遞增的。
我有另一列message_reference_id
。 我希望它的默認值是message_id
。
如何設置?
您不能將默認值設置爲另一列中的值。相反,如果您的列不是NULL,則可以將其更改爲可空,並將默認值設置爲NULL。然後當你選擇它時,使用這個:
SELECT IFNULL(message_reference_id, message_id) AS message_reference_id
FROM your_table
你甚至可以把它放在視圖中。
或者,您可以創建一個更新插入值的trigger。
您可以改爲使用NULL
,並在訪問時使用COALESCE(message_reference_id, message_id)
。
這在一般情況下會給你message_reference_id
。但是,如果是NULL
,則代之以message_id
。
編輯:有了這些知識,您可以使用內部和外部查詢 - 例如在內部查詢中使用COALESCE
技巧,在外部查詢中使用GROUP BY
。
但我不知道這個表現如何,因爲GROUP BY
可能會使用索引,這是不能以這種方式提供的。
當我選擇時,我正在通過message_reference_id進行分組。所以我不能像上面那樣做。所有具有相同message_reference_id的消息都被視爲一個組(我的意思是有回覆),並且父消息將具有等於message_reference_id的message_id – aparna
@aparna:將GROUP BY message_reference_id更改爲GROUP BY IFNULL(message_reference_id,message_id)' –