2014-10-28 2 views
-1

Мне не удается создать эти таблицы в 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); 
+1

Вы должны отправить сообщение об ошибке, которое хотите получить, если вы хотите, чтобы кто-то отлаживал ваш код ... – evenro

+0

Ключевой столбец имя_памяти не существует в табличной ошибке. – Rohit

+0

Это мой первый раз, когда я использую SQL, не знаю, как создать таблицу. – Rohit

ответ

-1

Проблема у Вас есть то, что вы ссылаетесь столбцы в таблицах, которые не существуют.

Хотя вы создаете эти таблицы позже, механизм СУБД не знает, что они будут существовать.

Решение - создайте таблицы без FK, которые не существуют, и добавьте их позже, используя команду «ALTER TABLE».

Кажется, что вы знаете синтаксис, поэтому я позволю вам сообщить мне, если вы не можете его найти.


ваш синтаксис должен выглядеть (Все, что я сделал это снова заказ, и изменить символ, чтобы быть лучником ...):

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

записочку, зависит от версии - вы» d может потребоваться использовать FOREIGN KEY (col_name) вместо col_name. Мне больше нравится синтаксис без него, но некоторые версии заставляют вас использовать FOREIGN KEY(title) вместо title в последнем SQL, например.

Используемый вами синтаксис - Внешний ключ NAME Ссылки TABLE (Column) - вы забыли столбец - Позволяет вам назвать FK. Если вы не используете «Foreign Key», система будет произвольно назначать имя. Обычно это не важно, если вы не хотите, чтобы дизайн БД был «чистым» и мог ссылаться на него по имени.

P.S. - Я не запускал его, я надеюсь, что вы сообщите, есть ли другая проблема - я не проверял синтаксис, просто исправил ошибку, о которой вы сообщали, - ссылки, которые не существуют ... P.S. Постскриптум Всегда проверяйте синтаксис ... http://dev.mysql.com/doc/refman/5.1/en/create-table.html

+0

Я попытался привести таблицы в порядок, но, похоже, есть ошибка в любой строке, которая включает оператор FOREIGN Key. Я не знаю, использовать синтаксис ALTER с помощью внешних ключей. – Rohit

+0

Исправлен синтаксис ссылки сейчас .. добавлена ​​ссылка на книгу синтаксиса ... Я человек Oracle, у каждой СУБД есть немного другой синтаксис - всегда проверяйте руководство для этих ... – evenro

+0

Это сработало? или более синтаксических ошибок? обратите внимание на разницу между varchar на char и измените его на соответствующую максимальную длину ... – evenro

-1

Это не работает, потому что ваши таблицы не создаются в правильном порядке.

Сначала необходимо создать родительскую таблицу, потому что в противном случае вы будете пытаться ссылаться на столбец, который не существует.

Например, посмотрите на эту часть здесь:

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 

Кроме того, у вас есть много других проблем, здесь происходит.

Вы не определили столбцы звезды в таблице, вы только объявить внешние ключи:

CREATE TABLE StarsIn(
FOREIGN KEY(title) REFERENCES Movies, 
FOREIGN KEY(Years) REFERENCES Movies, 
FOREIGN KEY(the_name) REFERENCES MovieStar); 

Вы не только не определяет столбцы, вы ничего не ссылки. Это также вызовет ошибку. Ваше название внешнего ключа должно указывать на какой-либо столбец в таблице фильмов. Кроме того, вы не можете создать ссылку на внешний ключ для Years.В основном потому, что вы не можете создать внешний ключ для столбца, который не является первичным ключом в другой таблице, а также почему вам нужны два внешних ключа для одной таблицы?

Эти проблемы существуют и в других операторах создания таблицы, поэтому, учитывая все, что я сказал, вернитесь назад и посмотрите на каждое из своих операторов создания таблицы.

Работает SQL Fiddle, которую вы можете использовать для справки.

EDIT

Я хотел бы также добавить, что я не рекомендую использовать обугленный тип данных. Please look into using VARCHAR().

Смежные вопросы