Вопрос:

начинающий sql отсутствует ключевое слово и неверный идентификатор

sql keyword identifier

171 просмотра

4 ответа

29 Репутация автора

CREATE table Book
(
book_title varchar (100) not null ,
book_genre char(60) not null,
Date_of_publish date not null,
user_code char(7) not null ,
book_id char (7) primary key not null , 
constraint writer__id_fk foreign key (writer_id),
constraint publisher__id_fk foreign key (publisher_id)

);

Я получаю

[ORA-00905: пропущенное ключевое слово]

в таблице издателя

CREATE table publisher

(
publisher_id char (7) primary key not null,
publisher_name char(20) not null,
publisher_number char(10) not null,
publisher_email varchar2(60) not null,
publisher_address varchar2(60) not null,
);

Я получаю

[ORA-00904:: неверный идентификатор]

Автор: Fido Dido Источник Размещён: 08.11.2017 11:34

Ответы (4)


0 плюса

5928 Репутация автора

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

Автор: dfundako Размещён: 08.11.2017 11:38

0 плюса

28 Репутация автора

Решение

Добро пожаловать в удивительный мир SQL! :-)

Общее замечание: расскажите, пожалуйста, какую СУБД вы используете. MySQL? SQL Server? Oracle? SQlite? Различные системы используют разные виды синтаксиса.

Первое утверждение:

Проблема, кажется, в FOREIGN KEY-порции. Обычно вы будете указывать что-то вроде:

CONSTRAINT [constraint_name] FOREIGN KEY([column_in_this_table]) REFERENCES OTHER_TABLE([column_in_other_table])

редактировать (добавлено):


[column_in_this_table]Должен существовать в вашем DDL ( CREATE TABLE-statement), например , так: CREATE TABLE Book ( book_title ... etc., publisher_id INT, CONSTRAINT FK_publ_id FOREIGN KEY(publisher_id) REFERENCES publisher(publisher_id));

Здесь у вас будет «оригинальный» столбец с именем «publisher_id» в таблице «издатель». Вы обращаетесь к нему из таблицы «Book», сначала имея столбец «publisher_id» в таблице «Book» (кстати, он должен иметь тот же DDL, что и исходный столбец) . Затем вы добавите FOREIGN KEYтаблицу 'Book', которая налагается на столбец Book (publisher_id). Обратите внимание, что вы также можете по-разному назвать столбец в вашей «Книжной» таблице - например, «Губка Боб» или «Патрик». Но для будущего использования вам нужны соглашения об именах, которые сообщают, что вы можете ожидать найти в столбце. Таким образом, вы бы назвали столбцы для того, что они содержат.


Второе утверждение:

Проблема в последней части вашего оператора, где после столбца есть запятая .NOT NULLpublisher_address

(Часть) вашего заявления:

publisher_address varchar2(60) not null, );

Попробуйте заменить это на:

publisher_address VARCHAR2(60) NOT NULL);


edit (примечание для себя): VARCHAR2 оказывается действительным типом данных в базах данных Oracle (см. документацию Oracle )

Автор: RvT Размещён: 08.11.2017 11:45

2 плюса

1121 Репутация автора

Следующий SQL создает FOREIGN KEY для столбца «PersonID» при создании таблицы «Orders»:

CREATE TABLE Orders (
    OrderID int NOT NULL,
    OrderNumber int NOT NULL,
    PersonID int,
    PRIMARY KEY (OrderID),
    FOREIGN KEY (PersonID) REFERENCES Persons(PersonID)
    );

Ссылка на эту ссылку для более подробной информации

https://www.w3schools.com/sql/sql_foreignkey.asp

Надеюсь это поможет.

Автор: nish Размещён: 08.11.2017 11:46

0 плюса

29 Репутация автора

Так что это ответ.

CREATE table Book (book_title varchar (100) не ноль, book_genre char (60) не ноль, Date_of_publish дата не ноль, user_code char (7) не ноль, publisher_id char (7) не ноль, writer_id char (7) не ноль, book_id) char (7) первичный ключ не нулевой, CONSTRAINT book_writer_id_fk FOREIGN KEY (writer_id) REFERENCES писатель (writer_id), CONSTRAINT book_publisher_id_fk FOREIGN KEY (publisher_id) REFERENCES издатель (publisher_id));

СОЗДАТЬ таблицу издателя

(publisher_id char (7) первичный ключ не равен NULL, publisher_name char (20) не равно NULL, publisher_number char (10) не равно NULL, publisher_email varchar2 (60) не равно NULL, publisher_address varchar2 (60) не равно NULL);

Автор: Fido Dido Размещён: 09.11.2017 12:47
Вопросы из категории :
32x32