簡體   English   中英

MySQL InnoDB AUTO_INCREMENT二級列

[英]MySQL InnoDB AUTO_INCREMENT secondary column

我正在建立一個系統,用戶可以上傳他們想要的任何文件,而不是用它來執行任何類型的代碼。 作為其中的一部分,我重命名每個文件,並將其原始名稱存儲在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

如果這是有道理的

如果我理解正確:

將主鍵替換為具有兩個字段的唯一索引。 然后將upload_id作為主鍵,將user_id作為外鍵。

不幸的是,對於這個問題,每個用戶的自動增量列不會從1開始。 無論任何特定的列值如何,它都會為每個添加的行增加。

編輯:在那里顯示我的無知,當一個多列索引這樣時,MyISAM表顯然將從每個用戶的1開始。 https://dev.mysql.com/doc/refman/5.0/en/example-auto-increment.html

幸運的是,對於每個用戶, upload_id可能不需要從1開始。 在該列上使用自動增量意味着即使不使用兩列作為主鍵,甚至創建唯一索引,也始終具有user_idupload_id的唯一組合,因為每條記錄都將具有不同的upload_id 您仍然可以使用此設置實現級聯刪除。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM