zoukankan      html  css  js  c++  java
  • 解决报错:ERROR 1005 (HY000): Can't create table 'market.orders' (errno: 150)

    1.描述问题:

    在这里我新建了两张表(customers_info和orders)

    表一:customers_info

    CREATE TABLE customers_info
    (
    c_num INT(11) PRIMARY KEY NOT NULL UNIQUE AUTO_INCREMENT,
    c_name VARCHAR(50),
    c_contact VARCHAR(50),
    c_city VARCHAR(50),
    c_birth DATETIME NOT NULL
    );
    

      

    此时我们在新建表二orders时候,题目要求c_id的数据类型为VARCHAR(50),却要求我给他设置一个外键约束,关联到customers_info表中的c_num。

    CREATE TABLE orders 
    (
    o_num INT(11) PRIMARY KEY NOT NULL UNIQUE AUTO_INCREMENT,
    o_date DATE,
    c_id VARCHAR(50),
    CONSTRAINT fk_c_num FOREIGN KEY(c_id) REFERENCES customers_info(c_num) 
    );
    

      执行这个时候,会出现报错:ERROR 1005 (HY000): Can't create table 'market.orders' (errno: 150)

    出现问题的大致情况:

    1、外键的引用类型不一样,如主键是int外键是char

    2、找不到主表中引用的列

    3、主键和外键的字符编码不一致,也可能存储引擎不一样

    这里我遇到的是第一种和第三种情况,如图所示:

    解决方式:

    1.修改两张表的存储引擎相同

    2.修改两者的数据类型一致

    MariaDB [market]> show create table customers_infoG
    *************************** 1. row ***************************
           Table: customers_info
    Create Table: CREATE TABLE `customers_info` (
      `c_num` int(11) NOT NULL AUTO_INCREMENT,
      `c_name` varchar(70) DEFAULT NULL,
      `c_birth` datetime NOT NULL,
      `c_phone` varchar(50) DEFAULT NULL,
      `c_gender` char(1) DEFAULT NULL,
      PRIMARY KEY (`c_num`),
      UNIQUE KEY `c_num` (`c_num`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1
    1 row in set (0.00 sec)
    
    MariaDB [market]> show create table ordersG
    *************************** 1. row ***************************
           Table: orders
    Create Table: CREATE TABLE `orders` (
      `o_num` int(11) NOT NULL AUTO_INCREMENT,
      `o_date` date DEFAULT NULL,
      `c_id` int(50) DEFAULT NULL,
      PRIMARY KEY (`o_num`),
      UNIQUE KEY `o_num` (`o_num`),
      KEY `fk_c_num` (`c_id`),
      CONSTRAINT `fk_c_num` FOREIGN KEY (`c_id`) REFERENCES `customers_info` (`c_num`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1
    1 row in set (0.00 sec)
    

      

  • 相关阅读:
    集合
    16
    最常使用Eclipse快捷键
    Java小菜的进阶之路(异常捕获与处理(一))
    0803作业
    0801作业
    java中this与super的见解
    7.27作业
    7.23作业
    java内部类的浅谈(错误之处还请见谅!)
  • 原文地址:https://www.cnblogs.com/python-wen/p/11545515.html
Copyright © 2011-2022 走看看