主要练习

时间:2012-01-10 10:25:49

标签: mysql foreign-keys innodb

DROP TABLE IF EXISTS `media_publications`;
CREATE TABLE `media_publications` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `media_id` int(11) NOT NULL,
  `user_id` int(11) NOT NULL,
  `date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `description` varchar(1000) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY (`id`,`user_id`)
) ENGINE=INNODB;

id作为主键是否毫无意义?我是否应该将id + user_id作为主键考虑我需要它作为另一个表的外键?

4 个答案:

答案 0 :(得分:2)

您必须将id作为主键,因为它是AUTO_INCREMENT并且您正在使用InnoDB。您可以在2列上创建一个唯一索引(我将user_id放在第一位)以在子表外键中使用

答案 1 :(得分:0)

并非每个唯一的行组合都应该是主键。 可能你可以这样使用它,但这将是一个尴尬的解决方案。

答案 2 :(得分:0)

明确将主键标记为主键是个好主意。

这样你就不必添加另一个索引,它将部分复制你的主键或用户表的外键(虽然后者当前不存在)。

P.S。许多人似乎将身份字段与主键混淆。标识字段很容易成为主键的一部分(但如果表是InnoDB且字段是自动增量整数,则应该是前缀。)

答案 3 :(得分:0)

在id,user_id上键入是没有意义的,因为主键始终是InnoDB中二级索引中的最后一个键(虽然优化器并不总是利用这一点),并且因为键只能在左侧使用时 - 大部分是指定的。因此,要么仅在user_id上创建密钥,要么在user_id / id上创建唯一的user_id,id。这样,您就可以在查询WHERE id =WHERE user_id =

中使用索引