Форум программистов, компьютерный форум, киберфорум
Наши страницы
MySQL
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
votanko
0 / 0 / 2
Регистрация: 18.11.2012
Сообщений: 76
1

Внешние ключи Cascade: При записи в таблицу тикетс — все записывается, а при записи в hub - ошибка

26.08.2014, 08:41. Просмотров 784. Ответов 4
Метки нет (Все метки)

Никак не могу разобраться со связями и внешними ключами в базе.


Ограничение на ключи сделал Cascade
проблема в том что при записи в таблицу тикетс - все норм записываеться , а при записи в hub происходит ошибка.

#1452 - Cannot add or update a child row: a foreign key constraint fails (`Online_quest`.`hub`, CONSTRAINT `hub_ibfk_11` FOREIGN KEY (`id`) REFERENCES `Tickets` (`id`) ON DELETE CASCADE ON UPDATE CASCADE)
но добавление это протисходит после того как я добавил строку в Tickets - вроде же все должно работать или я чего то не понимаю?

Таблица id на другие таблицы.
MySQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
CREATE TABLE IF NOT EXISTS `hub` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `dictors_id` int(11) NOT NULL,
  `user_id` int(11) NOT NULL,
  `substrate_id` int(11) NOT NULL,
  `mobile_request_id` int(11) NOT NULL,
  `type_rolik_id` int(11) NOT NULL,
  `type_play_id` int(11) NOT NULL,
  `type_pay_id` int(11) NOT NULL,
  `city_play_id` int(11) NOT NULL,
  `status_id` int(11) NOT NULL,
  `zakaz_id` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `fk_hub_dictors_idx` (`dictors_id`),
  KEY `fk_hub_User1_idx` (`user_id`),
  KEY `fk_hub_substrate1_idx` (`substrate_id`),
  KEY `fk_hub_mobile_request1_idx` (`mobile_request_id`),
  KEY `fk_hub_type_rolik1_idx` (`type_rolik_id`),
  KEY `fk_hub_type_play1_idx` (`type_play_id`),
  KEY `fk_hub_type_pay1_idx` (`type_pay_id`),
  KEY `fk_hub_city_play1_idx` (`city_play_id`),
  KEY `fk_hub_status1_idx` (`status_id`),
  KEY `fk_hub_zakaz1_idx` (`zakaz_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=26 ;
 
--
-- Dumping data for table `hub`
--
 
INSERT INTO `hub` (`id`, `dictors_id`, `user_id`, `substrate_id`, `mobile_request_id`, `type_rolik_id`, `type_play_id`, `type_pay_id`, `city_play_id`, `status_id`, `zakaz_id`) VALUES
(1, 1, 2, 1, 2, 2, 3, 2, 3, 2, 1),
(7, 2, 2, 3, 2, 3, 2, 2, 3, 3, 2),
(8, 3, 3, 3, 2, 1, 2, 1, 2, 2, 2);
Главная таблица
MySQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
CREATE TABLE IF NOT EXISTS `Tickets` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `text` varchar(300) DEFAULT NULL,
  `original_text` varchar(300) DEFAULT NULL,
  `date_end` varchar(10) DEFAULT NULL,
  `wishes_text` varchar(45) DEFAULT NULL,
  `price` double DEFAULT NULL,
  `date_begin` varchar(45) DEFAULT NULL,
  `date_pay` varchar(45) DEFAULT NULL,
  `chrono` varchar(45) DEFAULT NULL,
  `name_video` varchar(45) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=25 ;
 
--
-- Dumping data for table `Tickets`
--
 
INSERT INTO `Tickets` (`id`, `text`, `original_text`, `date_end`, `wishes_text`, `price`, `date_begin`, `date_pay`, `chrono`, `name_video`) VALUES
(1, '123', 'jhkhjkhjk', '1232323', 'asdasd', 1000, 'asd', 'asda', 'sdas', 'asd'),
(7, 'sdf', 'sdf', 'sdf', 'sdf', 111, 'asda', 'dsadf', 'a', 'sdf'),
(8, 'asdf', 'asdf', 'asdf', 'asdfasd', 111, 'asdf', 'asdf', 'sdf', 'asdf'),
(9, 'sdf', 'sdf', 'sdf', 'sdf', 111, 'asda', 'dsadf', 'a', 'sdf'),
(10, 'asdf', 'asdf', 'asdf', 'asdfasd', 111, 'asdf', 'asdf', 'sdf', 'asdf'),
(11, 'adfsa', 'sdfasdfasdfadf', '2323123', 'adsfasdfasdfasdfasdfasdf', 123123123, '123123', 'szdfsdfasdfasdf', '456456', ''),
(24, '', '', '', '', 0, '', '', '', '');
Одна из таблиц id которой записываеться в hub
MySQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
CREATE TABLE IF NOT EXISTS `status` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `status` varchar(45) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=5 ;
 
--
-- Dumping data for table `status`
--
 
INSERT INTO `status` (`id`, `status`) VALUES
(1, 'In progress'),
(2, 'Done'),
(3, 'In beginning'),
(4, 'At the end');
[/HASKELL]Никак не могу разобраться со связями и внешними ключами в базе.


Ограничение на ключи сделал Cascade
проблема в том что при записи в таблицу тикетс - все норм записываеться , а при записи в hub происходит ошибка.

#1452 - Cannot add or update a child row: a foreign key constraint fails (`Online_quest`.`hub`, CONSTRAINT `hub_ibfk_11` FOREIGN KEY (`id`) REFERENCES `Tickets` (`id`) ON DELETE CASCADE ON UPDATE CASCADE)
но добавление это протисходит после того как я добавил строку в Tickets - вроде же все должно работать или я чего то не понимаю?
Спасибо за помощь.

Таблица id на другие таблицы.
MySQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
CREATE TABLE IF NOT EXISTS `hub` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `dictors_id` int(11) NOT NULL,
  `user_id` int(11) NOT NULL,
  `substrate_id` int(11) NOT NULL,
  `mobile_request_id` int(11) NOT NULL,
  `type_rolik_id` int(11) NOT NULL,
  `type_play_id` int(11) NOT NULL,
  `type_pay_id` int(11) NOT NULL,
  `city_play_id` int(11) NOT NULL,
  `status_id` int(11) NOT NULL,
  `zakaz_id` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `fk_hub_dictors_idx` (`dictors_id`),
  KEY `fk_hub_User1_idx` (`user_id`),
  KEY `fk_hub_substrate1_idx` (`substrate_id`),
  KEY `fk_hub_mobile_request1_idx` (`mobile_request_id`),
  KEY `fk_hub_type_rolik1_idx` (`type_rolik_id`),
  KEY `fk_hub_type_play1_idx` (`type_play_id`),
  KEY `fk_hub_type_pay1_idx` (`type_pay_id`),
  KEY `fk_hub_city_play1_idx` (`city_play_id`),
  KEY `fk_hub_status1_idx` (`status_id`),
  KEY `fk_hub_zakaz1_idx` (`zakaz_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=26 ;
 
--
-- Dumping data for table `hub`
--
 
INSERT INTO `hub` (`id`, `dictors_id`, `user_id`, `substrate_id`, `mobile_request_id`, `type_rolik_id`, `type_play_id`, `type_pay_id`, `city_play_id`, `status_id`, `zakaz_id`) VALUES
(1, 1, 2, 1, 2, 2, 3, 2, 3, 2, 1),
(7, 2, 2, 3, 2, 3, 2, 2, 3, 3, 2),
(8, 3, 3, 3, 2, 1, 2, 1, 2, 2, 2);
Главная таблица
MySQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
CREATE TABLE IF NOT EXISTS `Tickets` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `text` varchar(300) DEFAULT NULL,
  `original_text` varchar(300) DEFAULT NULL,
  `date_end` varchar(10) DEFAULT NULL,
  `wishes_text` varchar(45) DEFAULT NULL,
  `price` double DEFAULT NULL,
  `date_begin` varchar(45) DEFAULT NULL,
  `date_pay` varchar(45) DEFAULT NULL,
  `chrono` varchar(45) DEFAULT NULL,
  `name_video` varchar(45) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=25 ;
 
--
-- Dumping data for table `Tickets`
--
 
INSERT INTO `Tickets` (`id`, `text`, `original_text`, `date_end`, `wishes_text`, `price`, `date_begin`, `date_pay`, `chrono`, `name_video`) VALUES
(1, '123', 'jhkhjkhjk', '1232323', 'asdasd', 1000, 'asd', 'asda', 'sdas', 'asd'),
(7, 'sdf', 'sdf', 'sdf', 'sdf', 111, 'asda', 'dsadf', 'a', 'sdf'),
(8, 'asdf', 'asdf', 'asdf', 'asdfasd', 111, 'asdf', 'asdf', 'sdf', 'asdf'),
(9, 'sdf', 'sdf', 'sdf', 'sdf', 111, 'asda', 'dsadf', 'a', 'sdf'),
(10, 'asdf', 'asdf', 'asdf', 'asdfasd', 111, 'asdf', 'asdf', 'sdf', 'asdf'),
(11, 'adfsa', 'sdfasdfasdfadf', '2323123', 'adsfasdfasdfasdfasdfasdf', 123123123, '123123', 'szdfsdfasdfasdf', '456456', ''),
(24, '', '', '', '', 0, '', '', '', '');
Одна из таблиц id которой записываеться в hub
MySQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
CREATE TABLE IF NOT EXISTS `status` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `status` varchar(45) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=5 ;
 
--
-- Dumping data for table `status`
--
 
INSERT INTO `status` (`id`, `status`) VALUES
(1, 'In progress'),
(2, 'Done'),
(3, 'In beginning'),
(4, 'At the end');
Добавлено через 3 минуты
Походу внешний ключ одной ссылается на несуществующую запись в другой таблице.
А как тогда заполнить данные таблицы?

Добавлено через 21 минуту
MySQL
1
INSERT INTO `hub`(`id`, `dictors_id`, `user_id`, `substrate_id`, `mobile_request_id`, `type_rolik_id`, `type_play_id`, `type_pay_id`, `city_play_id`, `status_id`, `zakaz_id`) VALUES (24,1,1,1,1,1,1,1,1,1,1)
Такой запрос прокатывает, если вводить в ручную id = 24. А как сделать что бы автоматом работало?
Ид автоинкремент если 0 ставить то не отрабатывает почему то.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.08.2014, 08:41
Ответы с готовыми решениями:

Почему ошибка при добавлении записи в таблицу?
Запрос: insert into partners set uid=12, partner_code='a2d9230c73', NULL, '1.00', '0' Таблица...

Изменение записи в таблице при добавлении записи в другую таблицу
Есть две таблицы TProduct(товары) и TIncoming(приход) с полями "наименование" и "количество"....

Ошибка при добавлении записи в таблицу
Добрый день! При добавлении новой записи в таблицу ругается на выделенный символ: ......

Ошибка при добавлении записи в таблицу
Ребят ситуация в следующем, необходимо создать клиент к базе. И вот почти сразу я столкнулся с...

Ошибка при добавлении записи в таблицу!!!
Доброго времени суток! Тема моей курсовой разработка приложения для предметной области "Учёт...

4
_ViPeR_
598 / 477 / 170
Регистрация: 02.03.2010
Сообщений: 1,181
26.08.2014, 08:54 2
Если нужно вставить запись со значением поля, на которое навешан foreign key, но в reference'ной таблице нет записи с таким id, то, либо, сначала добавить в reference'ную таблицу нужную запись, а потом уже добавлять в ту, где внешний ключ, либо
MySQL
1
2
3
SET foreign_key_checks = 0;
INSERT ...
SET foreign_key_checks = 1;
К такому методу стоит прибегать только в крайних случаях, иначе от целостности БД ничего не останется. Крайним случаем можно считать перекрестные внешние ключи
0
votanko
0 / 0 / 2
Регистрация: 18.11.2012
Сообщений: 76
26.08.2014, 09:10  [ТС] 3
Я так и делаю.
Сначала в Tickets добавляеться запись с id=25 например.
Потом идет запрос добавления в hub.
Но такой запрос не отрабатывает.
MySQL
1
INSERT INTO `hub`(`id`, `dictors_id`, `user_id`, `substrate_id`, `mobile_request_id`, `type_rolik_id`, `type_play_id`, `type_pay_id`, `city_play_id`, `status_id`, `zakaz_id`) VALUES (0,1,1,1,1,1,1,1,1,1,1)
Но если я введу вручную ид=25, то все отрабатывает.

Добавлено через 2 минуты
Автоинкремент в таблице точно стоит.
0
_ViPeR_
598 / 477 / 170
Регистрация: 02.03.2010
Сообщений: 1,181
26.08.2014, 10:15 4
Если автоинкремент стоит, зачем вообще его в инсерте указывать?
0
votanko
0 / 0 / 2
Регистрация: 18.11.2012
Сообщений: 76
26.08.2014, 11:01  [ТС] 5
Если не указываю в инсерте
MySQL
1
INSERT INTO `hub`( `dictors_id`, `user_id`, `substrate_id`, `mobile_request_id`, `type_rolik_id`, `type_play_id`, `type_pay_id`, `city_play_id`, `status_id`, `zakaz_id`) VALUES (1,1,1,1,1,1,1,1,1,1)
Та же ошибка идет.

Добавлено через 20 минут
Если убираю foreign key то все добавляет и автоинкремент работает.
С ключом только если вручную вписывать id запрос только тогда отрабатывает.
0
26.08.2014, 11:01
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.08.2014, 11:01

Ошибка при записи значений в таблицу
Добрый день. Подскажите пожалуйста. В базе есть форма f_authorization, в которой выбирается...

Ошибка при добавлении записи в таблицу.
Здрасьте! Такое дело. В навикате создал процедуру добавления записей в таблицу. В самом навикате...

Ошибка при записи из форму в таблицу
Добрый день. Подскажите, пожалуйста, где у меня тут ошибка может быть? Private Sub...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru