由于外键的存在引发的一个mysql问题 Cannot change column 'id': used in a foreign key constraint
Duplicate entry '0' for key 'PRIMARY'
一查,发现表没有设置自增长。
尝试增加修改表,添加自增长。
ALTER TABLE sh_incentive_item MODIFY id SMALLINT UNSIGNED AUTO_INCREMENT;
报错
[SQL] ALTER TABLE sh_incentive_item MODIFY id SMALLINT UNSIGNED AUTO_INCREMENT; [Err] 1833 - Cannot change column 'id': used in a foreign key constraint 'FK_sh_incentive_item_id' of table 'storehelper.sh_incentive'
发现是因为外键的影响,不能随便的更改表结构。
要想更改表结构,首先要把基层的表修改了。
A表 作为B表的外键,A表不能随便修改。
B表 有A表的外键,必须先处理好B,然后A才能修改。
索性,我就把表中的外键全部去除。
原SQL
SET FOREIGN_KEY_CHECKS=0; -- ---------------------------- -- Table structure for `sh_incentive` -- ---------------------------- DROP TABLE IF EXISTS `sh_incentive`; CREATE TABLE `sh_incentive` ( `id` int(11) NOT NULL COMMENT '编号', `item_id` int(11) DEFAULT NULL COMMENT '名称', `agent_id` int(11) DEFAULT NULL COMMENT '关联代理商', `money` double(10,2) NOT NULL COMMENT '金额', `year` int(11) NOT NULL COMMENT '年份', `month` int(11) NOT NULL COMMENT '月份', `addtime` int(11) NOT NULL COMMENT '添加时间', PRIMARY KEY (`id`), KEY `FK_sh_incentive_item_id` (`item_id`), CONSTRAINT `FK_sh_incentive_item_id` FOREIGN KEY (`item_id`) REFERENCES `sh_incentive_item` (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='激励设定'; -- ---------------------------- -- Records of sh_incentive -- ---------------------------- -- ---------------------------- -- Table structure for `sh_incentive_item` -- ---------------------------- DROP TABLE IF EXISTS `sh_incentive_item`; CREATE TABLE `sh_incentive_item` ( `id` int(11) NOT NULL COMMENT '编号', `name` varchar(255) NOT NULL COMMENT '名称', `intro` varchar(255) NOT NULL COMMENT '说明', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='系统激励项'; -- ---------------------------- -- Records of sh_incentive_item -- ---------------------------- -- ---------------------------- -- Table structure for `sh_opener_bonus` -- ---------------------------- DROP TABLE IF EXISTS `sh_opener_bonus`; CREATE TABLE `sh_opener_bonus` ( `id` int(11) NOT NULL COMMENT '编号', `opener_id` int(11) DEFAULT NULL COMMENT '员工编号', `incentive_id` int(11) DEFAULT NULL COMMENT '激励条件id', `remark` varchar(255) DEFAULT NULL COMMENT '备注说明', `addtime` int(11) DEFAULT NULL COMMENT '记录时间', PRIMARY KEY (`id`), KEY `FK_sh_openernus_opener_id` (`opener_id`), KEY `FK_sh_openernus_incentive_id` (`incentive_id`), CONSTRAINT `FK_sh_openernus_incentive_id` FOREIGN KEY (`incentive_id`) REFERENCES `sh_incentive` (`id`), CONSTRAINT `FK_sh_openernus_opener_id` FOREIGN KEY (`opener_id`) REFERENCES `sh_opener` (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='拓展员奖金'; -- ---------------------------- -- Records of sh_opener_bonus -- ---------------------------- -- ---------------------------- -- Table structure for `sh_opener_bonus_payment` -- ---------------------------- DROP TABLE IF EXISTS `sh_opener_bonus_payment`; CREATE TABLE `sh_opener_bonus_payment` ( `id` int(11) NOT NULL COMMENT '编号', `opener_id` int(11) NOT NULL COMMENT '拓展员', `agent_id` int(11) DEFAULT NULL COMMENT '代理商', `money` double(10,2) NOT NULL COMMENT '金额', `trode_number` varchar(255) NOT NULL COMMENT '转账流水号', `addtime` int(11) NOT NULL COMMENT '添加时间', PRIMARY KEY (`id`), KEY `FK_sh_openerent_opener_id` (`opener_id`), CONSTRAINT `FK_sh_openerent_opener_id` FOREIGN KEY (`opener_id`) REFERENCES `sh_opener` (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='拓展员奖金发放'; -- ---------------------------- -- Records of sh_opener_bonus_payment -- ----------------------------
把外键统统去掉
-- ---------------------------- -- Table structure for `sh_opener_bonus_payment` -- ---------------------------- DROP TABLE IF EXISTS `sh_opener_bonus_payment`; CREATE TABLE `sh_opener_bonus_payment` ( `id` int(11) NOT NULL COMMENT '编号', `opener_id` int(11) NOT NULL COMMENT '拓展员', `agent_id` int(11) DEFAULT NULL COMMENT '代理商', `money` double(10,2) NOT NULL COMMENT '金额', `trode_number` varchar(255) NOT NULL COMMENT '转账流水号', `addtime` int(11) NOT NULL COMMENT '添加时间', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='拓展员奖金发放'; -- ---------------------------- -- Table structure for `sh_opener_bonus` -- ---------------------------- DROP TABLE IF EXISTS `sh_opener_bonus`; CREATE TABLE `sh_opener_bonus` ( `id` int(11) NOT NULL COMMENT '编号', `opener_id` int(11) DEFAULT NULL COMMENT '员工编号', `incentive_id` int(11) DEFAULT NULL COMMENT '激励条件id', `remark` varchar(255) DEFAULT NULL COMMENT '备注说明', `addtime` int(11) DEFAULT NULL COMMENT '记录时间', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='拓展员奖金'; -- ---------------------------- -- Records of sh_opener_bonus -- ---------------------------- -- ---------------------------- -- Table structure for `sh_incentive` -- ---------------------------- DROP TABLE IF EXISTS `sh_incentive`; CREATE TABLE `sh_incentive` ( `id` int(11) NOT NULL COMMENT '编号', `item_id` int(11) DEFAULT NULL COMMENT '名称', `agent_id` int(11) DEFAULT NULL COMMENT '关联代理商', `money` double(10,2) NOT NULL COMMENT '金额', `year` int(11) NOT NULL COMMENT '年份', `month` int(11) NOT NULL COMMENT '月份', `addtime` int(11) NOT NULL COMMENT '添加时间', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='激励设定'; -- ---------------------------- -- Records of sh_incentive -- ---------------------------- -- ---------------------------- -- Table structure for `sh_incentive_item` -- ---------------------------- DROP TABLE IF EXISTS `sh_incentive_item`; CREATE TABLE `sh_incentive_item` ( `id` int(11) NOT NULL COMMENT '编号', `name` varchar(255) NOT NULL COMMENT '名称', `intro` varchar(255) NOT NULL COMMENT '说明', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='系统激励项'; -- ---------------------------- -- Records of sh_incentive_item -- ----------------------------
上面的顺序很重要哦。顺序有误,就不能执行成功!
处理好后,就可以添加自增长了。