由于外键的存在引发的一个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
-- ----------------------------

上面的顺序很重要哦。顺序有误,就不能执行成功!

 

处理好后,就可以添加自增长了。

posted @ 2015-12-04 17:15  TBHacker  阅读(15942)  评论(0编辑  收藏  举报