• MySQL中创建外键的错误:1215 Cannot add the foreign key constraint


    引言: MySQL中经常会需要创建父子表之间的约束,这个约束是需要建立在主外键基础之上的,这里解决了一个在创建主外键约束过程中碰到的一个问题。

    1. 问题的提出

        创建两个表: 

         product:  商品表
         sealer:  供货商表
     相应的SQL如下:

       product:

    DROP TABLE IF EXISTS `product`;
    CREATE TABLE `product` (
      `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
      `name` varchar(20) NOT NULL COMMENT 'product name',
      `price` float(10,3) NOT NULL,
      `description` varchar(20) DEFAULT NULL,
      `count` int(11) NOT NULL DEFAULT '0',
      `sid` int(11) NOT NULL,
      PRIMARY KEY (`id`),
      UNIQUE KEY `id_index` (`id`) USING HASH,
      UNIQUE KEY `sid_index` (`sid`) USING HASH
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;


       sealer:

    DROP TABLE IF EXISTS `sealer`;
    CREATE TABLE `sealer` (
      `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
      `name` varchar(30) NOT NULL,
      `city` varchar(255) DEFAULT NULL,
      `created_time` datetime DEFAULT NULL,
      `updated_time` datetime DEFAULT NULL,
      `level` int(11) NOT NULL DEFAULT '0',
      `description` varchar(40) DEFAULT NULL,
      PRIMARY KEY (`id`),
      UNIQUE KEY `id_index_1` (`id`) USING HASH
    ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;


     接下来我们需要关联product.sid 至 sealer.id,进行父子表的主外键关联。
    2. 碰到错误

        在创建外键之时,使用的SQL和碰到错误信息如下:

    alter table `product' add CONSTRAINT `sid_ref` FOREIGN KEY (`sid`) REFERENCES `sealer` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION


       碰到的错误信息如下:
       

      无法正确的插入外键约束。

    3. 问题分析

        主外键更多的是某表的主键与子表的某个列进行关联,要求是具备相同的数据类型和属性,问题会不会出现在这里?

         要求: 具备相同的数据类型和约束

        发现:   unsigned,数字的字符长度不一致。

    4.  解决的办法

         修改product.sid中的数据类型,添加unsigned和字段的长度,将其设置为相同即可。

        

    5. 总结

        之所以出现1215的问题,是由于主外键之间的数据类型不一致造成的,以后类似问题,皆可按此处理。


     

  • 相关阅读:
    [20180317]12c TABLE ACCESS BY INDEX ROWID BATCHED3.txt
    模态登录
    javascript unshift()和shift()
    登录拦截功能
    springmvc 拦截器的使用小结
    handsontable 和 echarts都定义了require方法,初始化时冲突了,怎么办?
    eclipse缓慢了么?
    springmvc处理日期格式
    hibernate设置了not-null 为什么无效?
    java 和 javascript CryptoJS 进行HmacSHA1加密
  • 原文地址:https://www.cnblogs.com/lxwphp/p/15453130.html
Copyright © 2020-2023  润新知