13. MySQL 8 - Foreign keys внешние ключи

Поделиться
HTML-код
  • Опубликовано: 11 май 2019
  • Внешние ключи позволяют сохранить целостность данных в базах с таблицами на движке InnoDB, а также объединить данные из разных таблиц на этих внешних ключах. Foreign keys

Комментарии • 43

  • @sobermushroom1539
    @sobermushroom1539 3 года назад +14

    Лучшее объяснение! Простыми словами, без занудной и бесполезной академичности, наглядно, с примерами, отсылками к документации - здорово! Кто поставил дизлайки - ребята, вы серьезно? Может промахнулись все-таки? Автору - огромнейшее спасибо!

    • @HtmllabRu
      @HtmllabRu  3 года назад +3

      Спасибо за поддержку!)

    • @user-vf3gw7ik4j
      @user-vf3gw7ik4j 2 года назад +1

      в 22ом дизлайки чудесным образом испарились) действительно здорово!

  • @user-bc6vw8nu6x
    @user-bc6vw8nu6x 4 года назад +4

    О! То, что нужно. А я просил видео про каскадное удаление. А оно под носом :)

  • @janevermilion
    @janevermilion 4 года назад +2

    Спасибо вам большое!Сидела тупила с этими ключами)теперь все понятно)

    • @HtmllabRu
      @HtmllabRu  4 года назад +1

      Рад, что ролик помог!

  • @alexeicodes
    @alexeicodes 3 года назад +2

    Спасибо за отличное видео!

  • @user-ve8qy1ux3k
    @user-ve8qy1ux3k 2 года назад +1

    господи боже спасибо огромное! добра вам и здоровья!

  • @igorzuev6885
    @igorzuev6885 2 года назад +2

    Очень помог разобраться, спасибо!

  • @jetbrain9115
    @jetbrain9115 Год назад +1

    Спасибо тебе большое, добрый человек!)

  • @texnosfera5963
    @texnosfera5963 3 года назад +2

    Видео прекрасно 👍

  • @user-ys3uu5un6l
    @user-ys3uu5un6l 2 года назад +1

    Спасибо за объяснение.

  • @AlexanderOsnovnoi
    @AlexanderOsnovnoi 2 года назад +2

    Полезно, спасибо)

  • @waagnermann
    @waagnermann Год назад +1

    спасибо за видео! всё чётко!

  • @fruit_stream
    @fruit_stream 3 года назад +2

    Вместо тысячи статей, супер, спасибо!

    • @fruit_stream
      @fruit_stream 3 года назад +1

      Вот только как настраивать внешние ключи в уже существующие таблицы ... ?

    • @HtmllabRu
      @HtmllabRu  3 года назад +2

      При помощи ALTER TABLE dev.mysql.com/doc/refman/8.0/en/alter-table.html

    • @fruit_stream
      @fruit_stream 3 года назад

      @@HtmllabRu да я понимаю, читал стати, но почему то у меня не срабатывает, а у всех примеры только при создании таблицы.

    • @HtmllabRu
      @HtmllabRu  3 года назад +2

      @@fruit_stream потому что добавить внешние ключи ещё не так сложно, а вот удаление может не получится из-за наличия данных в дочерних таблицах

    • @fruit_stream
      @fruit_stream 3 года назад

      @@HtmllabRu вот про это нет нормальных статей и информации.

  • @karen_razbogatel
    @karen_razbogatel 2 года назад +2

    Спасибо за отличный видос. А в ваших других видео есть обяснение что значит Constraint, Foreign key constraint ?

    • @HtmllabRu
      @HtmllabRu  2 года назад +3

      Karen, уже не помню.
      Constraint (ограничение) - опциональная часть внешнего ключа содержащая название ограничения;
      Foreign key - обязательный фрагмент описания внешнего ключа dev.mysql.com/doc/refman/5.6/en/create-table-foreign-keys.html

  • @user-xp6uu5yu6t
    @user-xp6uu5yu6t 4 года назад +4

    Подскажите, где можно побольше узнать о ENGINE=INNODB? Я не совсем понимаю, в каких случаях нужно писать это, ведь в прошлом при создании таблиц мы этого не указывали, а сейчас в примере с ключами указываем. Здесь есть завязка на ключах? Объясните, пожалуйста!

    • @HtmllabRu
      @HtmllabRu  4 года назад +3

      Подробней можно почитать тут dev.mysql.com/doc/refman/8.0/en/innodb-storage-engine.html, но в большинстве случаев ENGINE не придётся указывать, потому что по-умолчанию и так будет создаваться InnoDB и будет использоваться встроенный механизм внешних ключей

    • @user-xp6uu5yu6t
      @user-xp6uu5yu6t 4 года назад +1

      @@HtmllabRu спасибо!

  • @user-eu9fn3mz8u
    @user-eu9fn3mz8u 3 года назад

    Неплохо

  • @AndreyShevchenko-ub2ew
    @AndreyShevchenko-ub2ew 3 года назад

    Я правильно понимаю, что при создании FK если мы прописываем ON DELETE RESTRICT, то это тоже самое, как если бы мы вообще ничего не прописывали? Т.е. в обоих случаях мы не сможем удалять запись из тоблицы родителей, если в таблице детей есть их дети?

    • @AndreyShevchenko-ub2ew
      @AndreyShevchenko-ub2ew 3 года назад +2

      А, нашел уже ответ в документации RESTRICT: Rejects the delete or update operation for the parent table. Specifying RESTRICT (or NO ACTION) is the same as omitting the ON DELETE or ON UPDATE clause.

  • @alexeicodes
    @alexeicodes 3 года назад

    а про FOREIGN KEYS будет ещё видео в этом плейлисте?

    • @alexeicodes
      @alexeicodes 3 года назад

      насколько понимаю, одно из или даже самое важное при изучении реляционных БД

    • @HtmllabRu
      @HtmllabRu  3 года назад +1

      В следующем видео будет рассказ о inner join и других объединениях, на основе foreign keys.

  • @user-hd3ht2do4c
    @user-hd3ht2do4c 3 года назад +1

    Отлично объясняете, только мне непонятно зачем нужна была строчка INDEX par_ind (parent_id)

    • @HtmllabRu
      @HtmllabRu  3 года назад +2

      Для создания индекса на внешнем ключе. Когда таблица связывается по внешнему ключу, для неё точно будут запросы по этому полю, лучше заранее его «ускорить»

    • @user-hd3ht2do4c
      @user-hd3ht2do4c 3 года назад +1

      @@HtmllabRu Теперь понятно, спасибо)
      Еще один вопрос есть:
      Что делать если мы хотим указать два внешних ключа для одной таблицы из двух других таблиц?

    • @user-hd3ht2do4c
      @user-hd3ht2do4c 3 года назад

      Два раза прописывать FOREIGN KEY()?

    • @HtmllabRu
      @HtmllabRu  3 года назад +2

      @@user-hd3ht2do4c да, как тут
      CREATE TABLE product (
      category INT NOT NULL, id INT NOT NULL,
      price DECIMAL,
      PRIMARY KEY(category, id)
      ) ENGINE=INNODB;
      CREATE TABLE customer (
      id INT NOT NULL,
      PRIMARY KEY (id)
      ) ENGINE=INNODB;
      CREATE TABLE product_order (
      no INT NOT NULL AUTO_INCREMENT,
      product_category INT NOT NULL,
      product_id INT NOT NULL,
      customer_id INT NOT NULL,
      PRIMARY KEY(no),
      INDEX (product_category, product_id),
      INDEX (customer_id),
      FOREIGN KEY (product_category, product_id)
      REFERENCES product(category, id)
      ON UPDATE CASCADE ON DELETE RESTRICT,
      FOREIGN KEY (customer_id)
      REFERENCES customer(id)
      ) ENGINE=INNODB;
      dev.mysql.com/doc/refman/8.0/en/create-table-foreign-keys.html

  • @victordelacroix654
    @victordelacroix654 3 года назад +2

    Мдэ... уже прохожу не первый курс. :) И везде какой-то затык на внешних ключах. :) Вроде понимаю что это и зачем, но как своё что-нибудь пытаюсь сделать - какой-то тупняк получается. :)
    Но вроде тут понял что с помощью ON DELETE "............." мы при создании таблицы указываем какие-то типа... ограничения на случай удаления что ли. :) Всё это указывается вроде в дочерней таблице.

    • @HtmllabRu
      @HtmllabRu  3 года назад +2

      Именно! Если удаляем запись из родительской таблицы (таблицы каталога), то удаляются связанные записи из дочерней 👍

  • @user-os1xg1rh4c
    @user-os1xg1rh4c 4 года назад +2

    вот отсюда, это отсюда - dev.mysql.com/doc/refman/8.0/en/create-table-foreign-keys.html

  • @serge124124124
    @serge124124124 5 лет назад

    а можно ли в java изменить айпи-адрес с помощью прокси-сервера?

    • @user-uj3rj6th2g
      @user-uj3rj6th2g 3 года назад

      с таким вопросом на со

  • @financenvy3931
    @financenvy3931 Год назад

    +

  • @alexzhaliazouski5924
    @alexzhaliazouski5924 2 года назад

    кей, кей, кей, кей