Внешние ключи позволяют сохранить целостность данных в базах с таблицами на движке InnoDB, а также объединить данные из разных таблиц на этих внешних ключах. Foreign keys
Лучшее объяснение! Простыми словами, без занудной и бесполезной академичности, наглядно, с примерами, отсылками к документации - здорово! Кто поставил дизлайки - ребята, вы серьезно? Может промахнулись все-таки? Автору - огромнейшее спасибо!
Karen, уже не помню. Constraint (ограничение) - опциональная часть внешнего ключа содержащая название ограничения; Foreign key - обязательный фрагмент описания внешнего ключа dev.mysql.com/doc/refman/5.6/en/create-table-foreign-keys.html
Подскажите, где можно побольше узнать о ENGINE=INNODB? Я не совсем понимаю, в каких случаях нужно писать это, ведь в прошлом при создании таблиц мы этого не указывали, а сейчас в примере с ключами указываем. Здесь есть завязка на ключах? Объясните, пожалуйста!
Подробней можно почитать тут dev.mysql.com/doc/refman/8.0/en/innodb-storage-engine.html, но в большинстве случаев ENGINE не придётся указывать, потому что по-умолчанию и так будет создаваться InnoDB и будет использоваться встроенный механизм внешних ключей
Для создания индекса на внешнем ключе. Когда таблица связывается по внешнему ключу, для неё точно будут запросы по этому полю, лучше заранее его «ускорить»
@@Женечег-е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
Мдэ... уже прохожу не первый курс. :) И везде какой-то затык на внешних ключах. :) Вроде понимаю что это и зачем, но как своё что-нибудь пытаюсь сделать - какой-то тупняк получается. :) Но вроде тут понял что с помощью ON DELETE "............." мы при создании таблицы указываем какие-то типа... ограничения на случай удаления что ли. :) Всё это указывается вроде в дочерней таблице.
Я правильно понимаю, что при создании FK если мы прописываем ON DELETE RESTRICT, то это тоже самое, как если бы мы вообще ничего не прописывали? Т.е. в обоих случаях мы не сможем удалять запись из тоблицы родителей, если в таблице детей есть их дети?
А, нашел уже ответ в документации 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.
Лучшее объяснение! Простыми словами, без занудной и бесполезной академичности, наглядно, с примерами, отсылками к документации - здорово! Кто поставил дизлайки - ребята, вы серьезно? Может промахнулись все-таки? Автору - огромнейшее спасибо!
Спасибо за поддержку!)
в 22ом дизлайки чудесным образом испарились) действительно здорово!
О! То, что нужно. А я просил видео про каскадное удаление. А оно под носом :)
господи боже спасибо огромное! добра вам и здоровья!
Очень помог разобраться, спасибо!
Спасибо вам большое!Сидела тупила с этими ключами)теперь все понятно)
Рад, что ролик помог!
Спасибо тебе большое, добрый человек!)
Спасибо за объяснение.
Вместо тысячи статей, супер, спасибо!
Вот только как настраивать внешние ключи в уже существующие таблицы ... ?
При помощи ALTER TABLE dev.mysql.com/doc/refman/8.0/en/alter-table.html
@@HtmllabRu да я понимаю, читал стати, но почему то у меня не срабатывает, а у всех примеры только при создании таблицы.
@@fruit_stream потому что добавить внешние ключи ещё не так сложно, а вот удаление может не получится из-за наличия данных в дочерних таблицах
@@HtmllabRu вот про это нет нормальных статей и информации.
Спасибо за отличное видео!
Полезно, спасибо)
Спасибо за отличный видос. А в ваших других видео есть обяснение что значит Constraint, Foreign key constraint ?
Karen, уже не помню.
Constraint (ограничение) - опциональная часть внешнего ключа содержащая название ограничения;
Foreign key - обязательный фрагмент описания внешнего ключа dev.mysql.com/doc/refman/5.6/en/create-table-foreign-keys.html
Подскажите, где можно побольше узнать о ENGINE=INNODB? Я не совсем понимаю, в каких случаях нужно писать это, ведь в прошлом при создании таблиц мы этого не указывали, а сейчас в примере с ключами указываем. Здесь есть завязка на ключах? Объясните, пожалуйста!
Подробней можно почитать тут dev.mysql.com/doc/refman/8.0/en/innodb-storage-engine.html, но в большинстве случаев ENGINE не придётся указывать, потому что по-умолчанию и так будет создаваться InnoDB и будет использоваться встроенный механизм внешних ключей
@@HtmllabRu спасибо!
Отлично объясняете, только мне непонятно зачем нужна была строчка INDEX par_ind (parent_id)
Для создания индекса на внешнем ключе. Когда таблица связывается по внешнему ключу, для неё точно будут запросы по этому полю, лучше заранее его «ускорить»
@@HtmllabRu Теперь понятно, спасибо)
Еще один вопрос есть:
Что делать если мы хотим указать два внешних ключа для одной таблицы из двух других таблиц?
Два раза прописывать FOREIGN KEY()?
@@Женечег-е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
Неплохо
Мдэ... уже прохожу не первый курс. :) И везде какой-то затык на внешних ключах. :) Вроде понимаю что это и зачем, но как своё что-нибудь пытаюсь сделать - какой-то тупняк получается. :)
Но вроде тут понял что с помощью ON DELETE "............." мы при создании таблицы указываем какие-то типа... ограничения на случай удаления что ли. :) Всё это указывается вроде в дочерней таблице.
Именно! Если удаляем запись из родительской таблицы (таблицы каталога), то удаляются связанные записи из дочерней 👍
Я правильно понимаю, что при создании FK если мы прописываем ON DELETE RESTRICT, то это тоже самое, как если бы мы вообще ничего не прописывали? Т.е. в обоих случаях мы не сможем удалять запись из тоблицы родителей, если в таблице детей есть их дети?
А, нашел уже ответ в документации 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.
вот отсюда, это отсюда - dev.mysql.com/doc/refman/8.0/en/create-table-foreign-keys.html
а про FOREIGN KEYS будет ещё видео в этом плейлисте?
насколько понимаю, одно из или даже самое важное при изучении реляционных БД
В следующем видео будет рассказ о inner join и других объединениях, на основе foreign keys.
кей, кей, кей, кей
+
а можно ли в java изменить айпи-адрес с помощью прокси-сервера?
с таким вопросом на со
спасибо за видео! всё чётко!
Видео прекрасно 👍