如何在sqlite3中创建MUL密钥?

如何在sqlite3中创建MUL密钥?,sqlite,key,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 \`

我试图为一个已经存在的使用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”?

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

e、 g:-

/* 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中有很大的不同,它们更灵活,并且只指示存储的数据类型。看

    • e、 g.BIGINT(16)的派生列类型为INTEGER,因此使用了INTEGER

    • 另外请注意,已经使用了AUTOINCREMENT,但是您应该阅读,因为它很可能不是必需的,并且它会导致效率低下/管理费用增加

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

      e、 g:-

      /* 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中有很大的不同,它们更灵活,并且只指示存储的数据类型。看

        • e、 g.BIGINT(16)的派生列类型为INTEGER,因此使用了INTEGER

        • 另外请注意,已经使用了AUTOINCREMENT,但是您应该阅读,因为它很可能不是必需的,并且它会导致效率低下/管理费用增加