所以我有一个MySQL数据库模式,其中有一个USERS表,其中包含ID作为该表的主键,我还有一个USER_PASSWORDS表引用USERS表,其中USER_ID将充当此外键表
我面临的问题是我正在编写一个用户可以注册并指定用户名和密码的应用程序。但我想用一个查询将用户插入数据库。
我原本以为我必须先将用户名插入到USERS表中,然后查看该用户名的ID,然后将用户输入的密码的哈希值插入USER_PASSWORDS表并指定ID查询。
我不喜欢这种方法,因为这意味着我必须:
插入数据库 查询数据库 再次插入数据库
有更好的方法吗?
谢谢
答案 0 :(得分:1)
您不能使用一个insert语句插入两个表,并且无论如何都必须查询users表以获取要作为user_passwords表的外键插入的ID值。
真正做到你想要的唯一方法就是你已经确定的解决方案:
您可以将所有这些包装在一个存储过程中,该过程将用户数据和密码作为参数,这将是更好的"这样做的方式。
答案 1 :(得分:0)
一种解决方案:由于散列是唯一的,因此您可以将散列用作USERS
表中的主键。然后你知道插入时主键(id)是什么,并且可以在USER_PASSWORDS表中插入时重用。
这样你至少可以避免使用id查询。
答案 2 :(得分:0)
由于你没有真正告诉你需要什么样的系统/编程语言而你也没有提供任何代码示例,我只能给你一些理论你可以做什么:
使用一个查询将数据插入两个不同的MySQL表是不可能的,但您可以通过SELECT查询减少脚本:
1。)大多数mysql apis中都有一个函数(取决于您正在使用的编程语言和MySQL库),其中包含" getLastInsertId()"," lastInsertId()&# 34;或类似的。
这将返回插入完成后由表自动递增插入的ID。
只需检查MySQL-api的文档,它就会有这样的功能。
2)。 第二种可能性是使用UUID - 一个非常大(通常是128位)的长字符串,它是完全随机生成的。有更多可能的组合会发生,更有可能是你连续10次赢得彩票,然后你产生了你桌子上已经存在的相同UUID的两倍。
因此,您只需生成UUID并将其作为键插入两个表中即可完成。
只需使用谷歌查找开箱即用的库来生成你不需要自己构建算法的UUID。
UUID可能如下所示: 4a34fe87-f577-4ea9-9557-1bc8f779a68c