代码之家  ›  专栏  ›  技术社区  ›  dnolen

MySQL关键问题

  •  0
  • dnolen  · 技术社区  · 15 年前
    CREATE TABLE `django_comments` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `content_type_id` int(11) NOT NULL,
      `object_pk` longtext NOT NULL,
      `site_id` int(11) NOT NULL,
      `user_id` int(11) DEFAULT NULL,
      `user_name` varchar(50) NOT NULL,
      `user_email` varchar(75) NOT NULL,
      `user_url` varchar(200) NOT NULL,
      `comment` longtext NOT NULL,
      `submit_date` datetime NOT NULL,
      `ip_address` char(15) DEFAULT NULL,
      `is_public` tinyint(1) NOT NULL,
      `is_removed` tinyint(1) NOT NULL,
      PRIMARY KEY (`id`),
      KEY `django_comments_content_type_id` (`content_type_id`),
      KEY `django_comments_site_id` (`site_id`),
      KEY `django_comments_user_id` (`user_id`)
    ) ENGINE=MyISAM AUTO_INCREMENT=3 DEFAULT CHARSET=latin1
    

    我正在迁移数据库,以便它可以与我们正在构建的Django应用程序一起使用。以上内容由内置的django comments应用程序生成。我相信我了解这里发生的大部分事情,除了关键部分(我了解主键的用途)。

    5 回复  |  直到 15 年前
        1
  •  2
  •   Andomar    15 年前

    的MySQL文档 create table 清单:

    | {INDEX|KEY} [index_name] [index_type] (index_col_name,...)
      [index_option] ...
    

    所以A KEY 只是另一个词 index .

        2
  •  1
  •   Mads Mobæk    15 年前

    这个 KEY s为这些列创建索引。对索引进行排序并加快搜索速度。但是,每次插入/删除一行时,索引都需要存储空间和维护。出于这个原因,您只能对大量搜索的列或需要特定约束的列进行索引。注意,与主键不同,常规索引不强制值是唯一的。

    在表中,索引列(可能)用于与其他表的联接。在联接表时,DBMS必须在其他表中查找值,如果对列进行索引,则查找速度会更快。

    (注意:由于表使用myisam,因此您将没有“真正的”外键来确保完整性。为此,您需要使用InnoDB和设置关系)

        3
  •  0
  •   Michael Krelin - hacker    15 年前

    KEY S是这里的索引。

        4
  •  0
  •   charstar    15 年前

    KEY 条目指定要索引的一列或多列。不像 PRIMARY KEY ,如果没有其他修饰符,则不能保证它们是唯一的。

        5
  •  0
  •   surajz    15 年前