我有两个表,一个是主表,另一个是子表/外键表,我在主表中没有任何行,但是子表仍然接受行插入而没有任何限制...为什么正在发生
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)
);
当我将数据插入到子表wihtout插入主TBL,它接受..但它不应该..请帮助
答案 0 :(得分:2)
CUSTOMER_ID INT references CUSTOMERS(ID)
来自the MySQL CREATE TABLE
documentation:
MySQL解析但忽略“内联引用规范”(如SQL标准所定义),其中引用被定义为列规范的一部分。 MySQL仅在作为单独的
REFERENCES
规范的一部分进行指定时才接受FOREIGN KEY
子句。
您应明确声明外键,例如:
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)
);
答案 1 :(得分:0)
您必须声明的外键列“非空”,如果你不希望允许空值存在。
CREATE TABLE ORDERS (
ID INT NOT NULL,
DATE DATETIME,
CUSTOMER_ID INT NOT NULL references CUSTOMERS(ID),
AMOUNT double,
PRIMARY KEY (ID)
);