MySQL:错误消息无法创建表(errno:150)

标签 mysql sql mysql-error-1005

我有两个表,“po”和“receive”

CREATE TABLE `po` (
  `PO_ID` bigint(20) NOT NULL,
  `SERVICE_TYPE` bit(1) DEFAULT NULL,
  `ENTRY_DATE` date NOT NULL,
  `RECEIPT_DATE` date DEFAULT NULL,
  `TURNOVER` date DEFAULT NULL,
  `MOBILIZATION` date DEFAULT NULL,
  `SITE_NAME` varchar(255) NOT NULL,
  `SITE_CODE` varchar(45) DEFAULT NULL,
  `SITE_TIN` varchar(45) DEFAULT NULL,
  `SITE_ADDRESS` varchar(255) NOT NULL,
  `COST` decimal(11,2) NOT NULL,
  `XML` text,
  PRIMARY KEY (`PO_ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8$$

CREATE TABLE `receive` (
  `RECEIPT_ID` varchar(100) NOT NULL,
  `RECEIPT_DATE` date NOT NULL,
  `PO_NUMBER` bigint(20) NOT NULL,
  `SUPPLIER_ID` int(11) NOT NULL,
  PRIMARY KEY (`RECEIPT_ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8$$

我尝试通过在表“receive”上定义外键“fk_po”来连接两个表

ALTER TABLE `fourthwave`.`receive` 
  ADD CONSTRAINT `fk_po`
  FOREIGN KEY (`PO_NUMBER` )
  REFERENCES `fourthwave`.`po` (`PO_ID` )
  ON DELETE SET NULL
  ON UPDATE SET NULL
, ADD INDEX `fk_po` (`PO_NUMBER` ASC)

但是,上面的更改查询会引发错误:

Error Code: 1005. Can't create table 'fourthwave.#sql-aec_11' (errno:150)

我收到此错误是因为两个表上的字段名称“PO_ID”和“PO_NUMBER”不同吗?

最佳答案

在 ALTER TABLE 之后执行 SHOW ENGINE INNODB STATUS 语句,您将看到错误消息 - 'You have Defined a SET NULL condition while some of the 列被定义为 NOT NULL'。

ALTER TABLE `receive` 
  ADD CONSTRAINT `fk_po`
  FOREIGN KEY (`PO_NUMBER` )
  REFERENCES `po` (`PO_ID` )
  ON DELETE SET NULL
  ON UPDATE SET NULL
 , ADD INDEX `fk_po` (`PO_NUMBER` ASC);

SHOW ENGINE INNODB STATUS;

关于MySQL:错误消息无法创建表(errno:150),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9460567/

相关文章:

sql - 带有二进制附件问题的 sp_send_dbmail

MySql查询错误150之谜

php - 将 MySql 表导出为 CSV?

MySql存储过程未获取数据

mysql - 子查询、临时表、mysql 变量或从一个表的列中获取 pos 和 neg 搜索词以查询另一个的过程

sql - Django 查询用于列出相关查询中的所有外键对象

mysql - 无法在mysql表上创建外键

php - phpMyAdmin 中导入的编程等效项

Php Mysql 搜索问题

mysql - Mysql如何对汉字进行全文搜索?