首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SQL -不能添加外键约束

SQL -不能添加外键约束
EN

Stack Overflow用户
提问于 2016-01-15 18:11:28
回答 1查看 352关注 0票数 1

我对编写SQL代码非常陌生,我试图运行一个简单的表创建,但是我找不到编程中的错误所在,而且由于我是全新的,所以我正在为这个创建而奋斗。

这是我正在做的一个学校项目,希望任何人都能帮忙。

我在'SQLFiddle‘中接收到的错误是“无法添加外键约束”对以下代码:

代码语言:javascript
运行
复制
CREATE TABLE invoice(
  invoice_id INT NOT NULL,
  customer_id INT NOT NULL,
  order_date DATE NULL,
  spec_order_note VARCHAR(45) NULL,
  PRIMARY KEY(invoice_id, customer_id),
  FOREIGN KEY (customer_id)
  REFERENCES customer.customer_id
  ON DELETE CASCADE
  ON UPDATE CASCADE
);

CREATE TABLE line_item (
  invoice_id INT NOT NULL,
  donut_id INT NOT NULL,
  quantity INT NULL
  CONSTRAINT donut_invoice
  FOREIGN KEY invoice_id
  REFERENCES invoice.invoice_id
  ON DELETE RESTRICT
  ON UPDATE RESTRICT
)

CREATE TABLE donut (
  donut_id INT NOT NULL,
  donut_name VARCHAR(15) NULL,
  description VARCHAR(30) NULL,
  unit_price INT NULL
  PRIMARY KEY(donut_id),
)

CREATE TABLE customer (
  customer_id INT NOT NULL,
  last_name VARCHAR(15) NULL,
  first_name VARCHAR(10) NULL,
  street_add VARCHAR(20) NULL,
  apt_num INT NULL,
  city VARCHAR(20) NULL,
  state VARCHAR(15) NULL,
  zip_code INT NULL,
  home_phone VARCHAR(10) NULL,
  mobile_phone VARCHAR(10) NULL,
  other_phone VARCHAR(10) NULL,
  customer_notes VARCHAR(45) NULL
  PRIMARY KEY(customer_id),
)

任何帮助都是非常感谢的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-15 18:27:54

只能引用外部约束中的现有表和列。因此,如果要在customer的外键中引用invoice表,则需要在invoice之前创建customer,或者使用ALTER TABLE添加外键约束。

除此之外,您的代码中还有一些语法错误,比如缺少分号和错误放置(缺少和附加)逗号。

工作守则:

代码语言:javascript
运行
复制
CREATE TABLE customer (
  customer_id INT NOT NULL,
  last_name VARCHAR(15) NULL,
  first_name VARCHAR(10) NULL,
  street_add VARCHAR(20) NULL,
  apt_num INT NULL,
  city VARCHAR(20) NULL,
  state VARCHAR(15) NULL,
  zip_code INT NULL,
  home_phone VARCHAR(10) NULL,
  mobile_phone VARCHAR(10) NULL,
  other_phone VARCHAR(10) NULL,
  customer_notes VARCHAR(45) NULL,
  PRIMARY KEY(customer_id)
);

CREATE TABLE invoice(
  invoice_id INT NOT NULL,
  customer_id INT NOT NULL,
  order_date DATE NULL,
  spec_order_note VARCHAR(45) NULL,
  PRIMARY KEY(invoice_id, customer_id),
  FOREIGN KEY (customer_id)
  REFERENCES customer (customer_id)
  ON DELETE CASCADE
  ON UPDATE CASCADE
);

CREATE TABLE line_item (
  invoice_id INT NOT NULL,
  donut_id INT NOT NULL,
  quantity INT NULL,
  CONSTRAINT donut_invoice
  FOREIGN KEY (invoice_id)
  REFERENCES invoice (invoice_id)
  ON DELETE RESTRICT
  ON UPDATE RESTRICT
);

CREATE TABLE donut (
  donut_id INT NOT NULL,
  donut_name VARCHAR(15) NULL,
  description VARCHAR(30) NULL,
  unit_price INT NULL,
  PRIMARY KEY(donut_id)
);

http://sqlfiddle.com/#!9/36b044

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34817209

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档