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)
