powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите разобраться с синтаксисом добавления внешнего ключа в таблицу.
9 сообщений из 9, страница 1 из 1
Помогите разобраться с синтаксисом добавления внешнего ключа в таблицу.
    #38032676
Danlod
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уважаемые форумчане!
Вопрос от новичка к экспертам.
Самостоятельно изучаю MySQL по книге L.Bailey "Studying SQL" и в процессе составления таблиц стокнулся вот с такой проблемой.

Таблица my_contacts является родительской таблицей.
Таблицы profession и seeking -дочерние таблицы, выделенные из my_contacts.
Я хочу добавить в таблицу my_contacts два внешних ключа prof_id и seeking_id
являющихся первичными ключами в своих таблицах.

Скрипт создания таблицы seeking:

CREATE TABLE seeking
(seeking_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
seeking VARCHAR (30))
AS
SELECT seeking FROM my_contacts
GROUP BY seeking
ORDER BY seeking;

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

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

CREATE TABLE contact_seeking
(seeking_id INT NOT NULL AUTO_INCREMENT,
CONSTRAINT seeking_seeking_id_fk
FOREIGN KEY(seeking_id)
REFERENCES seeking(seeking_id),
contact_id1 INT NOT NULL,
CONSTRAINT my_contacts_contact_id_fk
FOREIGN KEY(contact_id1)
REFERENCES my_contacts(contact_id));

А вот про добавления внешних ключей командой ALTER TABLE практически ничего не сказано.
Покопавшись в гугле нашел несколько вариантов, но они не работают.
Посмотрите, пожалуйста, скриншот и если можете подскажите, где ошибка.

http://vvcap.net/db/zX8IrPq7-e2LaWDCVKnZ.htp


Заранее спасибо!
...
Рейтинг: 0 / 0
Помогите разобраться с синтаксисом добавления внешнего ключа в таблицу.
    #38032681
MikkiMouse
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Danlod,

Если кумекаешь в английском, то текст ошибки абсолютно прозрачен - поле, которое ты пытаешься объявить внешним ключом, отсутствует в таблице (в твоем случае поле `my_contacts`.`prof_id` ).
Вопрос такой себе - элементарщина.
...
Рейтинг: 0 / 0
Помогите разобраться с синтаксисом добавления внешнего ключа в таблицу.
    #38032686
Danlod
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MikkiMouse,

Спасибо за ответ, хотя он тоже -так себе, не прибавил, не отнял...

Ок, пойдем другим путем.

Создаем в родительской таблице столбец prof_id:

mysql> ALTER TABLE my_contacts
-> ADD COLUMN prof_id INT NOT NULL;
Query OK, 19 rows affected (0.53 sec)
Records: 19 Duplicates: 0 Warnings: 0

Вводим внешний ключ:
mysql> ALTER TABLE my_contacts
-> ADD FOREIGN KEY (prof_id)
-> REFERENCES profession(prof_id);

Получаем ошибку.
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`gregs_list/#sql-15c4_20`, CONSTRAINT `
#sql-15c4_20_ibfk_1` FOREIGN KEY (`prof_id`) REFERENCES `profession` (`prof_id`))

Вводим внешний ключ:

mysql> ALTER TABLE my_contacts
-> ADD CONSTRAINT profession_prof_id_fk
-> FOREIGN KEY (prof_id)
-> REFERENCES profession(prof_id);

Получаем ошибку:

ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`gregs_list/#sql-15c4_20`, CONSTRAINT `
profession_prof_id_fk` FOREIGN KEY (`prof_id`) REFERENCES `profession` (`prof_id`))

Модифицируем параметр prof_id, превращая его во внешний ключ:

mysql> ALTER TABLE my_contacts
-> MODIFY COLUMN prof_id CONSTRAINT profession_prof_id_fk
-> FOREIGN KEY (prof_id)
-> REFERENCES profession(prof_id);

И снова получаем ошибку в синтаксисе.
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for
the right syntax to use near 'CONSTRAINT profession_prof_id_fk
FOREIGN KEY (prof_id)
REFERENCES profession(pr' at line 2

Таким образом, добавление столбца в таблицу проблемы не решило.

Хотелось бы получить более профессиональный ответ.
Спасибо.
...
Рейтинг: 0 / 0
Помогите разобраться с синтаксисом добавления внешнего ключа в таблицу.
    #38032687
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
http://dev.mysql.com/doc/refman/5.5/en/alter-table.html
ALTER TABLE `Role` ADD CONSTRAINT `Parent` FOREIGN KEY
...
Рейтинг: 0 / 0
Помогите разобраться с синтаксисом добавления внешнего ключа в таблицу.
    #38032688
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а что для тебя "профессиональный ответ"?
...
Рейтинг: 0 / 0
Помогите разобраться с синтаксисом добавления внешнего ключа в таблицу.
    #38032694
Danlod
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ScareCrow,

Прежде всего- спасибо за ответ.

Профессиональный ответ- это такой ответ,который поможет разобраться новичку в запутанной ситуации. А комментарий Микки Мауса, к сожалению, никоим образом ситуацию не прояснил.

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

Но внешний ключ в таблицу не заходит:(
...
Рейтинг: 0 / 0
Помогите разобраться с синтаксисом добавления внешнего ключа в таблицу.
    #38032704
MikkiMouse
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Danlod,

DanlodТаким образом, добавление столбца в таблицу проблемы не решило.

Хотелось бы получить более профессиональный ответ.


Ты со структурой своей БД разберись сначала, документацию почитай, а потом и профессиональных советов спрашивай.
Навешал каких-то левых констрейнтов, форейн кей создаешь на несуществующее поле, сообщения об ошибках перевести (понять) не способен, но вот видишь ли хочется чтоб дали 1 классный совет и все заработало. Где вы такие беретесь, шустрые? :-)
...
Рейтинг: 0 / 0
Помогите разобраться с синтаксисом добавления внешнего ключа в таблицу.
    #38032783
Danlod
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MikkiMouse,

Круто!!!
Чувствуется рука профессионала!!!
Видно с пеленок состряпянный DBA дал исчерпывающий ответ.
Ладно, не боги горшки обжигают.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Помогите разобраться с синтаксисом добавления внешнего ключа в таблицу.
    #38917000
karpekin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Для тех, кого это еще интересует - вот пример:

ALTER TABLE таблица2
ADD COLUMN стобец2 INT NOT NULL,
ADD CONSTRAINT таблица1_столбец1_fk
FOREIGN KEY (столбец2)
REFERENCES таблица1 (столбец1);
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите разобраться с синтаксисом добавления внешнего ключа в таблицу.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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