ID автоматически увеличивается, но не уникален

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

Это возможно?

3 ответа

Решение

Вы должны действительно создать другую таблицу, в этом случае.

Например

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.

Преимущество этого заключается в том, что если вы удалите строку из Calls, строки в CallHistory также будет удален.


Выполнение этого запроса:

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

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

Дает результаты примерно так:

Да, вам нужно установить 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`

Это должно работать:

id int NOT NULL AUTO_INCREMENT

Во всяком случае, я не вижу, как он не останется уникальным, если вы не обновите существующие значения позже

Другие вопросы по тегам