MySQL InnoDB AUTO_INCREMENT二级列

时间:2015-07-22 18:18:27

标签: php mysql innodb

我正在建立一个系统,用户可以上传他们想要的任何文件,而不是用它来执行任何类型的代码。作为其中的一部分,我重命名每个文件,并将其原始名称存储在MySQL表中。此表包含上载它的用户的ID以及上载的唯一ID。目前我这样做:

CREATE TABLE `uploads` (
    `user_id` INT(11) NOT NULL,
    `upload_id` INT(11) NOT NULL AUTO_INCREMENT,
    `original_name` VARCHAR(30) NOT NULL,
    `mime_type` VARCHAR(30) NOT NULL,
    `name` VARCHAR(50) NOT NULL,
    PRIMARY KEY (`user_id`, `upload_id`)
) ENGINE=MyISAM;

这意味着我将始终拥有user_id和upload_id的唯一组合,并且每个用户首​​次上传的ID都为1.但是我想为user_Id使用外键,所以如果删除用户,其上传将会也被删除。这意味着我必须在InnoDB中完成。我将如何处理,因为上述设置仅适用于MyISAM。

我的用户表(我将从中获取user_id)如下所示:

    CREATE TABLE `".DATABASE."`.`users` (
    `user_id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    `username` VARCHAR(30) NOT NULL,
    `email` VARCHAR(50) NOT NULL,
    `password` CHAR(128) NOT NULL,
    `salt` CHAR(128) NOT NULL 
) ENGINE = InnoDB;

我想要的是上传表格如下所示:

user_id  | upload_id
1        | 1
1        | 2
2        | 1
2        | 2
2        | 3
1        | 3

如果这是有道理的

2 个答案:

答案 0 :(得分:0)

如果我理解正确:

将主键替换为具有两个字段的唯一索引。然后将upload_id作为主键,将user_id作为外键。

答案 1 :(得分:0)

不幸的是,对于这个问题,每个用户的自动增量列不会从1开始。无论任何特定的列值如何,它都会为每个添加的行增加。

编辑:在那里显示我的无知,MyISAM表显然以这种方式多列索引时为每个用户重新开始。 https://dev.mysql.com/doc/refman/5.0/en/example-auto-increment.html

幸运的是,upload_id可能不需要为每个用户从1开始。在该列上使用自动增量意味着您将始终拥有user_idupload_id的唯一组合,即使不使用这两列作为主键,甚至创建唯一索引,因为每条记录都会有不同的upload_id。您仍然可以使用此设置实现级联删除。