如何在拥有相应键的情况下同时向多个表添加信息?

vbkedwbf  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(277)

我想在我的web应用程序上创建一个新的用户帐户,同时在mysql中将数据同时插入到多个表中。例如,我可能有一个用于一般用户信息(如身份验证)的表,而另一个表可能包含该用户的传记信息。传记列中的外键必须与身份验证表的主键相对应。
用户将在一个表格中填写所有信息,但收集的信息将放在两个单独的表格中。我遇到的问题是生成这些表的方式与这些键对应,特别是如果我同时生成它们的话。
另一个例子是,我有一张table,上面有一张名为“就餐清单”的餐厅列表。其中一行有一个“所有食物烹饪”的列表。我可能有一个单独的表,名为“location\u dinning\u types”,列出了可能与该餐厅对应的所有食物类型,外键对应于该餐厅的主键。“locatiom\u dinning\u types”表中可能有多行。
另外,我想为每个用户生成一个不同字符的唯一主键。我想生成一个由随机字符组成的唯一键,比如fh4jnx68g4,而不是标准的auto\u incremet主键(默认情况下从1开始并递增)。

dy1byipe

dy1byipe1#

你需要 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\u insert\u id为您提供了从最后一次插入中自动递增的id值。然后将其保存在用户定义的变量中,然后使用它填充其他表中的fk值。
即使有很多程序在执行插入操作,这也是安全的,因为每个数据库连接都会维护最后一个\u insert \u 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字符字符串
注意:作为主键或外键的随机字符串比自动递增整数更难有效地索引。

相关问题