SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 13.11.2009 22:50:55

nik_ola
Участник
Зарегистрирован: 13.11.2009
Сообщений: 2

Помогите решить проблему с ошибкой: Cannot delete or update a parent row: a foreign key constraint f

С установкой одной CMS на сервере возникла проблема: не создаются полностью таблицы базы данных (всего только три) и скрипт выдает ошибку:

I failed to setup your database. Please make sure you provided the right mysql credentials!
Details (if any):
Cannot delete or update a parent row: a foreign key constraint fails

Как я уже говорил, таблиц при этом только три создается и удалить их из базы получается только со второй попытки. В phpMyAdmin появляется ошибка:

#1217 - Cannot delete or update a parent row: a foreign key constraint fails

Я еще только начинаю, так что опыта мало... Подскажите, как можно решить проблему, если можно, подробно...
Версия MySQL:      5.0.86 MySQLi

Неактивен

 

#2 15.11.2009 23:52:43

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: Помогите решить проблему с ошибкой: Cannot delete or update a parent row: a foreign key constraint f

Правильный способ — не использовать CMS, которая даже поставиться не может.

Чуть менее правильный способ — запретить временно таблички InnoDB (--skip-innodb),
поставить CMS (она поставит таблички MyISAM без внешних ключей, таких ошибок
не будет), потом снова включить InnoDB и сконвертировать в нее таблички.

Как вариант чуть менее правильного — найти место в скрипте CMS, который настраивает
таблицы, и закомментировать там создание внешних ключей.

Неактивен

 

#3 16.11.2009 21:42:38

nik_ola
Участник
Зарегистрирован: 13.11.2009
Сообщений: 2

Re: Помогите решить проблему с ошибкой: Cannot delete or update a parent row: a foreign key constraint f

Так то оно, может и так, но...
Дело в том, что скрипт на хостинге устанавливалсяи таблицы создавались MyISAM (две только оставались почему-то InnoDB) и в файл конфигурации все данные записывались. А вот на моем VPS никак не хочет работать и таблицы пытаются создаваться в InnoDB. Видимо, все-таки на хостинге в MySQL есть какие настройки или что-то установлено дополнительно, а у меня этого нет. Вот это я и не могу определить. Должно же быть какое-то решение. Сам скрипт, если интересно - http://www.wallpaperscript.net/. Работает же он как-то на других хостингах...
Вот схема запросов этого скрипта для формирования таблиц при установке.

DROP TABLE IF EXISTS `{|DBPREFIX|}added_permissions`;
DROP TABLE IF EXISTS `{|DBPREFIX|}categories`;
DROP TABLE IF EXISTS `{|DBPREFIX|}colors`;
DROP TABLE IF EXISTS `{|DBPREFIX|}colors_rel`;
DROP TABLE IF EXISTS `{|DBPREFIX|}comments`;
DROP TABLE IF EXISTS `{|DBPREFIX|}downloads`;
DROP TABLE IF EXISTS `{|DBPREFIX|}groups`;
DROP TABLE IF EXISTS `{|DBPREFIX|}hits`;
DROP TABLE IF EXISTS `{|DBPREFIX|}partners`;
DROP TABLE IF EXISTS `{|DBPREFIX|}permissions`;
DROP TABLE IF EXISTS `{|DBPREFIX|}searches`;
DROP TABLE IF EXISTS `{|DBPREFIX|}search_queries`;
DROP TABLE IF EXISTS `{|DBPREFIX|}sessions`;
DROP TABLE IF EXISTS `{|DBPREFIX|}site_settings`;
DROP TABLE IF EXISTS `{|DBPREFIX|}tags`;
DROP TABLE IF EXISTS `{|DBPREFIX|}tags_rel`;
DROP TABLE IF EXISTS `{|DBPREFIX|}tag_exclusion`;
DROP TABLE IF EXISTS `{|DBPREFIX|}users`;
DROP TABLE IF EXISTS `{|DBPREFIX|}votes`;
DROP TABLE IF EXISTS `{|DBPREFIX|}wallpapers`;
DROP TABLE IF EXISTS `{|DBPREFIX|}schedule`;
DROP TABLE IF EXISTS `{|DBPREFIX|}scheduled_wallpapers`;

