如何在sqlite3中创建MUL密钥?

时间:2019-10-01 21:33:48

标签: sqlite key

我试图为使用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”?

1 个答案:

答案 0 :(得分:0)

我相信您有3种方法。如果MUL应该唯一,则有2种选择;如果不需要唯一性,则有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中完全不同,它们更加灵活,并且仅指示存储的数据类型。参见Datatypes In SQLite Version 3

    • 例如BIGINT(16)具有派生的INTEGER列类型,因此已使用INTEGER。

    • 还请注意,已经使用了AUTOINCREMENT,但是您应该阅读SQLite Autoincrement,因为很有可能不需要它,并且会带来效率低下/开销。