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

แชร์
ฝัง
  • เผยแพร่เมื่อ 17 ก.ย. 2024
  • Внешние ключи позволяют сохранить целостность данных в базах с таблицами на движке InnoDB, а также объединить данные из разных таблиц на этих внешних ключах. Foreign keys

ความคิดเห็น • 43

  • @sobermushroom1539
    @sobermushroom1539 3 ปีที่แล้ว +14

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

    • @HtmllabRu
      @HtmllabRu  3 ปีที่แล้ว +3

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

    • @АндрейМатрица
      @АндрейМатрица 2 ปีที่แล้ว +1

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

  • @How_i_live-u2l
    @How_i_live-u2l 5 ปีที่แล้ว +4

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

  • @user-ve8qy1ux3k
    @user-ve8qy1ux3k 3 ปีที่แล้ว +1

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

  • @igorzuev6885
    @igorzuev6885 2 ปีที่แล้ว +2

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

  • @janevermilion
    @janevermilion 4 ปีที่แล้ว +2

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

    • @HtmllabRu
      @HtmllabRu  4 ปีที่แล้ว +1

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

  • @jetbrain9115
    @jetbrain9115 ปีที่แล้ว +1

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

  • @user-ys3uu5un6l
    @user-ys3uu5un6l 2 ปีที่แล้ว +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 вот про это нет нормальных статей и информации.

  • @alexeicodes
    @alexeicodes 3 ปีที่แล้ว +2

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

  • @AlexanderOsnovnoi
    @AlexanderOsnovnoi 3 ปีที่แล้ว +2

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

  • @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

  • @ЕленаКовалевич-ч2л
    @ЕленаКовалевич-ч2л 4 ปีที่แล้ว +4

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

    • @HtmllabRu
      @HtmllabRu  4 ปีที่แล้ว +3

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

    • @ЕленаКовалевич-ч2л
      @ЕленаКовалевич-ч2л 4 ปีที่แล้ว +1

      @@HtmllabRu спасибо!

  • @Женечег-е7п
    @Женечег-е7п 3 ปีที่แล้ว +1

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

    • @HtmllabRu
      @HtmllabRu  3 ปีที่แล้ว +2

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

    • @Женечег-е7п
      @Женечег-е7п 3 ปีที่แล้ว +1

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

    • @Женечег-е7п
      @Женечег-е7п 3 ปีที่แล้ว

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

    • @HtmllabRu
      @HtmllabRu  3 ปีที่แล้ว +2

      @@Женечег-е7п да, как тут
      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

  • @АндрейСадовинский
    @АндрейСадовинский 3 ปีที่แล้ว

    Неплохо

  • @victordelacroix654
    @victordelacroix654 3 ปีที่แล้ว +2

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

    • @HtmllabRu
      @HtmllabRu  3 ปีที่แล้ว +2

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

  • @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.

  • @АльбертИванов-ц4х
    @АльбертИванов-ц4х 4 ปีที่แล้ว +2

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

  • @alexeicodes
    @alexeicodes 3 ปีที่แล้ว

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

    • @alexeicodes
      @alexeicodes 3 ปีที่แล้ว

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

    • @HtmllabRu
      @HtmllabRu  3 ปีที่แล้ว +1

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

  • @alexzhaliazouski5924
    @alexzhaliazouski5924 2 ปีที่แล้ว

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

  • @financenvy3931
    @financenvy3931 ปีที่แล้ว

    +

  • @serge124124124
    @serge124124124 5 ปีที่แล้ว

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

  • @waagnermann
    @waagnermann 2 ปีที่แล้ว +1

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

  • @texnosfera5963
    @texnosfera5963 4 ปีที่แล้ว +2

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