powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Создание таблиц в БД. Ошибка foreign key.
3 сообщений из 3, страница 1 из 1
Создание таблиц в БД. Ошибка foreign key.
    #39733239
klotsin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день. Собственно начну с того, что я новичок. Сразу при изучении книги "SQL. Полное руководство 2015" я столкнулся с такой проблемой, а именно: Создав базу данных я взял скрипт из книги, чтобы добавить таблицы. При компилировании кода, выдает ошибку при проходе скрипта до второй таблицы.

CREATE TABLE OFFICES (OFFICE INTEGER NOT NULL, CITY VARCHAR(15) NOT NULL, REGION VARCHAR(10) NOT NULL, MGR integer, TARGET DECIMAL(9,2), SALES DECIMAL(9,2) NOT NULL, primary key (OFFICE), foreign key HASMGR(MGR) references SALEREPS ON DELETE SET NULL) Error Code: 1239. Incorrect foreign key definition for 'HASMGR': Key reference and table reference don't match 0.000 sec


Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
CREATE TABLE PRODUCTS
(MFR_ID CHAR(3) NOT NULL,
PRODUCT_ID CHAR(5) NOT NULL,
DESCRIPTION VARCHAR(20) NOT NULL,
PRICE DECIMAL(9,2) NOT NULL,
QTY_ON_HAND INTEGER NOT NULL,
primary key (MFR_ID, PRODUCT_ID));

CREATE TABLE OFFICES
(OFFICE INTEGER NOT NULL,
CITY VARCHAR(15) NOT NULL,
REGION VARCHAR(10) NOT NULL,
MGR integer, TARGET DECIMAL(9,2),
SALES DECIMAL(9,2) NOT NULL,
primary key (OFFICE),
foreign key HASMGR(MGR)
references SALEREPS 
ON DELETE SET NULL);

CREATE TABLE SALEREPS
(EMPL_NUM INTEGER NOT NULL,
AGE INTEGER,
REP_OFFICE integer,
TITLE VARCHAR(10),
HIRE_DATE DATE NOT NULL,
MANAGER integer,
QUOTA DECIMAL (9,2),
SALES DECIMAL (9,2) NOT NULL,
primary key (EMPL_NUM),
foreign key (MANAGER)
references SALESREPS
ON DELETE SET NULL,
foreign key WORKSIN (REP_OFFICE)
references OFFICES
ON delete SET NULL);

create TABLE CUSTOMERS
(CUST_NUM INTEGER NOT NULL,
COMPANY VARCHAR (20) NOT NULL,
CUST_REP INTEGER,
CREDIT_LIMIT DECIMAL(9,2),
primary key (CUST_NUM),
foreign key HASREP (CUST_REP)
references SALESREPS
ON delete SET null);

CREATE TABLE ORDERS
(ORDER_NUM INTEGER NOT NULL,
ORDER_DATE DATE NOT NULL,
CUST INTEGER NOT NULL,
REP INTEGER,
MFR CHAR(3) NOT NULL,
PRODUCT CHAR(5) NOT NULL,
QTY INTEGER NOT NULL,
AMOUNT DECIMAL (9,2) NOT NULL,
primary key (ORDER_NUM),
foreign key PLACEDBY (CUST)
references CUSTOMERS
ON DELETE CASCADE,
foreign key TAKENBY (REP)
references SALEREPS
ON DELETE SET NULL,
foreign key ISFOR (MFR, PRODUCT)
REFERENCES PRODUCTS
ON DELETE RESTRICT);

ALTER TABLE OFFICES
ADD CONSTRAINT HASMGR
foreign key(MGR)
references SALEREPS(EMPL_NUM)
ON DELETE SET NULL;



Компиляцию провожу в MySQL Workbench версия 8.0
Как я понял, версия на тот момент была другой и синтаксис некорректен, почитав мануал, я решил попробовать использовать актуальную конструкцию, но в итоге у меня ничего не вышло. Хотел бы у вас уточнить, как корректно добавить таблицы, в чем ошибка?

Актуальный мануал:


Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
[CONSTRAINT [symbol]] FOREIGN KEY
    [index_name] (col_name, ...)
    REFERENCES tbl_name (col_name,...)
    [ON DELETE reference_option]
    [ON UPDATE reference_option]

reference_option:
    RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT
...
Рейтинг: 0 / 0
Создание таблиц в БД. Ошибка foreign key.
    #39733243
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
klotsinКомпиляцию провожу в MySQL Workbench версия 8.0Ни MySQL, ни Workbench компилировать не умеют.
И нужна версия самого MySQL.

Во втором запросе создаются ключ на таблицу SALEREPS, которая к этому моменту еще не существует.
Да и синтаксис в части "REFERENCES tbl_name (col_name,...)" не менялся, пожалуй, никогда. Ведь надо указать не только таблицу на которую ссылаетесь, но и конкретное полей в ней.
...
Рейтинг: 0 / 0
Создание таблиц в БД. Ошибка foreign key.
    #39733245
klotsin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Во втором запросе создаются ключ на таблицу SALEREPS, которая к этому моменту еще не существует.
Да и синтаксис в части "REFERENCES tbl_name (col_name,...)" не менялся, пожалуй, никогда. Ведь надо указать не только таблицу на которую ссылаетесь, но и конкретное полей в ней.[/quot]
Спасибо. Пойду обмозгую.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Создание таблиц в БД. Ошибка foreign key.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]