2013-12-15 33 views
1

我有一個表,我想有一個ID會自動增加自己,但不是主要或唯一的。ID自動增加但不是唯一

這可能嗎?

+0

爲什麼........... –

+0

你是什麼意思通過「不是主要的還是獨特的」? –

+0

你可以有id,not_uniuqe_id,其他鍵 – elibyy

回答

2

在這種情況下,您應該真的創建另一個表。

E.g.

CREATE TABLE `Calls` (
    `Id`  INT(10)  AUTO_INCREMENT, 
    `From` VARCHAR(100) NOT NULL, 
    `To`  VARCHAR(100) NOT NULL, 

    PRIMARY KEY (`Id`) 
) ENGINE=INNODB; 

CREATE TABLE `CallHistory` (
    `Id`  INT(15)  AUTO_INCREMENT, 
    `CallId` INT(10)  NOT NULL, 
    `Text` VARCHAR(255) NOT NULL, 

    PRIMARY KEY (`Id`), 
    KEY `CallHistory_Calls_idx` (`CallId`), 
    CONSTRAINT `CallHistory_Calls` 
    FOREIGN KEY (`CallId`) 
    REFERENCES `calls` (`Id`) 
    ON DELETE CASCADE 
    ON UPDATE CASCADE 
) ENGINE=INNODB; 

這裏是關於SQLFiddle的a demo

這樣做的好處是,如果從Calls刪除一行,CallHistory中的行也將被刪除。


運行此查詢:

SELECT `Calls`.`Id`, 
     `Calls`.`From`, 
     `Calls`.`To`, 
     `CallHistory`.`Text` 

FROM `Calls`, `CallHistory` 
WHERE `Calls`.`Id` = `CallHistory`.`CallId`; 

給出的結果是這樣的:?

0

這應該工作:

id int NOT NULL AUTO_INCREMENT 

反正我看不出,除非你更新現有的值不會留下獨特的後

0

是的,你需要設置auto_increment約束:

CREATE TABLE `test` (
    `testID` int(11) NOT NULL, //primary key here 
    `testInc` int(11) NOT NULL AUTO_INCREMENT, //here is your non-primary auto increment column 
    PRIMARY KEY (`testID`), 
    KEY `testInc` (`testInc`) 
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8; 

如果您希望此功能也是唯一的,那麼您可以添加唯一約束:

ALTER TABLE `test` ADD CONSTRAINT ux_unique_constraint UNIQUE `testInc`