SQL脚本INSERT INTO值无法插入?

时间:2016-02-06 21:40:59

标签: mysql foreign-keys primary-key

我使用脚本在同一个数据库中创建表。一旦两个表都生成了,我创建了一个单独的脚本来在表中插入一组值,但是使用其中一个脚本似乎不会将任何数据插入表中,但会出现错误。 这些是我的表格;

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 个答案:

答案 0 :(得分:1)

您有一个外键约束,指定customers(postcode)引用postcodes表中的有效邮政编码。

然后,您尝试插入'DH1 7SO',但它不起作用,因为此邮政编码不在postcodes中。

这是外键引用的工作方式。数据库正在按预期工作,完全按照您的指示行事。

如果您希望插入有效行并忽略无效行,请使用IGNORE上的INSERT选项(请参阅here)。