【问题标题】:How to insert a username if it doesn't already exist with a postgresql POOL query如果 postgresql POOL 查询不存在用户名,如何插入用户名
【发布时间】:2021-08-07 06:09:59
【问题描述】:

我正在制作一个游戏,我最近添加了一个服务器数据库分数保存器,但我不知道如何插入一个用户名,如果它不存在这里是以下查询:

const addUser = (req, res) => {
    const {username, score} = req.body;
    pool.query(
        'INSERT INTO userlist (username, score) VALUES ($1, $2)',
        [username, score],
        (err) => {
            if(err){
                throw err;
            }
            res.status(201).json({status: "success", message: "User added."});
        },
    );
}

我猜我必须更改查询 这也是我创建表的 SQL 代码:

CREATE TABLE userlist(
    ID SERIAL PRIMARY KEY,
    username VARCHAR(255),
    score VARCHAR(255)
);

【问题讨论】:

    标签: sql node.js database postgresql heroku


    【解决方案1】:

    使用 if 语句判断用户名是否存在,然后更新它

            if (Users::where('name', $request->user_name)->exists()) {
            return response()->json(['record exist']);
    } else {
            $save = new Users;
            $save->name = $request->user_name;
            $save->save();
            return response()->json(['User saved successfully.']);
    }
      

    【讨论】:

    • 我不明白我需要一种不同的方式
    • 我的意思是检查 $1 是否已经在您的数据库中,如果是,您可以运行一个函数来更新 $2
    【解决方案2】:

    处理这个问题的最好方法是让数据库验证用户名的唯一性:

    alter table userlist add constraint unq_userlist_usename unique(username);
    

    现在,如果您尝试插入单行,如果该行已经存在,它将返回错误。

    如果您不希望出现错误,可以使用on conflict 子句。但是,在这种情况下,通知用户username 已存在的异常似乎很有用。

    【讨论】:

    • 我应该把它放在查询字符串中吗?
    • @PugmanDude 。 . .不。您添加一次约束,然后表使其成为表定义的一部分。
    • 所以我正在使用 heroku,我只会在 postgresql heroku 面板中使用该语句
    • 所以我正在使用 heroku,我只需更改 db 的 userlist 表以添加约束?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-22
    • 2018-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-28
    • 2020-03-25
    相关资源
    最近更新 更多