Внешние ключи позволяют сохранить целостность данных в базах с таблицами на движке InnoDB, а также объединить данные из разных таблиц на этих внешних ключах. Foreign keys
Лучшее объяснение! Простыми словами, без занудной и бесполезной академичности, наглядно, с примерами, отсылками к документации - здорово! Кто поставил дизлайки - ребята, вы серьезно? Может промахнулись все-таки? Автору - огромнейшее спасибо!
Подскажите, где можно побольше узнать о ENGINE=INNODB? Я не совсем понимаю, в каких случаях нужно писать это, ведь в прошлом при создании таблиц мы этого не указывали, а сейчас в примере с ключами указываем. Здесь есть завязка на ключах? Объясните, пожалуйста!
Подробней можно почитать тут dev.mysql.com/doc/refman/8.0/en/innodb-storage-engine.html, но в большинстве случаев ENGINE не придётся указывать, потому что по-умолчанию и так будет создаваться InnoDB и будет использоваться встроенный механизм внешних ключей
Karen, уже не помню. Constraint (ограничение) - опциональная часть внешнего ключа содержащая название ограничения; Foreign key - обязательный фрагмент описания внешнего ключа dev.mysql.com/doc/refman/5.6/en/create-table-foreign-keys.html
Для создания индекса на внешнем ключе. Когда таблица связывается по внешнему ключу, для неё точно будут запросы по этому полю, лучше заранее его «ускорить»
@@Женечег-е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.