За последние 24 часа нас посетили 15784 программиста и 1666 роботов. Сейчас ищут 845 программистов ...

Пытаюсь соединить таблицы внешним ключом - ввыдает ошибку

Тема в разделе "MySQL", создана пользователем davidoff, 19 авг 2015.

  1. davidoff

    davidoff Guest

    Я им соединение а они мне вот что:

    #1452 - Cannot add or update a child row: a foreign key constraint fails (`cddelop11659`.`#sql-cc4_239`, CONSTRAINT `#sql-cc4_239_ibfk_3` FOREIGN KEY (`id_city`) REFERENCES `city` (`id_city`))

    таблицы innodb

    таблица city
    id_city smalint (10) primary key autoinkremen
    city varchar
    country_id


    таблица vakans
    id_vak int (5) primary key autoinkremen
    koment varchar
    id_firm int (5)
    id_dol int (5)
    id_city smalint (10)


    хочу соеденить тве таблицы с помощью поля id_city . таблица city как бы справочник а vakans "рабочяя" таблица.
    в обе таблицы было внесено несколько записей.
    Что не так?
     
  2. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.250
    Адрес:
    там-сям
    Re: Пытаюсь соединить таблицы внешним ключом - ввыдает ошибк

    серьёзно?

    создай пожалуйста на sqlfiddle.com песочницу с несколькими записям и покажи какой именно запрос вызывает ошибку.
     
  3. davidoff

    davidoff Guest

    Re: Пытаюсь соединить таблицы внешним ключом - ввыдает ошибк

    подумаешь описался - AUTO_INCREMENT
    Ппробую разобраться с вашим сайтом
     
  4. MiksIr

    MiksIr Активный пользователь

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    Re: Пытаюсь соединить таблицы внешним ключом - ввыдает ошибк

    У вас в таблицах уже есть данные, которые нарушают внешний ключ.
     
  5. davidoff

    davidoff Guest

    Re: Пытаюсь соединить таблицы внешним ключом - ввыдает ошибк

    да, уже разобрался. в поле vakans.id_city были данные - "0" . пришлось вписывать вручную. представил себе ужас, еслиб в таблице было
    100 000 записей.
    Понимаю, что надо вначале разработать архитектуру а потом вносить данные. ну а все таки, если в жизни такое произошло - база разработана, данные внесены и оказалось что надо присоединить ещё одну таблицу, можно ли это сделать не вручную и чтоб не уничтожать все записи в таблице?
    Спасибо
     
  6. MiksIr

    MiksIr Активный пользователь

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    Re: Пытаюсь соединить таблицы внешним ключом - ввыдает ошибк

    JOIN вы можете построить и без внешнего ключа, и написать нужный запрос что-то удаляющий, или что-то добавляющий в нужную таблицу. Или, если важно сохранить существующее, то можно отключить проверки внешний ключей, добавить его, и включить проверку обратно. Но в общем лучше этого не делать, иначе, потом забудете о сделанном и будут проблемы.
     
  7. davidoff

    davidoff Guest

    Re: Пытаюсь соединить таблицы внешним ключом - ввыдает ошибк

    хм...я пока что слабо себе представляю как можно join ом вывести что петров из Москвы а сидоров из питербурга без внешнего ключа... вижу мне ещё долго в падаванах ходить... смысл сказанного понимаю, что проектировать надо сразу дабы избежать ужасов в будущем
     
  8. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    Re: Пытаюсь соединить таблицы внешним ключом - ввыдает ошибк

    легко. в таблице же будет поле идентификатор_города, в котором будут валидные данные равные идентификатору города из таблицы городов. "внешний ключ" лишь дает дополнительный функционал для контроля целостности при обновлениях удалениях. никакой магии типа дополнения кортежей одной таблицы связанными данными из другой он не делает. всё равно придется пользоваться джойнами.
     
  9. davidoff

    davidoff Guest

    Re: Пытаюсь соединить таблицы внешним ключом - ввыдает ошибк

    сажусь в медитацию над сказанным...
    а вообще, как правильно?
    допустим я совершил невозможное и предвидел все таблицы и их связи.. как правильно связать раз и до конца времен?

    Добавлено спустя 19 минут 41 секунду:
    Re: Пытаюсь соединить таблицы внешним ключом - ввыдает ошибку
    Сейчас у меня вопрос - как сделать, чтоб связь между двумя полями двух таблиц могла быть а могла и не быть. пример:
    таблица vakans (вакансии)
    id_vak 1
    name_vak менеджер

    таблица kandidat (кандидаты)
    id_kand 1
    name_kand Иванов

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