[英]Cannot add foreign key constraint
我不知道这是怎么了。 我有很多表print, lamn, sec_lam, thi_lam, rewind, slit, ink
和所有这些与job_code列相关的表,我正尝试从order_basic添加每个表的外键,但是mysql给我Cannot add foreign key constraint
错误。 还请建议我在每个表上索引哪一列。 这是我的表结构。
CREATE TABLE IF NOT EXISTS `dispatch` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`date` varchar(255) NOT NULL,
`job_code` int(11) NOT NULL,
`dispatch_qty` decimal(11,2) NOT NULL,
`no_bags` int(11) NOT NULL,
`no_pan` int(11) NOT NULL,
`no_roll` int(11) NOT NULL,
`ch_no` int(11) DEFAULT NULL,
`remarks` text NOT NULL,
`prepaired` varchar(255) NOT NULL,
PRIMARY KEY (`id`,`job_code`),
FOREIGN KEY (`job_code`) REFERENCES order_basic(`job_code`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;
这是我要外键形成此表的其他表
CREATE TABLE IF NOT EXISTS `order_basic` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`cd_date` varchar(25) DEFAULT NULL,
`po_num` varchar(11) DEFAULT NULL,
`po_date` varchar(11) DEFAULT NULL,
`del_date` varchar(11) DEFAULT NULL,
`job_code` int(11) NOT NULL,
`job_name` varchar(255) NOT NULL,
`customer_name` varchar(255) DEFAULT NULL,
`quantity` int(11) DEFAULT NULL,
`print_type` varchar(255) NOT NULL,
`remarks` text,
`prepaired` varchar(255) NOT NULL,
PRIMARY KEY (`id`,'job_code')
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=12 ;
问题是您在order_basic
上有一个复合主键:
PRIMARY KEY (`id`,'job_code')`
但您的外键仅引用job_code
:
FOREIGN KEY (`job_code`) REFERENCES order_basic(`job_code`)
由于job_code
中不被限制为唯一, order_basic
您不能在外键中引用它,因为同一代码可以在order_basic
引用多个记录。
例如,在order_basic中,您可能具有:
id | job_code
---+---------
1 | 1
2 | 1
3 | 1
4 | 1
如果您在dispatch
的job_code为1,那么这应该引用哪个记录?
如果job_code
在job_code
是唯一的,则可以将其order_basic
您的主键,或者在此列上添加唯一约束,以使您可以使用外键对其进行引用。 如果它不是唯一的,那么你不应该存储job_code
在调度,而是存储相应的id
从order_basic
,使这个您的外键。 如果您需要获取特定调度记录的job_code
,则可以使用order_basic.id
列进行加入。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.