Как создать ключ MUL в sqlite3? - PullRequest
1 голос
/ 02 октября 2019

Я пытаюсь обеспечить поддержку sqlite3 для уже существующего приложения на Python, использующего MySQL. В 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? Как я могу создать множественный ключ 'MUL' в sqlite3?

1 Ответ

0 голосов
/ 02 октября 2019

Я считаю, что у вас есть 3 пути. 2 варианта, если MUL должен быть уникальным, и другой, если уникальность не требуется.

например: -

/* 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 , так как это, скорее всего, не потребуется, и что это приводит к неэффективности / накладным расходам.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...