mysql - 如何在具有相应键的同时向多个表添加信息?
问题描述
我想在我的网络应用程序上创建一个新的用户帐户,同时在 mysql 中同时将数据插入多个表中。例如,我可能有一个用于一般用户信息(如身份验证)的表,而我可能有另一个表,其中可能包含该用户的传记信息。传记列中的外键必须与认证表的主键对应。
用户将在一张表格中填写所有信息,但收集的信息将放在两个单独的表格中。我遇到的问题是以这些键对应的方式生成这些表,特别是如果我同时生成它们。
另一个例子,我有一张名为“dining_listings”的餐厅列表。其中一行列出了“All Foods Cuisine”。我可能有一个名为“location_dining_types”的单独表,其中列出了可能与该餐厅对应的所有食物类型,外键对应于该餐厅的主键。'location_dining_types' 表中可能有多行。
另外,我想为每个用户生成一个不同字符的唯一主键。而不是标准的 auto_incrememt 主键,默认情况下从 1 开始并递增,我想生成一个随机字符的唯一键,比如 fh4jnx68g4。
解决方案
尝试这样的事情:
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 值。
如果你想自己产生价值,你可以做这种事情。
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 查询语言中生成随机字符串吗?看这里。使用 MySQL 生成随机且唯一的 8 个字符的字符串
注意:作为主键或外键的随机字符串比自动递增整数更难高效索引。
推荐阅读
- docker - 为 wordpress 堆栈配置 Nginx 反向代理
- java - 为什么我收到以下代码的错误;
- importerror - 当我从 openzepplin 导入时找不到 utils/context.sol
- c - Shall a #pragma leading to nonstandard behavior cause __STDC__ macro not to be defined to 1?
- python - 如何根据列值查询 Pandas 数据框
- java - java - 在Java中,如何在执行后自动重新启动可运行列表
- python - 可以将数组作为输入传递给预测模型吗?
- python - Python 在随机点崩溃。有什么建议么?会不会是内存问题?
- authentication - 如何在 OIDC 和 SPA 架构中管理用户更新和删除
- encryption - 如何加密验证对方是否拥有有效的私钥?