[英]Adding Foreign key but getting constraint violation error
我有四个表:
1)Country:Two columns
a) country_id
b) country_name
2)State: Three columns
a) state_id
b) state_name
c) country_id(foreign key)
3)City: Three Columns
a) city_id
b) city_name
c) state_id(foreign key)
4) Doctor: 20 Columns
a) doc_id (primary key)
b) doc_name
c) email,gender age and so on
我在这些桌子上放了达拉。
我在医生表中添加了三个新列:country_id,state_id和city_id作为外键。
当我在该表中插入country_id,state_id和city_id作为外键时,出现此错误
1452 - Cannot add or update a child row: a foreign key constraint fails (`medical_network`.`#sql-4174_45`, CONSTRAINT `#sql-4174_45_ibfk_1` FOREIGN KEY (`country_id`) REFERENCES `country` (`country_id`) ON DELETE CASCADE ON UPDATE CASCADE)
我知道这是一个基本错误,但找不到错误。
医生桌:
CREATE TABLE `doctor` (
`doc_id` int(9) NOT NULL AUTO_INCREMENT,
`doc_fname` varchar(15) NOT NULL,
`doc_lname` varchar(15) NOT NULL,
`doc_province` varchar(20) NOT NULL,
`doc_city` varchar(25) NOT NULL,
`doc_gender` varchar(10) NOT NULL,
`doc_fathername` varchar(32) NOT NULL,
`doc_age` varchar(20) NOT NULL,
`doc_cnic` varchar(16) NOT NULL,
`doc_medclgname` varchar(100) NOT NULL,
`doc_specilization` varchar(100) NOT NULL,
`doc_phoneno` varchar(20) NOT NULL,
`doc_officeno` varchar(20) NOT NULL,
`doc_email` varchar(25) NOT NULL,
`doc_gradyear` int(10) NOT NULL,
`doc_licenseno` varchar(30) NOT NULL,
`doc_hosp` varchar(200) NOT NULL,
`doc_pass` varchar(35) NOT NULL,
`doc_address` varchar(100) NOT NULL,
`doc_country` varchar(100) NOT NULL,
`doc_img` varchar(200) NOT NULL,
`totime` time NOT NULL,
`fromtime` time NOT NULL,
`todate` date NOT NULL,
`fromdate` date NOT NULL,
`country_id` int(20) NOT NULL,
PRIMARY KEY (`doc_id`),
KEY `country_id` (`country_id`)
) ENGINE=InnoDB AUTO_INCREMENT=30 DEFAULT CHARSET=latin
国家表:
CREATE TABLE `country` (
`country_id` int(20) NOT NULL AUTO_INCREMENT,
`country_name` varchar(200) NOT NULL,
PRIMARY KEY (`country_id`)
) ENGINE=InnoDB AUTO_INCREMENT=252 DEFAULT CHARSET=latin1
状态表查询:
CREATE TABLE `state` (
`state_id` int(20) NOT NULL AUTO_INCREMENT,
`state_name` varchar(200) NOT NULL,
`country_id` int(20) NOT NULL,
PRIMARY KEY (`state_id`),
KEY `country_id` (`country_id`),
CONSTRAINT `state_ibfk_1` FOREIGN KEY (`country_id`) REFERENCES `country` (`country_id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=latin1
城市表:
CREATE TABLE `city` (
`city_id` int(20) NOT NULL AUTO_INCREMENT,
`city_name` varchar(200) NOT NULL,
`state_id` int(20) NOT NULL,
PRIMARY KEY (`city_id`),
KEY `state_id` (`state_id`),
CONSTRAINT `city_ibfk_1` FOREIGN KEY (`state_id`) REFERENCES `state` (`state_id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=latin1
首先在表中添加要作为外键的所有列。
向其中添加一些相关数据。
现在更改表并将这些新添加的列作为外键。
即ALTER TABLE TblName AD FOREIGN KEY(P_Id)参考ParentTable(P_Id)
您有一些在不明国家/地区的医生。
一行或多行doctor
的country_id
值在country
的country_id
列中找不到。
检查国家表中是否存在新医生行的country_id
值。
要查找它们是否已经存在医生行:
select d.*
from doctor d
left join country c on c.country_id = doctor.country_id
where c.country_id is null
更改“医生”表中的列country_id int(20)NULL
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.