[英]Foreign key and update records
我创建了三个表:产品,商品和类别。我加入了外键表:
CREATE TABLE `products` (
`id` int(11) AUTO_INCREMENT PRIMARY KEY,
`added` varchar(30) NOT NULL,
`nazwa` int(11) NOT NULL,
`kategoria` int(11) DEFAULT NULL,
`sn` varchar(100) NOT NULL,
`quantity` int(10) NOT NULL,
`data` date NOT NULL,
`godzina` time NOT NULL,
`warranty` date NOT NULL,
FOREIGN KEY (`nazwa`) REFERENCES `article`(`article_id`),
FOREIGN KEY (`kategoria`) REFERENCES `category` (`category_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci;
一切正常。 问题是当我尝试更新表产品中的记录时。
我尝试这样:
UPDATE `products`
SET
`added` = 'michal',
`nazwa` = 'ball',
`kategoria` = 'toys',
`sn` = '14dsa564dsa65',
`data` = NOW(),
`godzina` = CURTIME()
WHERE
`id` = 13
但是此查询不起作用。
错误代码:1452不能添加或更新子行,外键约束失败(
test
。products
,约束products_ibfk_1
外键(nazwa
)参考article
(article_id
))0.157秒
看一下我何时不会从使用此查询的数据库返回记录:
SELECT
products.id,
products.added,
article.nazwa,
category.kategoria,
products.sn,
products.quantity,
products.data,
products.godzina,
products.warranty
FROM
products
LEFT JOIN
category ON products.kategoria = category.category_id
LEFT JOIN
article ON products.nazwa = article.article_id
ORDER BY id
对于更新,我使用了:
UPDATE `products`
SET
products.added= 'michal',
article.nazwa= 'ball',
category.kategoria = 'toys',
products.sn= '14dsa564dsa65',
products.data = NOW(),
products.godzina = CURTIME(),
LEFT JOIN
category ON products.kategoria = category.category_id
LEFT JOIN
article ON products.nazwa = article.article_id
WHERE
`id` = 13
但抛出错误:
错误代码:1064。 检查与您的MariaDB服务器版本相对应的手册以获取正确的语法,以在行10 0.000秒处的“ LEFT JOIN category ON products”附近使用。kategoria= category.category_id LEFT
你的问题是, article
表不包含的行用
article_id ='piłeczka pingpongowa'
并且由于此列定义为INT(11),因此无论如何也不会进入此列。
而且您的category
表不包含带有
category.category_id = 'zabawki2'
在您的模式中,该列也定义为INT(11)! 所以这也行不通
在创建父级之前,您不能创建子级!
同时删除两个不需要的JOIN
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.