|
|
|
Помогите разобраться с синтаксисом добавления внешнего ключа в таблицу.
|
|||
|---|---|---|---|
|
#18+
Уважаемые форумчане! Вопрос от новичка к экспертам. Самостоятельно изучаю 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 Заранее спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2012, 02:05:44 |
|
||
|
Помогите разобраться с синтаксисом добавления внешнего ключа в таблицу.
|
|||
|---|---|---|---|
|
#18+
Danlod, Если кумекаешь в английском, то текст ошибки абсолютно прозрачен - поле, которое ты пытаешься объявить внешним ключом, отсутствует в таблице (в твоем случае поле `my_contacts`.`prof_id` ). Вопрос такой себе - элементарщина. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2012, 02:19:30 |
|
||
|
Помогите разобраться с синтаксисом добавления внешнего ключа в таблицу.
|
|||
|---|---|---|---|
|
#18+
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 Таким образом, добавление столбца в таблицу проблемы не решило. Хотелось бы получить более профессиональный ответ. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2012, 02:59:41 |
|
||
|
Помогите разобраться с синтаксисом добавления внешнего ключа в таблицу.
|
|||
|---|---|---|---|
|
#18+
http://dev.mysql.com/doc/refman/5.5/en/alter-table.html ALTER TABLE `Role` ADD CONSTRAINT `Parent` FOREIGN KEY ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2012, 03:02:43 |
|
||
|
Помогите разобраться с синтаксисом добавления внешнего ключа в таблицу.
|
|||
|---|---|---|---|
|
#18+
а что для тебя "профессиональный ответ"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2012, 03:03:11 |
|
||
|
Помогите разобраться с синтаксисом добавления внешнего ключа в таблицу.
|
|||
|---|---|---|---|
|
#18+
ScareCrow, Прежде всего- спасибо за ответ. Профессиональный ответ- это такой ответ,который поможет разобраться новичку в запутанной ситуации. А комментарий Микки Мауса, к сожалению, никоим образом ситуацию не прояснил. Синтаксис , предложенный тобой, как мне кажется, ничем не отличается от использованного мною. Но внешний ключ в таблицу не заходит:( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2012, 03:16:52 |
|
||
|
Помогите разобраться с синтаксисом добавления внешнего ключа в таблицу.
|
|||
|---|---|---|---|
|
#18+
Danlod, DanlodТаким образом, добавление столбца в таблицу проблемы не решило. Хотелось бы получить более профессиональный ответ. Ты со структурой своей БД разберись сначала, документацию почитай, а потом и профессиональных советов спрашивай. Навешал каких-то левых констрейнтов, форейн кей создаешь на несуществующее поле, сообщения об ошибках перевести (понять) не способен, но вот видишь ли хочется чтоб дали 1 классный совет и все заработало. Где вы такие беретесь, шустрые? :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2012, 04:51:01 |
|
||
|
Помогите разобраться с синтаксисом добавления внешнего ключа в таблицу.
|
|||
|---|---|---|---|
|
#18+
MikkiMouse, Круто!!! Чувствуется рука профессионала!!! Видно с пеленок состряпянный DBA дал исчерпывающий ответ. Ладно, не боги горшки обжигают. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2012, 12:02:02 |
|
||
|
Помогите разобраться с синтаксисом добавления внешнего ключа в таблицу.
|
|||
|---|---|---|---|
|
#18+
Для тех, кого это еще интересует - вот пример: ALTER TABLE таблица2 ADD COLUMN стобец2 INT NOT NULL, ADD CONSTRAINT таблица1_столбец1_fk FOREIGN KEY (столбец2) REFERENCES таблица1 (столбец1); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2015, 20:59:04 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=38032681&tid=1833390]: |
0ms |
get settings: |
9ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
40ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
38ms |
get tp. blocked users: |
1ms |
| others: | 198ms |
| total: | 319ms |

| 0 / 0 |
