sql—外键引用同一表中的主键mysql

mi7gmzs6  于 2021-06-21  发布在  Mysql
关注(0)|答案(2)|浏览(393)

# 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\u details\u id”和“created\u by”列上,当created\u by没有引用现有的user\u details\u id时,会出现冲突。
也就是说,如果我正在用所需的详细信息创建我自己的配置文件,我的用户详细信息\u id还没有生成,因此我不知道在created \u by字段中输入什么值(理想情况下应该包含我的用户详细信息\u id)。
如果有人能指导我如何处理这样的冲突,以及是否有办法在生成user\u details\u id字段之前确定它的值,我将不胜感激。
谢谢。

uujelgoq

uujelgoq1#

您不能通过设置服务器变量来临时禁用外键检查来处理它 foreign_key_checks ```
SET FOREIGN_KEY_CHECKS=0;

INSERT INTO cities userdetails(....);

SET FOREIGN_KEY_CHECKS = 1;

dldeef67

dldeef672#


# 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;

允许created\u by接受空值似乎是解决这个问题的一个快速方法,因为这可能意味着用户是自己创建的。

相关问题