当 INSERT INTO 命令为您提供外键错误消息时,您可以使用 MYSQL 中的哪些命令来插入新数据?
问问题
92 次
3 回答
1
你没有。您Insert
以满足数据库要求的方式制作数据和/或语句。
于 2013-02-27T16:16:39.270 回答
0
如果您准确指定了您收到的“外键错误消息”,那将会有所帮助。但是,假设它是最有可能的候选人之一:
- 错误 1216:无法添加或更新子行:外键约束失败;或者
- 错误 1452:无法添加或更新子行:外键约束失败 (%s)。
这两条消息都表示同一件事:您试图插入(或更新)一条记录,以便表示外键的列包含引用父表中不存在的记录的值。
在下面的示例中,尝试使用表CustomerID
中不存在的a 插入/更新订单时会收到错误 1216 Customers
:
CREATE TABLE Customers (
CustomerID SERIAL
) Engine=InnoDB;
CREATE TABLE Orders (
OrderID SERIAL,
CustomerID BIGINT UNSIGNED NOT NULL,
FOREIGN KEY (CustomerID) REFERENCES Customers (CustomerID)
);
INSERT INTO Customers
(CustomerID)
VALUES
(100),
(200)
;
INSERT INTO Orders
(OrderID, CustomerID)
VALUES
(1, 200), -- okay, as CustomerID 200 exists
(2, 300) -- fails, as CustomerID 300 does not exist
;
正如其他人所建议的那样,此问题的最佳解决方案是修改您的数据库活动以满足外键约束。
或者,您可以从数据库中删除外键约束(但是 RDBMS 不会为您强制执行参照完整性,这通常是人们希望它做的事情)。或者可以暂时禁用 MySQL 的引用完整性检查——但这通常只在加载已知具有引用完整性的数据时才会这样做,这可能会导致违反约束:不建议在一般应用程序中使用。
于 2013-02-27T16:36:40.407 回答
0
您必须INSERT ... ON DUPLICATE KEY UPDATE
处理重复键错误,但您没有外键错误。
如果要处理重复键,请参阅http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html
于 2013-02-27T16:19:42.113 回答