1

我对编写 SQL 代码完全陌生,我正在尝试运行一个简单的表创建,但是我找不到我的编程中的错误在哪里,而且由于我是全新的,我正在为这个创建而苦苦挣扎。

这是我正在做的一个学校项目,希望有人能提供帮助。

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

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),
)

任何帮助是极大的赞赏。

4

1 回答 1

2

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

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

工作代码:

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

于 2016-01-15T18:27:54.147 回答