Внешний ключ ссылается на первичный ключ в той же таблице Mysql - PullRequest
0 голосов
/ 11 июня 2018
# Sql to create userdetails table:
CREATE TABLE `userdetails` (
 `user_details_id` int(3) unsigned NOT NULL AUTO_INCREMENT,
 `user_group_id` int(1) unsigned NOT NULL,
 `name` varchar(50) NOT NULL,
 `email_id` varchar(50),
 `password` varchar(50) NOT NULL,
 `mobile_no` varchar(10) NOT NULL,
 `company_id` int(3) unsigned,
 `vehicle_id` varchar(10),
 `date_created` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
 `date_updated` datetime NOT NULL,
 `created_by` int(3) unsigned NOT NULL,
 `status` enum('0','1') NOT NULL DEFAULT '0',
 PRIMARY KEY (`user_details_id`),
 UNIQUE KEY `email_id` (`email_id`),
 FOREIGN KEY (`user_group_id`) REFERENCES `usergroups` (`user_group_id`),
 FOREIGN KEY (`company_id`) REFERENCES `companies` (`company_id`),
 FOREIGN KEY (`created_by`) REFERENCES `userdetails` (`user_details_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

Сосредоточив внимание на столбцах «user_details_id» и «made_by», возникает конфликт, когда созданный_бай не ссылается на существующий идентификатор_пользователя.

Значение, если я создаю свой собственный профиль с необходимыми данными, мой user_details_id еще не был сгенерирован, и поэтому я не знаю, какое значение вводить в поле create_by (которое в идеале должно содержать мой user_details_id).

Буду признателен, если кто-нибудь сможет мне помочьруководство о том, как подойти к такому конфликту, и если есть способ определить, каким может быть значение поля user_details_id, прежде чем оно будет сгенерировано.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 12 июня 2018
# Sql to create userdetails table:
CREATE TABLE `userdetails` (
 `user_details_id` int(3) unsigned NOT NULL AUTO_INCREMENT,
 `user_group_id` int(1) unsigned NOT NULL,
 `name` varchar(50) NOT NULL,
 `email_id` varchar(50),
 `password` varchar(50) NOT NULL,
 `mobile_no` varchar(10) NOT NULL,
 `company_id` int(3) unsigned,
 `vehicle_id` varchar(10),
 `date_created` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
 `date_updated` datetime NOT NULL,
 `created_by` int(3) unsigned,
 `status` enum('0','1') NOT NULL DEFAULT '0',
 PRIMARY KEY (`user_details_id`),
 UNIQUE KEY `email_id` (`email_id`),
 FOREIGN KEY (`user_group_id`) REFERENCES `usergroups` (`user_group_id`),
 FOREIGN KEY (`company_id`) REFERENCES `companies` (`company_id`),
 FOREIGN KEY (`created_by`) REFERENCES `userdetails` (`user_details_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

Разрешение create_by принимать значения NULL, по-видимому, является быстрым решением этой проблемы, поскольку это может означать, что пользователь сам создается.

0 голосов
/ 11 июня 2018

Вы не можете справиться с этим, временно отключив проверку внешнего ключа, установив переменную сервера foreign_key_checks

SET FOREIGN_KEY_CHECKS=0;

INSERT INTO cities userdetails(....);

SET FOREIGN_KEY_CHECKS = 1;
...