我有一张桌子,我想要一个自动增加但不是主要或唯一的ID。
这可能吗?
答案 0 :(得分: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`;
给出如下结果:
答案 1 :(得分:0)
这应该有效:
id int NOT NULL AUTO_INCREMENT
无论如何,除非您稍后更新现有值,否则我不会看到它不会保持唯一
答案 2 :(得分: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`