【问题标题】:How can I get the ID of a still not created database Item如何获取仍未创建的数据库项的 ID
【发布时间】:2017-03-28 03:55:47
【问题描述】:

当前工作代码: 第一个连接查询使用表单中填写的信息向数据库添加一个新用户,for 循环中的第二个连接查询是否已经存在兴趣,使用在创建新名称之前给定名称。缺少的部分是重要的部分。

问题:如果既没有创建用户也没有创建兴趣,我如何链接添加到数据库的新兴趣或现有兴趣。我明白我需要在链接它们之前运行下面的两个查询以确保它们存在,但是我怎样才能获得新用户或新兴趣的 ID?这一切都发生在注册表单的发布请求中。

connection.query('INSERT INTO User set ? ', [newUserData], function (err) {
    if (err) { throw err; }
    res.redirect('/');
});

let interests = {
    userInterests: req.body.signupNewTagInterests.split(",")
}
for (let i = 0; i < interests.userInterests.length; i++) {
    connection.query('SELECT title FROM Interest WHERE title =?', [interests.userInterests[i]], function (err, results) {
        if (err) { throw err; }
        if (typeof results[0] === 'undefined') {
            connection.query('INSERT INTO Interest (title) Value(?) ', [interests.userInterests[i]], function (err) {
                if (err) { throw err; }
            });
        }
    });
}

标签:
用户:
身份证
名字
等等...

兴趣:
身份证
标题

用户兴趣:
用户 ID
Interest_ID

【问题讨论】:

  • 可能的想法是查询您的表,获取最后一个返回 id,然后递增 1,然后您就得到了 ID?
  • 是的,但是如果有多个人在那里创建帐户怎么办?这不会有问题吗?如果我因为他的速度快了 0.1 秒而得到了别人的 ID 怎么办?
  • 无论以何种方式实现它都是正确的,为什么您需要在创建之前知道 id 与创建之后/之后/之后?
  • 老实说,如果最后一个查询发生在创建部分之后,那不会有问题吧?我的意思是用户已经存在但速度非常快。
  • 您必须在单个transaction 中执行所有操作,只需在数据库中创建一个包含所有步骤的存储过程/函数。

标签: javascript mysql node.js express


【解决方案1】:

首先,您需要插入用户,无论是否存在兴趣 ID。

如果不存在,则需要将兴趣插入兴趣表中

上述部分完成后,您可以将这两件事与兴趣标题链接,然后在用户兴趣表中插入新记录。

兴趣反之亦然。

【讨论】:

  • 所以我应该在检查是否存在的 if 语句之后添加一个新查询,以便我可以链接它们?此时,兴趣和用户都被创建了。
  • 是的,您只需要检查该用户是否存在,然后以相同的方式感兴趣,一旦完成这两件事,您就可以通过加入兴趣来链接它们
  • 一旦这些操作成功完成,首先更专注于在各自的表中插入用户和兴趣,然后在用户兴趣表中插入链接数据以及其他信息
【解决方案2】:

如果您想在输入时获取 id,可以使用以下查询:

 SELECT LAST_INSERT_ID();

或通过让您的框架/MySQL 库(以任何语言)调用

mysql_insert_id() 

在查询之后。然后,您可以将其用作您在兴趣数据库中检查的 user_id。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-01
    • 2020-12-31
    • 1970-01-01
    • 2017-12-24
    相关资源
    最近更新 更多