我是sqlite3的新手,对外键的了解也不多。我试图向用户插入数据:
插入<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>files</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
</head>
<body>
<script>
// Check for the various File API support.
if (window.File && window.FileReader && window.FileList && window.Blob) {
// Great success! All the File APIs are supported.
} else {
alert('The File APIs are not fully supported in this browser.');
}
</script>
</body>
</html>
(User
,User_id
)值中(201503426,'John Doe');
但是运行它后,我收到了name
消息。
所以我有三个表:
foreign key constraint failed
如何在不出错的情况下添加值?
答案 0 :(得分:1)
这是CREATE TABLE
表的User
语句:
CREATE TABLE User (
User_id integer,
plate_number integer DEFAULT 0,
name text DEFAULT 'user',
spot_number integer DEFAULT 0,
credit integer DEFAULT 0,
order_id integer DEFAULT 0,
FOREIGN KEY(order_id) REFERENCES Orderr(order_id),
FOREIGN KEY(spot_number) REFERENCES Spot(spot_id),
PRIMARY KEY(User_id)
);
在这里重要的是,对于User_id
以外的所有列,您都定义了默认的非NULL
值。现在考虑您的插入语句:
INSERT INTO User (User_id, name)
VALUES
(201503426, 'John Doe');
因为您没有指定order_id
列(以及其他几个列),所以将插入 default 值。因此,您的插入将导致添加以下记录:
(User_id, plate_number, name, spot_number, credit, order_id)
(201503426, 0, 'John Doe', 0, 0, 0)
现在,由于在order_id
和spot_number
上有外键约束,SQLite将检查以确保那些相应的表实际上具有与您插入的记录相对应的整体。我的猜测是这样的记录不不存在,这就是为什么您看到此错误的原因。
有几种方法可以解决此问题,但是我建议立即更改为不为外键列使用默认值。而是让它们成为NULL
。这样,您可以执行当前的插入操作,而最终得到以下记录:
(User_id, plate_number, name, spot_number, credit, order_id)
(201503426, NULL, 'John Doe', NULL, NULL, NULL)
SQLite将允许外键列带有NULL
值,而不指向其父表。这样一来,您便可以在以后(可能是在您拥有该信息的情况下)填写空白。