[英]Unable to create table in MySQL
我無法在MySQL中創建這些表。 對我來說,一切看起來都很完整,但我總是出錯。
這是我的SQL:
CREATE TABLE Movies(
title char PRIMARY KEY NOT NULL,
Years date NOT NULL,
length decimal not null,
genre char NOT NULL,
academy_award char not null,
FOREIGN KEY(the_name) REFERENCES Studio,
FOREIGN KEY(directorName) REFERENCES Director);
CREATE TABLE StarsIn(
FOREIGN KEY(title) REFERENCES Movies,
FOREIGN KEY(Years) REFERENCES Movies,
FOREIGN KEY(the_name) REFERENCES MovieStar);
CREATE TABLE Director(
the_name char PRIMARY KEY NOT NULL,
birthdate date NOT NULL,
nationality char NOT NULL);
CREATE TABLE MovieStar(
the_name char PRIMARY KEY NOT NULL,
birthdate date NOT NULL,
address char NOT NULL,
gender char NOT NULL);
CREATE TABLE Studio(
the_name char PRIMARY KEY NOT NULL,
address char NOT NULL);
您遇到的問題是您正在引用不存在的表中的列。
盡管稍后創建這些表,但是DBMS引擎不知道它們將存在。
解決方案-創建不包含不存在的FK的表,並稍后使用“ ALTER TABLE”命令添加這些表。
似乎您知道語法,所以如果您找不到它,我將通知您。
您的語法應如下所示(我所做的只是重新排序,並將char更改為archer ...):
CREATE TABLE Studio(the_name varchar(50) PRIMARY KEY NOT NULL, address varchar(50) NOT NULL);
CREATE TABLE Director(the_name varchar(50) PRIMARY KEY NOT NULL, birthdate date NOT NULL, nationality varchar(50) NOT NULL);
CREATE TABLE Movies(title varchar(50) PRIMARY KEY NOT NULL, Years date NOT NULL,
length decimal not null, genre varchar(50) NOT NULL, academy_award varchar(50) not null,
the_name REFERENCES Studio(the_name), directorname REFERENCES Director(the_name));
CREATE TABLE MovieStar(the_name char PRIMARY KEY NOT NULL, birthdate date NOT NULL, address char NOT NULL, gender char NOT NULL);
CREATE TABLE StarsIn(title REFERENCES Movies(title),movie REFERENCES Movies(title), moviestar REFERENCES MovieStar(the_name));
請注意一點,具體取決於版本-您可能必須使用FOREIGN KEY(col_name)而不是col_name。 我更喜歡沒有它的語法,但是例如,某些版本會強制您使用FOREIGN KEY(title)
而不是最后一個SQL中的title
。
您使用的語法-外鍵名稱引用表(列)-您忘記了該列-允許您命名FK。 如果您不使用“外鍵”,系統將隨機分配一個名稱。 這通常並不重要,除非您希望數據庫設計“干凈”並且能夠按名稱引用它。
PS-我沒有運行它,我相信您可以告知是否還有其他問題-我沒有檢查語法,只是修復了您報告的錯誤-引用不存在... PSPS始終檢查語法... http: //dev.mysql.com/doc/refman/5.1/zh-CN/create-table.html
這不起作用,因為未按正確的順序創建表。
必須始終先創建父表,因為否則您將嘗試引用不存在的列。
例如,在這里看這部分:
CREATE TABLE Movies(title char PRIMARY KEY NOT NULL, Years date NOT NULL,
length decimal not null, genre char NOT NULL, academy_award char not null,
FOREIGN KEY(the_name) REFERENCES Studio, FOREIGN KEY(directorName) REFERENCES Director);
您不能引用表工作室或導演,因為它們甚至不存在。
正確的順序可能是:
Studio
Movie Star
Director
Movies
StarsIn
此外,這里還有許多其他問題。
您沒有在Stars IN表中定義任何列,只聲明了外鍵:
CREATE TABLE StarsIn(
FOREIGN KEY(title) REFERENCES Movies,
FOREIGN KEY(Years) REFERENCES Movies,
FOREIGN KEY(the_name) REFERENCES MovieStar);
您不僅沒有定義任何列,而且沒有引用任何東西。 這也會引發錯誤。 您的外鍵標題必須引用電影表中的某些列。 除此之外,您不能為Years創建外鍵參考。 通常是因為您無法為不是另一個表中的主鍵的列創建外鍵,並且為什么還要在同一表中需要兩個外鍵?
這些問題也存在於其他create table語句中,因此鑒於我所說的一切,請回頭查看每個create table語句。
這是一個有效的SQL提琴,您可以將其用作參考。
編輯
我還要補充一點,我不建議使用char數據類型。 請研究使用VARCHAR() 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.