Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.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 子表变量允许NULL,但ON DELETE SET NULL仍然不是';不行吗?_Mysql - Fatal编程技术网

Mysql 子表变量允许NULL,但ON DELETE SET NULL仍然不是';不行吗?

Mysql 子表变量允许NULL,但ON DELETE SET NULL仍然不是';不行吗?,mysql,Mysql,当我尝试将外键设置为ON DELETE set NULL时,它不会创建表(错误1005(HY000):)。如果我将其更改为ON DELETE CASCADE,它就会工作。所以我相当肯定这就是问题所在 我有一个名为OrderHassippingAddress的表,它维护CUSTORDER表和ADDRESS表之间的多对多关系。当客户删除订单时,这可以级联并删除OrderHashipingAddress中的记录,但当删除地址时,不应删除OrderHashipingAddress中的记录-然后只应将其设

当我尝试将外键设置为ON DELETE set NULL时,它不会创建表(错误1005(HY000):)。如果我将其更改为ON DELETE CASCADE,它就会工作。所以我相当肯定这就是问题所在

我有一个名为OrderHassippingAddress的表,它维护CUSTORDER表和ADDRESS表之间的多对多关系。当客户删除订单时,这可以级联并删除OrderHashipingAddress中的记录,但当删除地址时,不应删除OrderHashipingAddress中的记录-然后只应将其设置为NULL,直到可以将其更新为其他内容。所以我确保子表变量“addrID”允许NULL。我确保InnoDB允许这样做。我还缺什么?提前感谢您的帮助

CREATE TABLE USER (
id INT UNSIGNED NOT NULL auto_increment PRIMARY KEY,
userName VARCHAR(20) NOT NULL UNIQUE,
email VARCHAR(25) NOT NULL UNIQUE,
firstName VARCHAR(15) NOT NULL,
lastName VARCHAR(20) NOT NULL,
salt CHAR(10) NOT NULL,
HASH CHAR(40)
)ENGINE=InnoDB;

CREATE TABLE ADDRESS (
id INT UNSIGNED NOT NULL auto_increment PRIMARY KEY,
addName VARCHAR(25) NOT NULL UNIQUE,
streetAddress VARCHAR(50) NOT NULL,
city VARCHAR (25) NOT NULL,
state VARCHAR(2) NOT NULL,
zip CHAR(5) NOT NULL,
phone VARCHAR(10),
addrUserID INT UNSIGNED NOT NULL,
FOREIGN KEY (addrUserID) REFERENCES USER(id) ON DELETE CASCADE ON UPDATE CASCADE
)ENGINE=InnoDB;

CREATE TABLE FUNDS (
id INT UNSIGNED NOT NULL auto_increment PRIMARY KEY,
cardNumber VARCHAR(19) NOT NULL UNIQUE,
sudoName VARCHAR(25),
expDate DATE NOT NULL,
securityCode VARCHAR(5) NOT NULL UNIQUE,
billAddrID INT UNSIGNED,
FOREIGN KEY (billAddrID) REFERENCES ADDRESS(id) ON DELETE SET NULL ON UPDATE CASCADE
)ENGINE=InnoDB;

CREATE TABLE CUSTORDER (
id INT UNSIGNED NOT NULL auto_increment PRIMARY KEY,
invoiceDate DATE NOT NULL,
orderUserID INT UNSIGNED,
orderFundsID INT UNSIGNED,
FOREIGN KEY (orderUserID) REFERENCES USER(id) ON DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY (orderFundsID) REFERENCES FUNDS(id) ON DELETE CASCADE ON UPDATE CASCADE  
)ENGINE=InnoDB;

CREATE TABLE ORDERHASSHIPPINGADDRESS (
orderID INT UNSIGNED NOT NULL,
addrID INT UNSIGNED,
PRIMARY KEY (orderID, addrID),
FOREIGN KEY (orderID) REFERENCES CUSTORDER(id) on DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY (addrID) REFERENCES ADDRESS(id) on DELETE SET NULL on UPDATE CASCADE
)ENGINE=InnoDB;

MySQL不允许设置NULL,因为我将变量addrID设置为主键之一,所以它不能为NULL

我是不是错过了一些显而易见的东西??如果是的话——有人——请可怜我。