0

这是一个错误(我可以为它手动创建一个 PK),还是这是一个功能?

4

1 回答 1

1

我在https://github.com/processone/ejabberd/blob/2.1.x/src/odbc/mysql.sql查看了 ejabberd 2.1.x 分支中的当前 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;

看起来“seq”列是一个唯一标识符,可以像主键一样使用,除了不能对其进行外键引用。我认为这并不重要,因为在 ejabberd 中从来没有时间需要通过外键约束通过另一个 mysql 表中的序列号来引用特定的离线消息。

我敢肯定 processone 的某个人对此有意见,这导致了唯一约束而不是主键。与 mod_offline_odbc 广泛合作后,我可以向您保证,如果您将“primary_key(seq)”添加到假脱机表定义并删除 seq 列上的冗余唯一约束,它不会对 ejabberd 产生影响。

于 2012-02-01T18:33:26.710 回答