[英]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表的外鍵插入。
真正要做您想要的唯一方法就是已經確定的解決方案:
您可以將所有這些包裝在以用戶數據和密碼為參數的存儲過程中,這將是“更好”的方式。
一種解決方案:由於哈希是唯一的,因此您可以將哈希用作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.