2016-02-06 69 views
1

我使用腳本在同一個數據庫中創建表。一旦完成了這兩個表,我做了一個單獨的腳本來在表中插入一組值,但是其中一個腳本似乎並沒有將任何數據插入到表中,但出現了錯誤。 這些是我的桌子;SQL腳本INSERT INTO值不可插入?

CREATE TABLE IF NOT EXISTS customers(
customer_id INT UNSIGNED NOT NULL, 
first_name VARCHAR(20) NOT NULL, 
middle_name VARCHAR(20), 
last_name VARCHAR(40) NOT NULL, 
email VARCHAR(60) NOT NULL, 
password VARCHAR(40) NOT NULL, 
dob DATETIME NOT NULL, 
address_line VARCHAR(40) NOT NULL, 
postcode VARCHAR(20) NOT NULL, 
PRIMARY KEY(customer_id), 
FOREIGN KEY(postcode) REFERENCE postcodes(postcode) 
); 

在一個單獨的腳本,

CREATE TABLE IF NOT EXISTS postcodes(
postcode VARCHAR(20) NOT NULL, 
address_line_2 VARCHAR(20), 
city VARCHAR(40) NOT NULL, 
PRIMARY KEY(postcode)  
); 

將數據插入到表中的腳本在這裏。 這個工作沒有任何錯誤,併成功填充表格。

INSERT INTO postcodes(postcode,address_line_2,city) 
Values 
    ('DH1 568','Forest Lane','Durham'), 
    ('DH1 679','Dry Wood','Durham'), 
    ('DH1 4AS','North Of the Wall','Westeros'), 
    ('DH1 4LA',"Snoop's Crib",'Durham'); 

這是一個錯誤信息出現的一個,

INSERT INTO customers(customer_id,first_name,postcode) 
values 
    ('1','Zaak','DH1 568'), 
    ('2','Matt','DH1 679'), 
    ('3','Jon','DH1 4AS'), 
    ('4','Zak','DH1 4LA'), 
    ('5','Gaz','DH1 7SO'); 

這似乎是錯誤消息,

ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`hardware_store`.`customers`, CONSTRAINT `customers_ibfk_1` FOREIGN KEY (`postcode`) REFER 
ENCES `postcodes` (`postcode`))  
+1

父表中沒有可用的郵編「DH1 7SO」,即在表「postcodes」中,因此失敗。 –

回答

1

你有一個外鍵約束指定customers(postcode)指的是postcodes表中的有效郵政編碼。

然後,您嘗試插入'DH1 7SO',它不起作用,因爲此郵編不在postcodes

這就是外鍵引用的工作原理。數據庫完全按照它應該的方式工作,並按照您指示的方式執行。

如果要插入有效行並忽略無效行,請使用INSERT上的IGNORE選項(請參閱here)。