mysql工作台中的外键

时间:2012-02-23 11:26:20

标签: mysql mysql-workbench

我是mysql的初学者,有一个简单的问题。 我的架构中有三个表(书店)。我希望他们之间有关系。 我的表:书籍(book_id,book_name,book_entity),客户(customer_id,customer_name),订单(book_id,customer_id,数量)。 我在订单表中设置了外键如下:

外键名称(book_id和customer_id),参考表(                        “书店”,“书”                   '书店', '顾客')

首先我填写书籍表,但是当我试图在客户表中插入数据时,我有以下错误:

  ERROR 1452: Cannot add or update a child row: a foreign key constraint fails (`bookshop`.`customer`, CONSTRAINT `customer_id` FOREIGN KEY (`customer_id`) REFERENCES `order` (`customer_id`) ON DELETE NO ACTION ON UPDATE NO ACTION)

SQL Statement:

INSERT INTO `bookshop`.`customer` (`customer_id`, `customer_name`, `customer_address`) VALUES (2, 'helen', 'newyork')

我该怎么办?

我的代码:


-- Table `bookshop`.`books`

-- -----------------------------------------------------

CREATE  TABLE IF NOT EXISTS `bookshop`.`books` (

  `book_id` INT NOT NULL ,

  `book_name` VARCHAR(45) NOT NULL ,

  `book_price` DECIMAL NOT NULL ,

  `book_entity` INT NOT NULL ,

  PRIMARY KEY (`book_id`) )

ENGINE = InnoDB;





-- -----------------------------------------------------

-- Table `bookshop`.`customer`

-- -----------------------------------------------------

CREATE  TABLE IF NOT EXISTS `bookshop`.`customer` (

  `customer_id` INT NOT NULL ,

  `customer_name` VARCHAR(45) NOT NULL ,

  `customer_address` VARCHAR(45) NOT NULL ,

  PRIMARY KEY (`customer_id`) )

ENGINE = InnoDB;





-- -----------------------------------------------------

-- Table `bookshop`.`orders`

-- -----------------------------------------------------

CREATE  TABLE IF NOT EXISTS `bookshop`.`orders` (

  `book_id` INT NOT NULL ,

  `customer_id` INT NOT NULL ,

  `quantity` INT NOT NULL ,

  INDEX `book_id` (`book_id` ASC) ,

  INDEX `customer_id` (`customer_id` ASC) ,

  CONSTRAINT `book_id`

    FOREIGN KEY (`book_id` )

    REFERENCES `bookshop`.`books` (`book_id` )

    ON DELETE NO ACTION

    ON UPDATE NO ACTION,

  CONSTRAINT `customer_id`

    FOREIGN KEY (`customer_id` )

    REFERENCES `bookshop`.`customer` (`customer_id` )

    ON DELETE RESTRICT

    ON UPDATE RESTRICT)

ENGINE = InnoDB;

2 个答案:

答案 0 :(得分:0)

您的外键声明似乎已关闭,请提供您用于创建外键的声明。

但是,您似乎创建了一个外键,只允许您在客户订单存在时插入客户。 你可能想要反过来做。

答案 1 :(得分:0)

发生错误的原因是integrity constraints。 问题是您尝试添加带有无效引用的数据集。这主要是因为外键指向不存在的主键。在您的情况下,这可能是因为您正在添加客户,并且客户以某种方式具有无效的引用。 你可能把关系搞混了。 没有关于你们关系的更多信息,它只是在猜测。