我使用脚本在同一个数据库中创建表。一旦两个表都生成了,我创建了一个单独的脚本来在表中插入一组值,但是使用其中一个脚本似乎不会将任何数据插入表中,但会出现错误。 这些是我的表格;
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`))
答案 0 :(得分:1)
您有一个外键约束,指定customers(postcode)
引用postcodes
表中的有效邮政编码。
然后,您尝试插入'DH1 7SO'
,但它不起作用,因为此邮政编码不在postcodes
中。
这是外键引用的工作方式。数据库正在按预期工作,完全按照您的指示行事。
如果您希望插入有效行并忽略无效行,请使用IGNORE
上的INSERT
选项(请参阅here)。