正在将 MySQL Workbench 传输到服务器
Transferring MySQL Workbench to Server
我正在尝试将我的数据库模型从 mysql workbench 移动到 mysql 服务器。我正在使用逆向工程师 sql 创建脚本,但在导入时出现错误。我已经尝试 google 这个问题,但我的情况并不走运。
-- -----------------------------------------------------
-- Table `MapLibrary`.`Books`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `MapLibrary`.`Books` ;
CREATE TABLE IF NOT EXISTS `MapLibrary`.`Books` (
`ISBN` VARCHAR(13) NOT NULL,
`date_of_publication` INT NULL,
`book_title` VARCHAR(45) NULL,
PRIMARY KEY (`ISBN`))
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `MapLibrary`.`Genre`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `MapLibrary`.`Genre` ;
CREATE TABLE IF NOT EXISTS `MapLibrary`.`Genre` (
`genre_code` INT NOT NULL,
`genre_name` VARCHAR(45) NOT NULL,
PRIMARY KEY (`genre_code`))
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `MapLibrary`.`Books_By_Genre`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `MapLibrary`.`Books_By_Genre` ;
CREATE TABLE IF NOT EXISTS `MapLibrary`.`Books_By_Genre` (
`genre_code` INT NOT NULL,
`ISBN` VARCHAR(13) NOT NULL,
PRIMARY KEY (`genre_code`, `ISBN`),
INDEX `Books_idx` (`ISBN` ASC),
CONSTRAINT `Books`
FOREIGN KEY (`ISBN`)
REFERENCES `MapLibrary`.`Books` (`ISBN`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `Genre`
FOREIGN KEY (`genre_code`)
REFERENCES `MapLibrary`.`Genre` (`genre_code`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
错误:
ERROR 1022 (23000) at line 89: Can't write; duplicate key in table 'books_by_genre'
Operation failed with exitcode 1
问题是 ISBN 在引用的 table 中本身并不是唯一标识符。
我假设,书籍 table 是您的基础 table,三个引用的 table 是 M:N link table秒。如果这是真的,那么你的外键指向了错误的方向。 (尝试将连接向另一个方向拖动?)
我正在尝试将我的数据库模型从 mysql workbench 移动到 mysql 服务器。我正在使用逆向工程师 sql 创建脚本,但在导入时出现错误。我已经尝试 google 这个问题,但我的情况并不走运。
-- -----------------------------------------------------
-- Table `MapLibrary`.`Books`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `MapLibrary`.`Books` ;
CREATE TABLE IF NOT EXISTS `MapLibrary`.`Books` (
`ISBN` VARCHAR(13) NOT NULL,
`date_of_publication` INT NULL,
`book_title` VARCHAR(45) NULL,
PRIMARY KEY (`ISBN`))
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `MapLibrary`.`Genre`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `MapLibrary`.`Genre` ;
CREATE TABLE IF NOT EXISTS `MapLibrary`.`Genre` (
`genre_code` INT NOT NULL,
`genre_name` VARCHAR(45) NOT NULL,
PRIMARY KEY (`genre_code`))
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `MapLibrary`.`Books_By_Genre`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `MapLibrary`.`Books_By_Genre` ;
CREATE TABLE IF NOT EXISTS `MapLibrary`.`Books_By_Genre` (
`genre_code` INT NOT NULL,
`ISBN` VARCHAR(13) NOT NULL,
PRIMARY KEY (`genre_code`, `ISBN`),
INDEX `Books_idx` (`ISBN` ASC),
CONSTRAINT `Books`
FOREIGN KEY (`ISBN`)
REFERENCES `MapLibrary`.`Books` (`ISBN`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `Genre`
FOREIGN KEY (`genre_code`)
REFERENCES `MapLibrary`.`Genre` (`genre_code`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
错误:
ERROR 1022 (23000) at line 89: Can't write; duplicate key in table 'books_by_genre'
Operation failed with exitcode 1
问题是 ISBN 在引用的 table 中本身并不是唯一标识符。
我假设,书籍 table 是您的基础 table,三个引用的 table 是 M:N link table秒。如果这是真的,那么你的外键指向了错误的方向。 (尝试将连接向另一个方向拖动?)