ID自动增加但不是唯一的

时间:2013-12-15 09:18:20

标签: php mysql unique

我有一张桌子,我想要一个自动增加但不是主要或唯一的ID。

这可能吗?

3 个答案:

答案 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`