簡體   English   中英

MySQL同時插入用戶名和密碼,但在不同的表中

[英]MySQL Insert User and Password at the same time, but in different tables

因此,我有一個MySQL數據庫模式,其中有一個USERS表,其中包含ID作為該表的主鍵,我還有一個USER_PASSWORDS表,該表引用了USERS表,其中USER_ID將在此表中充當外鍵。

我面臨的問題是我正在編寫一個應用程序,用戶可以在其中注冊並指定用戶名和密碼。 但是我想通過一個查詢將用戶插入數據庫。

我以為我必須先將用戶名插入到USERS表中,然后查看為該用戶名指定了什么ID,然后將用戶輸入的密碼的哈希值插入到USER_PASSWORDS表中,並指定要查詢的ID。

我不喜歡這種方法,因為這意味着我必須:

將數據庫插入數據庫QUERY將數據庫再次插入數據庫

有更好的方法嗎?

謝謝

您不能使用一個insert語句插入到兩個表中,並且無論如何都必須查詢users表以獲取ID值以作為user_passwords表的外鍵插入。

真正要做您想要的唯一方法就是已經確定的解決方案:

  1. 插入到用戶表
  2. 查詢以獲取您剛剛插入的用戶的ID
  3. 使用您為用戶獲得的ID插入USER_PASSWORDS表。

您可以將所有這些包裝在以用戶數據和密碼為參數的存儲過程中,這將是“更好”的方式。

一種解決方案:由於哈希是唯一的,因此您可以將哈希用作USERS表中的主鍵。 然后,您知道插入時的主鍵(id)是什么,並且可以在USER_PASSWORDS表中插入時重用。

這樣,您至少可以避免id查詢。

由於您沒有真正告訴您需要哪種系統/編程語言,也沒有提供任何代碼示例,因此我只能給您一些理論上您可以做的事情:

不可能通過一個查詢將數據插入到兩個不同的MySQL表中,但是您可以通過SELECT查詢至少減少腳本:

1.)大多數mysql API中都有一個函數(取決於您使用的編程語言和MySQL庫),該函數會顯示“ getLastInsertId()”,“ lastInsertId()”或類似內容。

這將返回插入完成后通過表的自動增量插入的ID。

只要檢查您的MySQL-api的文檔,它就會具有這樣的功能。

2.)第二種可能性是使用UUID-一個非常大(通常為128位)的長字符串,它完全是隨機生成的。 可能的組合太多了,您很有可能會連續10次贏得彩票,然后生成兩倍於表中相同UUID的彩票。

因此,您只需生成UUID並將其作為鍵插入兩個表中就可以了。

只需使用google查找開箱即用的庫即可生成UUID,您無需自己構建alogrithm。

一個UUID可能看起來像這樣:4a34fe87-f577-4ea9-9557-1bc8f779a68c

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM