ну целостность очень полезная вещь т.к. потом бд превращается в не пойми что. Да и после можно открыть диаграмму в программе и визуально видеть что с чем связанно и переходить по этим связям что существенно облегчает жизнь. Конечно накладывает некие ограничение особенно при транкейтах, но это решается временной отменой проверки связей foreign_key_checks = 1;
Спасибо большое за видео-урок; У меня следующая проблема: CREATE TABLE IF NOT EXISTS `depart` ( `depart_id` int(11) unsigned NOT NULL AUTO_INCREMENT, `departament` varchar(255) DEFAULT NULL, PRIMARY KEY (`depart_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE IF NOT EXISTS `users` ( `user_id` int(11) unsigned NOT NULL AUTO_INCREMENT, `user_name` varchar(255) DEFAULT NULL, `depart_id` int(11) unsigned DEFAULT 1, PRIMARY KEY (`user_id`), FOREIGN KEY (`depart_id`) REFERENCES `depart` (`depart_id`) ON UPDATE CASCADE ON DELETE SET DEFAULT ) ENGINE=InnoDB DEFAULT CHARSET=utf8; При выполнении кода: delete from `depart` where `depart_id` = 3; (где depart_id 3 - это отдел разработки, и я ожидаю что у всех юзеров depart_id станет равен 1) Вылетает ошибка: ERROR 1451 (23000): Cannot delete or update a parent row: a foreign key constraint fails (`test`.`users`, CONSTRAINT `users_ibfk_1` FOREIGN KEY (`depart_id`) REFERENCES `depart` (`depart_id`) ON UPDATE CASCADE) Подскажите что я делаю не так. Спасибо!
вы все делали правильно, просто код в лекции где установлены значения по умолчанию при удалении и обновлении ключа не работает и не будет работать, ибо в документациии прямо об этом сказано "SET DEFAULT: This action is recognized by the MySQL parser, but both InnoDB and NDB reject table definitions containing ON DELETE SET DEFAULT or ON UPDATE SET DEFAULT clauses."