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

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

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

  • 相关阅读:
    模拟Struts2框架Action的实现
    Servlet中表单的重复提交
    php回调函数设计
    vagrant+xdebug
    css之vw布局
    css之rem布局
    微信jssdk支付坑
    webpack中添加px2rem-loader
    phpstorm+xdebug手机app调试
    mysql产生死锁
  • 原文地址:https://www.cnblogs.com/jiqing9006/p/5019947.html
Copyright © 2020-2023  润新知