Форум: "Базы";
Текущий архив: 2002.10.17;
Скачать: [xml.tar.bz2];
ВнизСинтаксическая ошибка в SQL. Найти похожие ветки
← →
koks (2002-09-24 11:21) [0]Уважаемые мастера, все делаю как в help-е по SQL, а вылетает синтаксическая ошибка.
Итак, создаю две таблицы: Factories и Tovar. Первая - справочник предпариятий. Вторая - Список товаров, в которой одно из полей указывает на предприятие.
CREATE TABLE "FACTORIES"
(
"ID" INTEGER NOT NULL PRIMARY KEY,
"FACTORY" VARCHAR(20) CHARACTER SET WIN1251
);
CREATE TABLE "TOVAR"
(
"ID" INTEGER NOT NULL PRIMARY KEY
"FACTORY_ID" INTEGER NOT NULL FOREIGN KEY REFERENCES Factories(ID)
);
Почему-то ругается на слово FOREIGN...
Не пойму...
Заранее благодарности..
← →
3JIA9I CyKA (2002-09-24 11:27) [1]Ку?
CREATE TABLE "FACTORIES" (
"ID" INTEGER NOT NULL,
"FACTORY" VARCHAR(20) CHARACTER SET WIN1251,
CONSTRAINT PK_FACTORIES PRIMARY KEY (ID)
);
CREATE TABLE "TOVAR" (
"ID" INTEGER NOT NULL,
"FACTORY_ID" INTEGER NOT NULL,
CONSTRAINT PK_TOVAR PRIMARY KEY (ID),
CONSTRAINT FK_TOVAR_FACTORIES FOREIGN KEY (FACTORY_ID) REFERENCES FACTORIES (ID)
);
← →
koks (2002-09-24 12:34) [2]Выдержки из Help-а по SQL:
In the next example, the F2 column in table T2 is a foreign key that references table T1 through T1"s primary key P1. When a row in T1 changes, that change propagates to all affected rows in table T2. When a row in T1 is deleted, all affected rows in the F2 column of table T2 are set to NULL.
CREATE TABLE T1 (P1 INTEGER NOT NULL PRIMARY KEY);
CREATE TABLE T2 (F2 INTEGER FOREIGN KEY REFERENCES T1.P1
ON UPDATE CASCADE
ON DELETE SET NULL);
Здесь нет никаких constraint. Поясните, на теоретическом уровне...
P.S. у меня там еще будет ON UPDATE CASCADE ON DELETE SET NULL
← →
kaif (2002-09-24 13:17) [3]Ты просто забыл запятую поставить между определениями полей второй таблицы.
:))
← →
Johnmen (2002-09-24 13:26) [4]>koks © (24.09.02 12:34)
В этом случае constraint создается неявно...
← →
3JIA9I CyKA (2002-09-24 13:35) [5]Что значит неявно?! Foreign key больше не constraint?!
Я ещё допускаю, что неявно создаются индексы, но чтобы так!
Johnmen, доброе утро!!
С уважением, 3C.
← →
kaif (2002-09-24 13:41) [6]2 3JIA9I CyKA © (24.09.02 13:35)
Если constraints не названы явно, то они все равно создаются, но с внутренними именами.
← →
Johnmen (2002-09-24 13:46) [7]>3JIA9I CyKA © (24.09.02 13:35)
Добрый день !
Я что й то не уловил твоих намеков....:))
С уважением, JM.
← →
koks (2002-09-24 14:15) [8]Пацаны, экскьюз меня, но я так и не понял, почему у меня синтаксическоя ошибка (-104) в символе, где начинается FOREIGN
(в свете приведенного из Help примера...) А запятую я пропуститл, когда копировал в сообщение. А так она у меня стоит.
← →
3JIA9I CyKA (2002-09-24 14:48) [9]2kaif
Не надо меня лечить - я здоров:
constraint создается неявно...
Johnmen © (24.09.02 13:26)
Если constraints не названы явно
Вроде бы речь о разных вещах. Или нет?
← →
Johnmen (2002-09-24 15:00) [10]>3JIA9I CyKA © (24.09.02 14:48)
Занимаемся буквоедством....? Не стоит, право... :-)))
← →
3JIA9I CyKA (2002-09-24 15:09) [11]2Johnmen © (24.09.02 15:00)
Не знаю, что такое буквоедство.
Не в курсе, укого и что не стоит.
Не имею не малейшего представления о неявном создании constraint-ов.
Меня беспокоит только последнее.
Чем заниматься моим воспитанием, лучше перестаньте мне "тыкать" и уточните, что Вы имели ввиду.
>>Johnmen © (24.09.02 13:26)
← →
Johnmen (2002-09-24 15:43) [12]>3JIA9I CyKA ©
К сожалению, с теми, кто мне ВЫкает, я не предрасположен к общению...
← →
koks (2002-09-24 15:49) [13]Ребята, право же.... а то тут ща модераторы подтянутся.
привожу полный текст
CREATE TABLE "FACTORIES"
(
"ID" INTEGER NOT NULL,
"FACTORY" VARCHAR(20) CHARACTER SET WIN1251,
PRIMARY KEY ("ID")
);
CREATE TABLE "TOVAR"
(
"ID" INTEGER NOT NULL,
"FACTORY_ID" INTEGER NOT NULL FOREIGN KEY REFERENCES FACTORIES(ID),
"LOT" INTEGER NOT NULL,
"TYPE_ID" INTEGER NOT NULL,
"RNDFNC_ID" INTEGER NOT NULL,
"SIZECAT_ID" INTEGER NOT NULL,
"SIZEGROUP_ID" INTEGER NOT NULL,
"MAKE_ID" INTEGER NOT NULL,
"CUT_ID" INTEGER NOT NULL,
"COLOR_ID" INTEGER NOT NULL,
"CLARITY_ID" INTEGER NOT NULL,
"STONES" INTEGER NOT NULL,
"WEIGHT" FLOAT NOT NULL,
"PRICEPERCARAT" FLOAT NOT NULL,
"PRICE" FLOAT NOT NULL,
"CONTRACT" INTEGER NOT NULL,
"BOX" INTEGER NOT NULL
);
Вылетает:
Dynamic SQL Error
SQL error code = -104
Token unknown - line 4, char 31
FOREIGN
← →
3JIA9I CyKA (2002-09-24 16:20) [14]Блин! Напиши как у меня и не парься!
← →
Johnmen (2002-09-24 16:28) [15]Выкинь FOREIGN KEY - и все будет...
А вообще, посмотри InterBase SQL Reference - там подробно описан синтаксис...
← →
koks (2002-09-24 16:57) [16]2 3JIA9I CyKA © Да уж придется делать так...
2 Johnmen - так ведь я от туда и привел цитату... и сделал точно также.... разве нет? и ошибка..
← →
Johnmen (2002-09-24 17:07) [17]>koks © (24.09.02 16:57)
Нет ! Синтаксис констрейнта на поле отличается от синтаксиса констрейнта на запись !
Ты пытаешься сделать на поле (неверный синтаксис !). А 3JIA9I CyKA © привел пример на запись.
На поле :
"FACTORY_ID" INTEGER NOT NULL REFERENCES FACTORIES(ID),
← →
kaif (2002-09-24 22:17) [18]2 koks
Проблема скорее всего в том, что во второй таблице нет
PRIMARY KEY
Таблицы без PRIMARY KEY, насколько я помню, не могут иметь связей вида FOREIGN KEY.
Добавь PRIMARY KEY во вторую таблицу и попробуй еще.
← →
koks (2002-09-25 09:33) [19]2 Johnmen
"Нет ! Синтаксис констрейнта на поле отличается от синтаксиса констрейнта на запись !
Ты пытаешься сделать на поле (неверный синтаксис !). А 3JIA9I CyKA © привел пример на запись.
На поле :
"FACTORY_ID" INTEGER NOT NULL REFERENCES FACTORIES(ID),"
Огромное спасибо. Вот за такие разъяснения я и люблю этот форум !
Теперь полная ясность
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2002.10.17;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.035 c