CREATE TABLE Bagel (
  BagelID CHAR(2) NOT NULL,
  BagelName VARCHAR(30),
  BagelPrice DECIMAL(4,2),
  BagelDesc VARCHAR(30),
  PRIMARY KEY (BagelID));
  
CREATE TABLE Customer (
  CustID INT NOT NULL,
  FirstName VARCHAR(30),
  LastName VARCHAR(60),
  Address1 VARCHAR(60),
  Address2 VARCHAR(60),
  City VARCHAR(30),
  State CHAR(2),
  Zip INT,
  MobilePhone VARCHAR(30),
  PRIMARY KEY (CustID));

CREATE TABLE BagelOrder (
  BagelOrderID SMALLINT NOT NULL,
  CustID INT NOT NULL,
  OrderDate DATE, 
  DeliveryFee DECIMAL(4,2),
  SpecNotes VARCHAR(60),
  PRIMARY KEY (BagelOrderID),
  FOREIGN KEY (CustID) REFERENCES Customer(CustID));

CREATE TABLE BagelOrderLineItem (
  BagelOrderID SMALLINT NOT NULL,
  BagelID CHAR(2) NOT NULL,
  BagelQuantity TINYINT,
  PRIMARY KEY (BagelOrderID, BagelID),
  FOREIGN KEY (BagelOrderID) REFERENCES BagelOrder(BagelOrderID)
);

INSERT INTO BagelOrder (BagelOrderID, CustID, OrderDate, DeliveryFee, SpecNotes)
VALUES
  (1, 1, '2023-12-07', 5.99, 'Add Cream Cheese'),
  (2, 2, '2023-12-07', 5.99, NULL),
  (3, 3, '2023-12-14', 6.99, NULL);

INSERT INTO BagelOrderLineItem (BagelOrderID, BagelID, BagelQuantity)
VALUES
  (1, 'RB', 5),
  (2, 'EB', 2),
  (3, 'CB', 1),
  (3, 'NB', 2);
  
INSERT INTO Customer (CustID, FirstName, LastName, Address1, Address2, City, State, Zip, MobilePhone)
  (1, 'Bryn', NULL, '123 ABC Street', NULL, 'Salt Lake City', 'UT', 84101, '8011234567'),
  (2, 'Santa', 'Clause', '1234 S Pole St', NULL, 'Vernal', 'UT', 84078, '8018001234'),
  (3, 'Jane', 'Doe', '1000 W Street', NULL, 'New York City', 'NY', 10000, '8001231234');

INSERT INTO Bagel (BagelID, BagelName, BagelPrice, BagelDesc)
VALUES
  ('RB', 'Radically Raisin Bagel', 2.00, 'Raisin Bagel'),
  ('EB', 'All the Stuff Bagel', 2.35, 'Everything Bagel'),
  ('CB', 'Chip Off the Block Bagel', 2.25, 'Chocolate Chip Bagel'),
  ('MB', "Keepin' It Healthy Bagel", 2.00, 'Multigrain Bagel'),
  ('NB', 'Classic New York Bagel', 1.75, 'New York Bagel');

错误消息显示"无法添加或更新子行:外键约束失败(db_9_dc8b6f4.bagelorder,约束bagelorder_ibfk_1外键(CustID)引用customer(CustID))"

所以我认为我的Customer表上的外键有问题,但我找不出它是什么.

推荐答案

基于这个和other question you asked recently,你真的需要了解这个概念:

Code runs lines sequentially, from top to bottom, in most programming languages.

这意味着如果较低的代码行还没有运行,那么它的影响就没有发生.如果更高的代码行依赖于这些影响,那么它们将失败.

在本例中,您将在BagelOrder表中插入一行,该行依赖于Customer表中的几行.如果您try 在这些行存在之前引用它们,则不会满足外键约束.

外键要求数据存在于被引用的表中(在本例中为Customer)before您可以插入依赖于它们的其他行(在BagelOrder中).

打个比方:如果你想穿鞋,你就必须穿上袜子.

Mysql相关问答推荐

如何防止程序中计数器出错

使用复合主键更新后的MySQL触发器失败

在 mySQL 中计算每日数组的每周指标

为什么用PyMySQL构建的json返回结果会出现重复?

发生的原因及解决方法

global max_connections 和 spring.hikari.maximumPoolSize 有什么区别?

基于多个 where 子句在规范化表中查找公共 ID(值)

try 在 .map 中使用 Favorite 选项卡进行react .我无法更改 mysql 表上的布尔类型

如何在 MySQL 中查找重复值和更新值

MYSQL:范围匹配与周年纪念日

在 where 子句中左连接多个值

MySQL查询以获取日期范围内的租赁订单

我在查询中没有得到正确的结果

Mysql insert with loop out of select 语句

当您无法修复表时,如何修复 MySQL不正确的密钥文件错误?

utf8mb4_unicode_ci 与 utf8mb4_bin

MySQL行格式:固定和动态之间的区别?

Ubuntu 中的 MySQL JDBC jar 文件在哪里?

按 15 分钟间隔对 mysql 查询进行分组

PHP MYSQL - 插入不使用列名但使用自动增量字段