0

我想使用“地址”表中的“邮政编码”作为主键,作为“客户”表中的外键。我从rentals表中获取'RentalID'作为'customers'表中的外键做了同样的事情,但是,当我尝试对'Postcode'做同样的事情时,它给了我这个错误:“请检查表上的外键约束父表地址的客户“。

请注意,我使用的是 khanacademy.org 上的在线 SQLite IDE

这是我的代码:

CREATE TABLE rentals 
( RentalID INTEGER PRIMARY KEY, CarRegistration TEXT, DateHired TEXT, 
DateReturned TEXT); 

INSERT INTO rentals VALUES (  1, "J986NDX", "12.2.94", "25.8.94"); 
INSERT INTO rentals VALUES (  2, "K788NRT", "1.3.95", "1.4.96"); 
INSERT INTO rentals VALUES (  3, "L346NDS", "2.4.96", ""); 
INSERT INTO rentals VALUES (  4, "J986NDX", "15.9.94", "14.9.95"); 
INSERT INTO rentals VALUES (  5, "M411NGT", "15.9.95", "1.2.96");  

CREATE TABLE customers (CustomerID INTEGER, CustomerSurname TEXT, 
Customerinitial TEXT, Companyname TEXT, Postcode TEXT, RentalID INTEGER , 
PRIMARY KEY(CustomerID, RentalID), FOREIGN KEY (RentalID) REFERENCES 
rentals(RentalID), FOREIGN KEY (Postcode) REFERENCES address(Postcode));

INSERT INTO customers VALUES ( 153, "Nazarali", "N", "MF Plastics", "DB5 
3ER", 1); 
INSERT INTO customers VALUES ( 153, "Nazarali", "N", "MF Plastics", "DB5 
3ER", 2); 
INSERT INTO customers VALUES ( 187, "Brown", "L", "MF Plastics", "DB5 3ER", 
3); INSERT INTO customers VALUES ( 287, "Pinner", "M", "Took Ltd", "DB6 
8YU", 4); INSERT INTO customers VALUES ( 287, "Pinner", "M", "Took Ltd", 
"DB6 8YU", 5);  

CREATE TABLE address (Postcode TEXT PRIMARY KEY, town TEXT);  
INSERT INTO address VALUES ( "DB5 3ER", "Derby"); 
INSERT INTO address VALUES ( "DB6 8YU", "Derby");

如何解决?

4

2 回答 2

0

基本上我所要做的就是创建地址表,从而在创建客户表之前创建邮政编码值,因为你不能拥有当前不存在的属性的外键,因为没有约束。父表必须在客户表之前创建。

于 2017-10-24T16:19:45.470 回答
0

如果数据已经插入到该外键是该表的主键的外表中,则外键起作用。尝试做子查询(在插入语句中插入)

于 2017-10-24T16:28:39.210 回答