首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在具有相应键的同时向多个表添加信息?

如何在具有相应键的同时向多个表添加信息?
EN

Stack Overflow用户
提问于 2018-10-15 16:15:47
回答 1查看 24关注 0票数 0

我想在我的web应用程序上创建一个新的用户帐户,同时在mysql中将数据插入多个表中。例如,我可能有一个用于一般用户信息(如身份验证)的表,而我可能有另一个表,该表可能包含该用户的传记信息。传记列中的外键必须与身份验证表的主密钥相对应。

用户将以一种形式填写所有这些信息,但收集到的信息将放在两个独立的表中。我遇到的问题是,生成这些表的方式与这些键相对应,特别是当我同时生成它们的时候。

另一个例子是,我有一张桌子,上面有一张餐馆的列表,名为“餐饮清单”。其中一行列出了“All Foods Cuisine”。我可能有一个单独的表,名为“location_dining_types”,列出了可能与该餐厅相对应的所有食物类型,其中一个外键对应于该餐厅的主键。“locatiom_dining_types”表中可能有多个行。

另外,我希望为每个用户生成一个独特的、由各种字符组成的主键。在默认情况下,auto_incrememt主键从1开始并递增,而不是标准的fh4jnx68g4主键,我希望生成一个随机字符的唯一键,比如fh4jnx68g4。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-15 16:29:50

你需要LAST_INSERT_ID()

试着做这样的事情:

代码语言:javascript
复制
 INSERT INTO user (given, surname) VALUES ('Michael', 'Widenius');
 SET @userId =: LAST_INSERT_ID();
 INSERT INTO company(user_id, name) VALUES (@userId, 'MySQL AB');
 INSERT INTO company(user_id, name) VALUES (@userId, 'MariaDB Corporation AB');

LAST_INSERT_ID为您提供了来自最后一个插入的自动递增ID值。然后将其保存在用户定义的变量中,然后使用它填充其他表中的FK值。

即使有很多程序正在执行插入,这也是安全的,因为每个数据库连接都维护LAST_INSERT_ID值。

如果你想自己创造价值,你可以做这样的事情。

代码语言:javascript
复制
 SET @userId = SELECT <<<random string>> 
 INSERT INTO user (user_id, given, surname) VALUES (@userId, 'Michael', 'Widenius');
 INSERT INTO company(user_id, name) VALUES (@userId, 'MySQL AB');
 INSERT INTO company(user_id, name) VALUES (@userId, 'MariaDB Corporation AB');

您想知道如何用MySQL查询语言生成随机字符串?看这儿。Generating a random & unique 8 character string using MySQL

注意:作为主键或外键的随机字符串比自动递增整数更难有效地索引。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52820848

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档