Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL可以';尽管列签名相同,但不能添加外键_Mysql_Foreign Keys_Innodb_Errno - Fatal编程技术网

MySQL可以';尽管列签名相同,但不能添加外键

MySQL可以';尽管列签名相同,但不能添加外键,mysql,foreign-keys,innodb,errno,Mysql,Foreign Keys,Innodb,Errno,我正在创建新数据库,我想创建一个表Supplier\u StockOut: CREATE TABLE StockOut_Supplier ( idStockOut_Supplier INT NOT NULL, idStockOut INT NOT NULL, idSupplier INT NOT NULL, idTransactionType INT NOT NULL, FOREIGN KEY (idSupplier) REFERENCES Suppliers(idSup

我正在创建新数据库,我想创建一个表
Supplier\u StockOut

CREATE TABLE StockOut_Supplier (
  idStockOut_Supplier INT NOT NULL,
  idStockOut INT NOT NULL,
  idSupplier INT NOT NULL,
  idTransactionType INT NOT NULL,
    FOREIGN KEY (idSupplier) REFERENCES Suppliers(idSupplier)
    ON DELETE SET NULL
    ON UPDATE CASCADE,
  FOREIGN KEY (idStockOut) REFERENCES StockOuts (idStockOut)
    ON DELETE CASCADE
    ON UPDATE CASCADE,
  FOREIGN KEY (idTransactionType) REFERENCES TransactionTypes(idTransactionType)
    ON DELETE SET NULL
    ON UPDATE CASCADE
) ENGINE=innodb DEFAULT CHARACTER SET=utf8 COLLATE=utf8_polish_ci;
结果:

ERROR 1005 (HY000): Can't create table 'stocktest.stockout_supplier' (errno: 150)
正确定义了这些键引用的所有表。例如:

CREATE TABLE Suppliers (
  idSupplier INT NOT NULL auto_increment PRIMARY KEY,
  name VARCHAR(64) NOT NULL
) ENGINE=innodb DEFAULT CHARACTER SET=utf8 COLLATE=utf8_polish_ci;
即使我只留下一个外键(例如给供应商),结果也将保持不变

当我尝试创建不带外键的表并稍后执行
altertable
以添加它们时,也会发生同样的情况。我注意到我可以添加它们,而不需要更新时删除子句,但不能使用它们

编辑:这个服务器上有很多InnoDB数据库使用了很多外键,所以我想这不是服务器配置相关的问题


有什么想法吗?

在您的
缺货供应商表中,
idSupplier
idTransactionType
列被设置为不接受
NULL
,但通过外键声明,您告诉它在删除主键时将其值设置为
NULL


您可能希望将它们设置为
RESTRICT
CASCADE

在DELETE上设置NULL是个问题,因为您在idSupplier上设置了notnull 但请尝试像这样运行脚本:

CREATE TABLE StockOut_Supplier (
  idSupplier INT NOT NULL,
  CONSTRAINT FOREIGN KEY (idSupplier) REFERENCES Suppliers(idSupplier)
    ON UPDATE CASCADE
);

ALTER TABLE StockOut_Supplier
  ADD FOREIGN KEY (idSupplier) REFERENCES Suppliers(idSupplier)
    ON DELETE SET NULL;

哇!真是个错误。我真丢脸;)谢谢你指出这一点。@Joe没问题。我自己一次又一次地犯了这个错误,这就是为什么我知道该找什么:)不,这只是我的错误,你不能在同一行上设置NULL和NULL。我有疑问地写道,
ALTER
无论如何都无法工作;)