Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sqlite 向数据库添加值但外键约束失败_Sqlite - Fatal编程技术网

Sqlite 向数据库添加值但外键约束失败

Sqlite 向数据库添加值但外键约束失败,sqlite,Sqlite,我是sqlite3新手,对外键不太了解。我正在尝试向用户插入数据: 插入用户(用户id,名称)值(201503426,'John Doe') 但在我运行它之后,我收到了外键约束失败消息 所以我有三张桌子: CREATE TABLE `User` ( `User_id` integer, `plate_number` integer DEFAULT 0, `name` text DEFAULT 'user', `spot_number` integer DEFAULT 0, `cred

我是sqlite3新手,对外键不太了解。我正在尝试向用户插入数据:

插入
用户
用户id
名称
)值(201503426,'John Doe')

但在我运行它之后,我收到了
外键约束失败
消息

所以我有三张桌子:

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`)
);

CREATE TABLE `Spot` (
`spot_id`   integer,
`user_id`   text DEFAULT 'vacant',
`order_id`  integer DEFAULT 0,
`status`    integer DEFAULT 0,
FOREIGN KEY(`order_id`) REFERENCES `Orderr`(`order_id`),
FOREIGN KEY(`user_id`) REFERENCES `User`(`User_id`),
PRIMARY KEY(`spot_id`)
);

CREATE TABLE `Orderr` (
`order_id`  integer,
`user_id`   text DEFAULT 'user',
`spot_number`   integer DEFAULT 0,
`amount_due`    integer DEFAULT 0,
`time_lapse`    integer DEFAULT 0,
PRIMARY KEY(`order_id`),
FOREIGN KEY(`user_id`) REFERENCES `User`(`User_id`),
FOREIGN KEY(`spot_number`) REFERENCES `Spot`(`spot_id`)
);

如何添加值而不出错?

以下是
用户
表的
创建表
语句:

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\u id
之外的所有列,都定义了默认的非
NULL
值。现在考虑你的插入语句:

INSERT INTO User (User_id, name)
VALUES
    (201503426, 'John Doe');
由于未指定
order\u id
列(以及其他几个列),因此将插入默认值。因此,插入将导致添加以下记录:

(User_id,   plate_number, name,       spot_number, credit, order_id)
(201503426, 0,            'John Doe', 0,           0,      0)
现在,由于在
order\u id
spot\u number
上有外键约束,SQLite将进行检查,以确保这些对应的表实际上具有与插入的记录相对应的实体。我的猜测是这样的记录不存在,这就是为什么你会看到这个错误

有几种方法可以解决这个问题,但我建议的直接改变是不要对外键列使用默认值。相反,允许它们为
NULL
。通过这种方式,您可以执行当前的插入操作,但最终会得到以下记录:

(User_id,   plate_number, name,       spot_number, credit, order_id)
(201503426, NULL,         'John Doe', NULL,        NULL,   NULL)
SQLite将允许外键列具有
NULL
值,并且不指向其父表。这将允许您稍后填写空白,可能是在您有可用信息时。

类似于:,和