CREATE TABLE IF NOT EXISTS `{|DBPREFIX|}added_permissions` (
  `ID` int(10) NOT NULL auto_increment,
  `item_id` int(11) NOT NULL,
  `item_type` enum('user','group') NOT NULL,
  `area` int(11) NOT NULL,
  PRIMARY KEY  (`ID`),
  UNIQUE KEY `item_id` (`area`,`item_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8;

CREATE TABLE IF NOT EXISTS `{|DBPREFIX|}categories` (
  `ID` int(11) NOT NULL auto_increment,
  `id_parent` int(11) NOT NULL default '0',
  `is_locked` tinyint(1) default '0',
  `issubcat` varchar(11) default NULL,
  `title` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
  `description` text CHARACTER SET utf8 COLLATE utf8_unicode_ci,
  `meta_description` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci default NULL,
  `meta_keywords` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci default NULL,
  `order1` int(11) default '0',
  `items_counter` int(11) default '0',
  `subcats_counter` int(11) default '0',
  `lft` int(11) default NULL,
  `rgt` int(11) default NULL,
  PRIMARY KEY  (`ID`),
  KEY `id_parent` (`id_parent`),
  KEY `lft` (`lft` , `rgt`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8;

CREATE TABLE IF NOT EXISTS `{|DBPREFIX|}colors` (
  `ID` int(11) NOT NULL auto_increment,
  `color` varchar(255) NOT NULL,
  `occurences` int(11) default '1',
  PRIMARY KEY  (`ID`),
  UNIQUE KEY `color` (`color`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8;

CREATE TABLE IF NOT EXISTS `{|DBPREFIX|}colors_rel` (
  `color_id` int(11) NOT NULL,
  `item_id` int(11) NOT NULL,
  PRIMARY KEY `color_id` (`color_id`,`item_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8;

CREATE TABLE IF NOT EXISTS `{|DBPREFIX|}comments` (
  `ID` int(11) NOT NULL auto_increment,
  `item_id` int(11) NOT NULL,
  `c_name` varchar(255) NOT NULL,
  `c_email` varchar(255) default '',
  `c_url` text,
  `c_comment` text NOT NULL,
  `date_added` int(10) NOT NULL,
  `active` smallint(1) default '0',
  PRIMARY KEY  (`ID`),
  KEY `item_id` (`item_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

CREATE TABLE IF NOT EXISTS `{|DBPREFIX|}downloads` (
  `item_id` int(11) NOT NULL,
  `ip` varchar(32) default NULL,
  PRIMARY KEY `item_id` (`item_id`,`ip`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

CREATE TABLE IF NOT EXISTS `{|DBPREFIX|}groups` (
  `ID` tinyint(3) NOT NULL auto_increment,
  `title` varchar(255) NOT NULL,
  `description` varchar(255) default NULL,
  `login_redirect` varchar(255) default NULL,
  `logout_redirect` varchar(255) default NULL,
  PRIMARY KEY  (`ID`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8;

CREATE TABLE IF NOT EXISTS `{|DBPREFIX|}hits` (
  `item_id` int(11) default NULL,
  `ip` varchar(50) default NULL,
  PRIMARY KEY `item_id` (`item_id`,`ip`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8;

CREATE TABLE IF NOT EXISTS `{|DBPREFIX|}partners` (
  `ID` int(11) NOT NULL auto_increment,
  `title` varchar(255) NOT NULL,
  `description` tinytext,
  `link` tinytext NOT NULL,
  PRIMARY KEY  (`ID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

CREATE TABLE IF NOT EXISTS `{|DBPREFIX|}permissions` (
  `ID` int(11) NOT NULL auto_increment,
  `label` varchar(55) NOT NULL,
  `parent_id` int(11) default '0',
  `editable` tinyint(1) NOT NULL default '0',
  PRIMARY KEY  (`ID`),
  KEY `parent_id` (`parent_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8;

CREATE TABLE IF NOT EXISTS `{|DBPREFIX|}searches` (
  `ID` int(11) NOT NULL auto_increment,
  `search_string` varchar(255) NOT NULL,
  `date_added` varchar(11) NOT NULL,
  PRIMARY KEY  (`ID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

CREATE TABLE IF NOT EXISTS `{|DBPREFIX|}search_queries` (
  `ID` int(11) NOT NULL auto_increment,
  `query` text NOT NULL,
  `date_added` varchar(11) NOT NULL,
  PRIMARY KEY  (`ID`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8;

CREATE TABLE IF NOT EXISTS `{|DBPREFIX|}sessions` (
  `session_id` varchar(40) NOT NULL default '0',
  `ip_address` varchar(16) NOT NULL default '0',
  `user_agent` varchar(50) NOT NULL,
  `last_activity` int(10) unsigned NOT NULL default '0',
  `user_data` text default NULL,
  `uri_string` varchar(255) default '',
  PRIMARY KEY  (`session_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

CREATE TABLE IF NOT EXISTS `{|DBPREFIX|}site_settings` (
  `ID` int(11) NOT NULL auto_increment,
  `label` varchar(255) NOT NULL,
  `value` text NOT NULL,
  PRIMARY KEY  (`ID`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8;

CREATE TABLE IF NOT EXISTS `{|DBPREFIX|}tags` (
  `ID` int(11) NOT NULL AUTO_INCREMENT,
  `tag` varchar(255) NOT NULL,
  `occurences` int(11) DEFAULT '1',
  `exclude` tinyint(1) DEFAULT '0',
  PRIMARY KEY (`ID`),
  UNIQUE KEY `tag` (`tag`),
  KEY `exclude` (`exclude`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

CREATE TABLE IF NOT EXISTS `{|DBPREFIX|}tags_rel` (
  `tag_id` int(11) NOT NULL,
  `item_id` int(11) NOT NULL,
  PRIMARY KEY `tag_id` (`tag_id`,`item_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8;

CREATE TABLE IF NOT EXISTS `{|DBPREFIX|}users` (
  `ID` int(11) NOT NULL auto_increment,
  `Username` varchar(255) NOT NULL,
  `Password` varchar(255) NOT NULL,
  `date_registered` int(11) NOT NULL,
  `Temp_pass` varchar(55) default NULL,
  `Temp_pass_active` tinyint(1) NOT NULL default '0',
  `Email` varchar(255) NOT NULL,
  `Active` int(11) NOT NULL default '0',
  `Level_access` int(11) NOT NULL default '2',
  `Random_key` varchar(32) default NULL,
  `auto_approve` tinyint(1) default '0',
  PRIMARY KEY  (`ID`),
  UNIQUE KEY `Username` (`Username`),
  UNIQUE KEY `Email` (`Email`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8;

CREATE TABLE IF NOT EXISTS `{|DBPREFIX|}votes` (
  `item_id` int(11) NOT NULL default '0',
  `visitor_ip` varchar(32) NOT NULL default '127.0.0.1',
  `vote_value` varchar(2) NOT NULL default '0',
  PRIMARY KEY `item_id` (`item_id`,`visitor_ip`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

CREATE TABLE IF NOT EXISTS `{|DBPREFIX|}wallpapers` (
  `ID` int(11) NOT NULL auto_increment,
  `user_id` int(11) NOT NULL,
  `file_title` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
  `title_alias` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci default NULL,
  `cat_id` int(11) NOT NULL,
  `parent_id` int(11) default '0',
  `active` tinyint(1) default '0',
  `description` text CHARACTER SET utf8 COLLATE utf8_unicode_ci,
  `type` enum('normal', 'wide', 'iphone', 'psp', 'hd', 'multi', 'other') default 'normal',
  `height` int(11) default NULL,
  `width` int(11) default NULL,
  `date_added` varchar(11) NOT NULL,
  `downloads` int(11) default '0',
  `hits` int(11) default '0',
  `rating` float default '0',
  `hash` varchar(55) default NULL,
  PRIMARY KEY  (`ID`),
  KEY `parent_id` ( `parent_id` , `active` ),
  KEY `height` ( `height` , `width` ),
  KEY `cat_id` (`cat_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

INSERT INTO `{|DBPREFIX|}groups` (`ID`, `title`, `description`, `login_redirect`, `logout_redirect`) VALUES (1, 'Admins', 'The admin(s) with full rights', 'admin', 'login'), (2, 'Members', 'The default members group', 'members', 'login');
INSERT INTO `{|DBPREFIX|}users` (`ID`, `Username`, `Password`, `date_registered`, `Temp_pass`, `Temp_pass_active`, `Email`, `Active`, `Level_access`) VALUES (1, '{|ADMIN_USERNAME|}', '{|ADMIN_PASSWORD|}', {|NOW|}, NULL, 0, '{|ADMIN_EMAIL|}', 1, 1);
INSERT INTO `{|DBPREFIX|}site_settings` (`label`,`value`) VALUES ('WS_VERSION', '3.4.0 RC3');
INSERT INTO `{|DBPREFIX|}site_settings` (`label`,`value`) VALUES ('bg_pattern', '0.jpg');
INSERT INTO `{|DBPREFIX|}added_permissions` (`ID`, `item_id`, `item_type`, `area`) VALUES(1, 2, 'group', 3);
INSERT INTO `{|DBPREFIX|}permissions` (`ID`, `label`, `parent_id`, `editable`) VALUES
(1, 'Wallpapers', 0, 0),
(2, 'view', 1, 0),
(3, 'create', 1, 0),
(4, 'edit', 1, 0),
(5, 'delete', 1, 0),
(6, 'activate', 1, 0),
(7, 'suspend', 1, 0),
(8, 'Users', 0, 0),
(9, 'view', 8, 0),
(10, 'create', 8, 0),
(11, 'edit', 8, 0),
(12, 'delete', 8, 0),
(13, 'activate', 8, 0),
(14, 'suspend', 8, 0),
(15, 'Groups', 0, 0),
(16, 'view', 15, 0),
(17, 'create', 15, 0),
(18, 'edit', 15, 0),
(19, 'delete', 15, 0),
(20, 'activate', 15, 0),
(21, 'suspend', 15, 0),
(22, 'Categories', 0, 0),
(23, 'view', 22, 0),
(24, 'create', 22, 0),
(25, 'edit', 22, 0),
(26, 'delete', 22, 0),
(27, 'lock', 22, 0),
(28, 'unlock', 22, 0),
(29, 'Permissions', 0, 0),
(30, 'view', 29, 0),
(31, 'create', 29, 0),
(32, 'edit', 29, 0),
(33, 'delete', 29, 0),
(34, 'Site settings', 0, 0),
(35, 'view', 34, 0),
(36, 'edit', 34, 0),
(37, 'Contact', 8, 0),
(38, 'Tag cloud', 0, 0),
(39, 'add_exclusion', 38, 0),
(40, 'edit', 38, 0),
(41, 'delete_exclusion', 38, 0),
(42, 'Partners', 0, 0),
(43, 'add', 42, 0),
(44, 'edit', 42, 0),
(45, 'delete', 42, 0),
(46, 'Comments', 0, 0),
(47, 'manage', 46, 0);

CREATE  TABLE IF NOT EXISTS `{|DBPREFIX|}schedule` (
  `id` INT(11) NOT NULL AUTO_INCREMENT ,
  `amount` INT(11) NOT NULL ,
  `interval` INT NOT NULL ,
  `last_run` int(10) DEFAULT NULL,
  PRIMARY KEY (`id`) )
ENGINE = InnoDB;


CREATE  TABLE IF NOT EXISTS `{|DBPREFIX|}scheduled_wallpapers` (
  `schedule_id` INT(11) NOT NULL ,
  `wallpaper_id` INT(11) NOT NULL ,
  PRIMARY KEY (`schedule_id`,`wallpaper_id`) ,
  KEY `fk_scheduled_wallpapers_schedule` (`schedule_id`) ,
  KEY `fk_scheduled_wallpapers_wallpaper` (`wallpaper_id`)
)
ENGINE = InnoDB;

ALTER TABLE `{|DBPREFIX|}scheduled_wallpapers`
  ADD CONSTRAINT `fk_scheduled_wallpapers_schedule` FOREIGN KEY (`schedule_id`) REFERENCES `{|DBPREFIX|}schedule` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  ADD CONSTRAINT `fk_scheduled_wallpapers_wallpaper` FOREIGN KEY (`wallpaper_id`) REFERENCES `{|DBPREFIX|}wallpapers` (`ID`) ON DELETE CASCADE ON UPDATE CASCADE;

Просто я уже не знаю, где копать...

Неактивен

 

#4 16.11.2009 21:53:54

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: Помогите решить проблему с ошибкой: Cannot delete or update a parent row: a foreign key constraint f

Плюньте на последний запрос и закомментируйте его. Нет внешних ключей — нет проблем smile

Ну или поменяйте местами добавление данных и изменение метаданных. Тогда все таблицы
создадутся, а какие-то данные «не влезут» из-за нехватки значений в смежных таблицах.

Если заполнять в правильном порядке (wallpapers, schedule, scheduled_wallpapers), то должно
работать. При условии, что данные между собой связаны.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson