Java MySQL同时插入用户和密码,但在不同的表中

Java MySQL同时插入用户和密码,但在不同的表中,java,mysql,sql,jdbc,insert,Java,Mysql,Sql,Jdbc,Insert,因此,我有一个MySQL数据库模式,其中有一个USERS表,其中包含ID作为该表的主键,我还有一个USER\u PASSWORDS表,它引用USERS表,其中USER\u ID将作为该表中的外键 我面临的问题是,我正在编写一个应用程序,用户可以在其中注册并指定用户名和密码。但是我想用一个查询将用户插入数据库 我想我必须先将用户名插入到USERS表中,查看该用户名的ID,然后将用户输入的密码哈希插入user_PASSWORDS表中,并指定查询的ID 我不喜欢这种方法,因为这意味着我必须: 插入到数

因此,我有一个MySQL数据库模式,其中有一个USERS表,其中包含ID作为该表的主键,我还有一个USER\u PASSWORDS表,它引用USERS表,其中USER\u ID将作为该表中的外键

我面临的问题是,我正在编写一个应用程序,用户可以在其中注册并指定用户名和密码。但是我想用一个查询将用户插入数据库

我想我必须先将用户名插入到USERS表中,查看该用户名的ID,然后将用户输入的密码哈希插入user_PASSWORDS表中,并指定查询的ID

我不喜欢这种方法,因为这意味着我必须:

插入到数据库中 查询数据库 再次插入数据库

有更好的方法吗


谢谢

您不能用一条insert语句插入两个表,您必须查询users表以获取要作为user_passwords表外键插入的ID值

实际上,实现您想要的唯一方法是您已经确定的解决方案:

  • 插入到用户表中
  • 查询以获取刚才插入的用户的ID
  • 将您为该用户获得的ID插入USER_PASSWORDS表

  • 您可以将所有这些都封装在一个以用户数据和密码为参数的存储过程中,这将是一种“更好”的方法。

    一个解决方案:由于散列是唯一的,因此您可以将散列用作
    用户
    表中的主键。然后,您就知道插入时主键(id)是什么,并且可以在用户密码表中插入时重新使用


    这样,您至少可以避免id查询。

    由于您没有真正说明您需要什么系统/编程语言,并且也没有提供任何代码示例,因此我只能给您一些理论,您可以做什么:

    使用一个查询无法将数据插入两个不同的MySQL表,但您至少可以通过SELECT查询减少脚本:

    1.)大多数mysql API中都有一个函数(取决于您使用的编程语言和mysql库),上面写着“getLastInsertId()”、“lastInsertId()”或类似的内容

    这将返回插入完成后由表的自动增量插入的ID

    只要查看MySQL api的文档,它就会有这样一个功能

    (二) 第二种可能是使用UUID—一个非常大(通常为128位)的长字符串,它是完全随机生成的。有太多可能的组合,你可能会连续10次中奖,然后生成两次表中已经存在的相同UUID

    因此,您只需生成UUID并将其作为键插入两个表中,就完成了

    只需使用google找到现成的库来生成UUID,您不需要自己构建算法

    UUID可以如下所示:
    4a34fe87-f577-4ea9-9557-1bc8f779a68c

    嘿,谢谢你提供的信息。我将用Java编写这个应用程序,我有使用JDBC连接和查询数据库的经验。我想知道Hibernate是否能帮上忙?不客气。Java JDBC的最后一个insert ID:-->但是我很感兴趣的是,为什么要从用户表中拆分密码哈希?通常每个用户都有一个密码,所以你有一个1:1的关系,不需要额外的表->混乱的o.OAh抱歉,忘记了提到用户将不得不每3个月左右更改一次密码,我们想保留所有密码哈希的历史记录和过期日期等,所以你禁止已经使用的密码,我看到了一个非常偏执的人!:)