我是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;
答案 0 :(得分:0)
您的外键声明似乎已关闭,请提供您用于创建外键的声明。
但是,您似乎创建了一个外键,只允许您在客户订单存在时插入客户。 你可能想要反过来做。
答案 1 :(得分:0)
发生错误的原因是integrity constraints。 问题是您尝试添加带有无效引用的数据集。这主要是因为外键指向不存在的主键。在您的情况下,这可能是因为您正在添加客户,并且客户以某种方式具有无效的引用。 你可能把关系搞混了。 没有关于你们关系的更多信息,它只是在猜测。