我有两个表,一个是主表,另一个是子表/外键表,主表中没有任何行,但子表仍然接受行插入而没有任何限制...为什么它正在发生
CREATE TABLE CUSTOMERS(
ID INT NOT NULL,
NAME VARCHAR (20) NOT NULL,
AGE INT NOT NULL,
ADDRESS CHAR (25) ,
SALARY DECIMAL (18, 2),
PRIMARY KEY (ID)
);
CREATE TABLE ORDERS (
ID INT NOT NULL,
DATE DATETIME,
CUSTOMER_ID INT references CUSTOMERS(ID),
AMOUNT double,
PRIMARY KEY (ID)
);
当我将数据插入子表而不插入主表时,它接受..但不应该..请帮助
最佳答案
CUSTOMER_ID INT references CUSTOMERS(ID)
来自the MySQL CREATE TABLE
documentation :
MySQL parses but ignores “inline REFERENCES specifications” (as defined in the SQL standard) where the references are defined as part of the column specification. MySQL accepts
REFERENCES
clauses only when specified as part of a separateFOREIGN KEY
specification.
您应该显式声明外键,例如:
CREATE TABLE ORDERS (
ID INT NOT NULL,
DATE DATETIME,
CUSTOMER_ID INT,
AMOUNT DOUBLE,
PRIMARY KEY (ID),
FOREIGN KEY (CUSTOMER_ID) REFERENCES CUSTOMERS(ID)
);
此外,通常最好使引用列不可为空,因为默认情况下外键允许 NULL
值。
CREATE TABLE ORDERS (
ID INT NOT NULL,
DATE DATETIME,
CUSTOMER_ID INT NOT NULL,
AMOUNT DOUBLE,
PRIMARY KEY (ID),
FOREIGN KEY (CUSTOMER_ID) REFERENCES CUSTOMERS(ID)
);
关于php - MySQL 内联外键不应用限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54497631/