2009-12-08 103 views
0
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評論應用程序生成。我相信我理解除了關鍵部分(我理解PRIMARY KEY的目的)之外的大部分情況。MySQL密鑰問題

回答

2

MySQL的文檔create table列表:

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

所以一個KEY僅僅是index另一種說法。

0

KEY s是這裏的索引。

0

A KEY entry指定一個或多個要編制索引的列。與PRIMARY KEY不同,這些不保證在沒有附加修飾符的情況下是唯一的。

1

KEY s爲這些列創建索引。索引排序並加快搜索速度。但是,索引每次插入/刪除行時都需要存儲空間並進行維護。出於這個原因,您只需索引大量搜索的列或需要特定約束的列。請注意,與PRIMARY KEY不同,常規索引不會強制這些值是唯一的。

在您的表中,索引列(可能)用於與其他表的連接。當連接表時,DBMS必須在其他表中查找值,並且如果列被索引,這會更快。

(注:由於表使用的MyISAM,你不會有一個「真實」的外鍵確保完整性對於您需要使用InnoDB和建立關係。)