我想在我的web应用程序上创建一个新的用户帐户,同时在mysql中将数据插入多个表中。例如,我可能有一个用于一般用户信息(如身份验证)的表,而我可能有另一个表,该表可能包含该用户的传记信息。传记列中的外键必须与身份验证表的主密钥相对应。
用户将以一种形式填写所有这些信息,但收集到的信息将放在两个独立的表中。我遇到的问题是,生成这些表的方式与这些键相对应,特别是当我同时生成它们的时候。
另一个例子是,我有一张桌子,上面有一张餐馆的列表,名为“餐饮清单”。其中一行列出了“All Foods Cuisine”。我可能有一个单独的表,名为“location_dining_types”,列出了可能与该餐厅相对应的所有食物类型,其中一个外键对应于该餐厅的主键。“locatiom_dining_types”表中可能有多个行。
另外,我希望为每个用户生成一个独特的、由各种字符组成的主键。在默认情况下,auto_incrememt主键从1开始并递增,而不是标准的fh4jnx68g4主键,我希望生成一个随机字符的唯一键,比如fh4jnx68g4。
发布于 2018-10-15 16:29:50
试着做这样的事情:
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查询语言生成随机字符串?看这儿。Generating a random & unique 8 character string using MySQL
注意:作为主键或外键的随机字符串比自动递增整数更难有效地索引。
https://stackoverflow.com/questions/52820848
复制相似问题