为啥我在sqlite数据库中插入数据后罗列列中没有自动增长码自动增长码是空的
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为啥我在sqlite数据库中插入数据后罗列列中没有自动增长码自动增长码是空的相关的知识,希望对你有一定的参考价值。
不是自动增长码不用管吗,会自己增加吗,为什么是空的
参考技术ACREATE TABLE IF NOT EXISTS TAB_USER(
_id integer primary key autoincrement,
name VARCHAR2(30)
);
自动增长,你要设置ID为主键,并且指定自动增长autoincrement
测试以下上面这个代码吧,顺便给你一个sqlite的客户端带密钥的
为啥我收到错误:插入表时列中有空值?
【中文标题】为啥我收到错误:插入表时列中有空值?【英文标题】:Why am I getting error: null value in column when inserting into a table?为什么我收到错误:插入表时列中有空值? 【发布时间】:2021-03-02 06:58:20 【问题描述】:我在postgresql中有两张表,如下:
用户表:
CREATE TABLE public.users
(
user_id integer NOT NULL DEFAULT nextval('users_user_id_seq'::regclass),
first_name character varying(90) COLLATE pg_catalog."default" NOT NULL,
last_name character varying(90) COLLATE pg_catalog."default" NOT NULL,
email citext COLLATE pg_catalog."default" NOT NULL,
user_password character varying(90) COLLATE pg_catalog."default" NOT NULL,
business_status boolean NOT NULL,
phone_number character varying(12) COLLATE pg_catalog."default" NOT NULL,
bt_id integer,
bs_id integer,
is_active boolean NOT NULL,
is_verified boolean NOT NULL,
CONSTRAINT users_pkey PRIMARY KEY (user_id),
CONSTRAINT users_email_key UNIQUE (email),
CONSTRAINT bs_id FOREIGN KEY (bs_id)
REFERENCES public.business_step (bs_id) MATCH SIMPLE
ON UPDATE CASCADE
ON DELETE CASCADE
NOT VALID,
CONSTRAINT bt_id FOREIGN KEY (bt_id)
REFERENCES public.business_type (bt_id) MATCH SIMPLE
ON UPDATE CASCADE
ON DELETE CASCADE
NOT VALID
)
管理表:
CREATE TABLE public.admin
(
admin_id integer NOT NULL DEFAULT nextval('admin_admin_id_seq'::regclass),
user_id integer NOT NULL,
CONSTRAINT admin_pkey PRIMARY KEY (admin_id),
CONSTRAINT user_id FOREIGN KEY (user_id)
REFERENCES public.users (user_id) MATCH SIMPLE
ON UPDATE CASCADE
ON DELETE CASCADE
)
我正在使用 Nodejs 实现一个路由,我可以使用以下代码在其中插入一个新管理员:
Queries.js 中的代码
const insertAdmin = (request, response) =>
const user_id = request.body
pool.query('INSERT INTO admin (user_id) VALUES ($1)', [user_id], (error, results) =>
if (error)
throw error
response.status(201).send(`User added with ID: $result.insertId`)
)
index.js 中的代码
app.post('/admins/insert', db.insertAdmin)
使用以下 curl 路由插入新管理员时:
curl --data "user_id =39" http://localhost:3000/users
我收到以下错误消息:
错误:关系“admin”的“user_id”列中的空值违反非空约束 在 Parser.parseErrorMessage (C:\Users\ealfo\node-api-postgres\node_modules\pg-protocol\dist\parser.js:278:15) 在 Parser.handlePacket (C:\Users\ealfo\node-api-postgres\node_modules\pg-protocol\dist\parser.js:126:29) 在 Parser.parse (C:\Users\ealfo\node-api-postgres\node_modules\pg-protocol\dist\parser.js:39:38) 在套接字。 (C:\Users\ealfo\node-api-postgres\node_modules\pg-protocol\dist\index.js:10:42) 在 Socket.emit (events.js:315:20) 在 addChunk (_stream_readable.js:309:12) 在 readableAddChunk (_stream_readable.js:284:9) 在 Socket.Readable.push (_stream_readable.js:223:10) 在 TCP.onStreamRead (internal/stream_base_commons.js:188:23) 长度:265, 严重性:'错误', 代码:'23502', detail: '失败的行包含 (12, null).', 提示:未定义, 位置:未定义, 内部位置:未定义, 内部查询:未定义, 其中:未定义, 架构:'公共', 表:'管理员', 列:'user_id', 数据类型:未定义, 约束:未定义, 文件:'d:\pginstaller_13.auto\postgres.windows-x64\src\backend\executor\execmain.c', 行:'1965', 例程:'ExecConstraints'
为什么会出现此错误消息?我是使用 NodeJS 和 PostgreSQL 的新手,如果这个问题已在另一篇文章中得到解答,我深表歉意。尽管如此,我想了解更多,并从我的错误中吸取教训。提前谢谢你。
【问题讨论】:
嗯,user_id
必须为 NULL。
不,user_id 不为 NULL。
那么你就不会得到那个错误。
这就是这篇文章的重点。我不应该得到这个错误,但它仍然给我这个错误。
【参考方案1】:
您必须将 body-parser 添加到您的中间件。根据 curl 命令判断,您需要从 url 解析正文。
类似的东西。
const bodyParser = require('body-parser');
app.use(bodyParser.urlencoded( extended: true )); // to pass bodies from url
body-parser 库的完整文档可以找到:https://github.com/expressjs/body-parser
【讨论】:
还要去掉user_id后面的空格。即 curl --data "user_id =39" localhost:3000/users 应该是 curl --data "user_id=39" localhost:3000/users以上是关于为啥我在sqlite数据库中插入数据后罗列列中没有自动增长码自动增长码是空的的主要内容,如果未能解决你的问题,请参考以下文章
如何仅在创建时将值插入数据库?(SQLite Android Studio)