首页 > 解决方案 > 如何在具有相应键的同时向多个表添加信息?

问题描述

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

用户将在一张表格中填写所有信息,但收集的信息将放在两个单独的表格中。我遇到的问题是以这些键对应的方式生成这些表,特别是如果我同时生成它们。

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

另外,我想为每个用户生成一个不同字符的唯一主键。而不是标准的 auto_incrememt 主键,默认情况下从 1 开始并递增,我想生成一个随机字符的唯一键,比如 fh4jnx68g4。

标签: mysqlsql

解决方案


你需要LAST_INSERT_ID()

尝试这样的事情:

 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 个字符的字符串

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


推荐阅读