2013-12-15 3 views
1

У меня есть таблица, в которой я хочу иметь идентификатор, который будет автоматически увеличиваться, но не быть первичным или уникальным.ID auto увеличивается, но не уникально

Возможно ли это?

+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; 

Это a demo на SQLFiddle.

Преимущество этого в том, что если вы удалите строку из 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` 
Смежные вопросы