【发布时间】:2023-12-03 04:38:02
【问题描述】:
我是 mysql 的初学者,有一个简单的问题。 我的架构(书店)中有三个表。我想在他们之间建立关系。 我的表:books(book_id,book_name,book_entity),customer(customer_id,customer_name),orders(book_id,customer_id,quantity)。 我在订单表中设置外键如下:
外键名(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;
【问题讨论】:
-
这是因为您在主表中没有对应的
customer_id,而您以customer_id作为主键。 -
外键名引用表 book_id 'bookshop','books' customer_id 'bookshop','customer' 没有多大意义。重写你是如何定义 goreign 键的。
-
我只想在我的表之间建立关系。外键:我的订单表中的 customer_id 和 book_id。(它们也是主要的)
标签: mysql mysql-workbench