Mysql Foreign Key

Vano

Новичок
2 таблицы. 1. Helpdesk "ticket_id" PK. 2. HelpdeskAnswers ticket_id внешний ключ каскадный к ключу Helpdesk.ticket_id. Почему когда я удаляю запись с таблицы Helpdesk -> захожу смотреть в HelpdeskAnswers пишет, записи остались, но я не могу их изменить или удалить. Дальше если я добавлю какую-нибудь новую запись в HelpdeskAnswers или изменю нормальную запись, те старые пропадут.
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
DDL таблиц, версия мускуля, ОС, как создавался FK?
 

Vano

Новичок
Код:
/*
Navicat MySQL Data Transfer

Source Server        : localhost_3306
Source Server Version : 50619
Source Host          : localhost:3306
Source Database      : test

Target Server Type    : MYSQL
Target Server Version : 50619
File Encoding        : 65001

Date: 2014-09-13 21:21:09
*/

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for `helpdesk`
-- ----------------------------
DROP TABLE IF EXISTS `helpdesk`;
CREATE TABLE `helpdesk` (
  `ticket_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `user_id` int(11) unsigned DEFAULT NULL,
  `text` text,
  PRIMARY KEY (`ticket_id`),
  KEY `FK_helpdesk_user_user` (`user_id`),
  CONSTRAINT `FK_helpdesk_user_user` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of helpdesk
-- ----------------------------
Код:
/*
Navicat MySQL Data Transfer

Source Server        : localhost_3306
Source Server Version : 50619
Source Host          : localhost:3306
Source Database      : test

Target Server Type    : MYSQL
Target Server Version : 50619
File Encoding        : 65001

Date: 2014-09-13 21:24:24
*/

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for `helpdesk_answers`
-- ----------------------------
DROP TABLE IF EXISTS `helpdesk_answers`;
CREATE TABLE `helpdesk_answers` (
  `answer_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `ticket_id` int(11) unsigned NOT NULL,
  `user_id` int(11) unsigned DEFAULT NULL,
  `text` text,
  PRIMARY KEY (`answer_id`),
  KEY `FK_helpdesk_answer_user_user` (`user_id`),
  KEY `FK_helpdesk_answer_ticket_helpdesk` (`ticket_id`),
  CONSTRAINT `FK_helpdesk_answer_ticket_helpdesk` FOREIGN KEY (`ticket_id`) REFERENCES `helpdesk` (`ticket_id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `FK_helpdesk_answer_user_user` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of helpdesk_answers
-- ----------------------------
Это типа дамп навикатом. Если я правильно понял что такое ДДЛ

ОС БолдженОС)) шутка Windows 7

Версия 5.6.19-log - MySQL Community Server (GPL)
 

Vano

Новичок
Вот же мистика. На другой БД работает нормально, а на этой нет. Но проблема точно не из-за таблицы или неправильной настройки ключа, я создал еще 2 простые таблицы и та же проблема.
 

Linker

Новичок
Vano, зачем "навикаты" с дампами?
Вы можете из консоли запросы выполнять к MySQL? В смысле, если запустить cmd.exe а затем, в консоли, mysql?
Например, чтобы не делать дампов навикатами, для просмотра структуры таблицы, можно выполнить команду:
SHOW CREATE TABLE `helpdesk`;

и тут же, в консоли, можно протестировать всё остальное, вначале выполнить INSERT, затем, выполнить SELECT, чтобы посмотреть изменения, после INSERT, потом DELETE и снова SELECT, чтобы опять своими глазами увидеть изменения. Если в простейших примерах выполняемых в консоли всё отработало как и ожидалось, то видимо у вас что-то там дальше происходит не то, в скриптах или в утилите администрирования БД отображается не то, по вашей вине, естественно, не по вине утилиты (не туда подключились, не туда смотрите и т.д. и т.п.)

и ещё, ON UPDATE CASCADE будет задействовано только в случае изменения первичного ключа родительской таблицы (например, id из `users`) неужели это действительно может понадобиться?
 
Сверху