解決報錯: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_info\G
*************************** 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 orders\G
*************************** 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)

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM