为什么不简单地有两张桌子?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 与 'S' 或 'P' 的枚举 CHAR(1) 结合使用。您只需要在需要显示时将它们放在一起即可。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;