2011-12-05 20 views

回答

1

我從ejabberd 2.1.x分支中查看了當前的mysql.sql以獲取更多上下文,其中https://github.com/processone/ejabberd/blob/2.1.x/src/odbc/mysql.sql

CREATE TABLE spool (
     username varchar(250) NOT NULL, 
     xml text NOT NULL, 
     seq BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE, 
     created_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP 
    ) CHARACTER SET utf8; 

它看起來像「序列」列是一個唯一的標識符,可以用同樣的方式,只是沒有外鍵引用可以對它進行一個主鍵。我期望這不重要,因爲當你需要通過外鍵約束的方式在另一個mysql表中引用特定的脫機消息時,ejabberd從來沒有過這樣的時間。

我確定processone有人對此產生了一種意見,導致了唯一的約束而不是主鍵。經過與mod_offline_odbc的廣泛合作,我可以向您保證,如果將「primary_key(seq)」添加到假脫機表定義並刪除seq列上的冗餘唯一約束,那麼它對ejabberd沒有任何影響。

+0

我只是試過,我的假脫機停止填充 – blueberryfields

+0

這是非常好奇,我不知道如何解釋它。是否有任何理由你需要一個主鍵而不是唯一的約束? –

+0

我使用拒絕與沒有PK的表一起工作的工具/庫監視表。我猜這是該工具中的一個錯誤。 – blueberryfields

相關問題