[英]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_id
和upload_id
的唯一組合,因為每條記錄都將具有不同的upload_id
。 您仍然可以使用此設置實現級聯刪除。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.