爲什麼不能簡單地有兩個表?一個用於S成員,另一個用於P成員。您可以使用零填充的ID。如果數字必須是唯一的,即您不希望S000001和P000001都存在,請使用另一個表來存儲唯一的ID並將它們引用到S和P表中。
喜歡的東西:
-- Table `ids`
CREATE TABLE IF NOT EXISTS `ids` (
`master_id` INT ZEROFILL NOT NULL AUTO_INCREMENT ,
`member_type` ENUM('S','P') NULL ,
PRIMARY KEY (`master_id`))
ENGINE = InnoDB;
-- Table `s_type`
CREATE TABLE IF NOT EXISTS `s_type` (
`s_type_id` INT NOT NULL ,
`master_id` INT NULL ,
PRIMARY KEY (`s_type_id`) ,
INDEX `fk_s_type_1` (`s_type_id` ASC) ,
CONSTRAINT `fk_s_type_1`
FOREIGN KEY (`s_type_id`)
REFERENCES `ids` (`master_id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
-- Table `s_type_copy1`
CREATE TABLE IF NOT EXISTS `s_type_copy1` (
`p_type_id` INT NOT NULL ,
`master_id` INT NULL ,
PRIMARY KEY (`p_type_id`) ,
INDEX `fk_s_type_copy1_1` (`p_type_id` ASC) ,
CONSTRAINT `fk_s_type_copy1_1`
FOREIGN KEY (`p_type_id`)
REFERENCES `ids` (`master_id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
如果你想要去的真正簡單,只需使用一個自動遞增的ID並採用枚舉CHAR(1)「S」或「P」。當你需要顯示時,你只需要把它們放在一起。 CHAR(1)列可用於確定成員資格類型。
如果您不打算添加更多的成員類型,您甚至可以使用TINYINT作爲布爾值(0 ='S',1 ='P')。
-- Table `ids`
CREATE TABLE IF NOT EXISTS `ids` (
`member_id` INT ZEROFILL NOT NULL AUTO_INCREMENT ,
`member_type` ENUM('S','P') NULL ,
PRIMARY KEY (`member_id`))
ENGINE = InnoDB;
......或者......
-- Table `ids`
CREATE TABLE IF NOT EXISTS `ids` (
`member_id` INT ZEROFILL NOT NULL AUTO_INCREMENT ,
`member_type` TINYINT ,
PRIMARY KEY (`member_id`))
ENGINE = InnoDB;
下面是一個簡單的答案 http://stackoverflow.com/questions/611340/how-can-i-set- autoincrement-format-to-0001-in-mysql –