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
Во всяком случае, я не вижу, как он не останется уникальным, если вы не обновите существующие значения позже