У меня есть таблица, в которой я хочу иметь идентификатор, который будет автоматически увеличиваться, но не быть первичным или уникальным.ID auto увеличивается, но не уникально
Возможно ли это?
У меня есть таблица, в которой я хочу иметь идентификатор, который будет автоматически увеличиваться, но не быть первичным или уникальным.ID auto увеличивается, но не уникально
Возможно ли это?
В этом случае вы должны создать другую таблицу.
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`;
дает результаты что-то вроде этого:?
Это должно работать:
id int NOT NULL AUTO_INCREMENT
Во всяком случае я не вижу, как это не будет оставаться уникальным, если не обновлять существующие значения позже
Да, вам нужно установить 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, not_uniuqe_id, другие ключи – elibyy