1

我正在尝试为使用 MySQL 的现有 python 应用程序提供对 sqlite3 的支持。MySQL 中有一个查询,我想在 sqlite3 中转换它以创建一个表,该表将它的两个列作为 MUL 键。

在 MySQL 中,我们可以这样做:

CREATE TABLE messages (
    id BIGINT(16) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, 
    group_id INTEGER, 
    feat VARCHAR(36), 
    KEY \`field\` (\`group_id\`), 
    KEY \`feature\` (\`feat\`)
)

如何在 sqlite3 中编写相同的查询?如何在 sqlite3 中创建多键“MUL”?

4

1 回答 1

0

我相信你有3种方法。如果 MUL 应该是唯一的,则有 2 个选项,如果不需要唯一性,则有另一个选项。

例如:-

/* Unique constraint and therefore an auto-created index */
CREATE TABLE messages1 (
    id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, 
    group_id INTEGER, feat TEXT, 
    UNIQUE(group_id, feat)
);

/* Unique constraint not required and therefore just an index */
CREATE TABLE messages2 (
    id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, 
    group_id INTEGER, feat TEXT 
);
CREATE INDEX messages_idx01 ON messages2 (group_id,feat);

/* A specifically named UNIQUE index */
CREATE TABLE messages3 (
    id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, 
    group_id INTEGER, feat TEXT 
);
CREATE UNIQUE INDEX messages_idx02 ON messages3 (group_id,feat);
  • 请注意,已使用派生列类型。

    • 也就是说,列类型(类型亲和性)在 SQLite 中是完全不同的,它们更加灵活,并且仅指示存储的数据类型。请参阅SQLite 版本 3 中的数据类型

    • 例如,BIGINT(16) 有一个派生列类型 INTEGER,因此使用了 INTEGER。

    • 另请注意,已经使用了 AUTOINCREMENT,但是您应该阅读SQLite Autoincrement,因为它很可能不是必需的,并且它会导致效率低下/开销。
于 2019-10-01T22:39:04.817 回答