gpt4 book ai didi

mysql - 数据库设计 : users and guests

转载 作者:行者123 更新时间:2023-11-29 03:08:11 25 4
gpt4 key购买 nike

我的网站上有两种类型的人,用户和 guest 。实际上它们是相同的,除了创建/授权过程。

目前我有两个表:

t_users

userId[PRIMARY, AUTOINC] username[UNIQUE]

t_guests

guestId[PRIMARY, AUTOINC] userId

当有人进入网站时,脚本会执行以下操作:

1) 通过向 t_guests 插入新行来创建新的客人记录

2) 使用上一步生成的 guestId 添加新记录到 t_users (guest username = “Guest guestId”)

3) 更新第 2 步分配的访客记录设置 userId

我觉得这个数据库设计很糟糕,因为它包含很多漏洞。例如,如果用户名“Guest xyz”已存在于 t_users 表中,则第 2 步将失败,第 3 步将错误的值分配给 userId(取决于实现,它将是 0 或 guestId,在第 1 步分配)。

实际上我只需要 t_guests 表,因为它的自动递增功能可以为客人生成唯一的用户名。有没有办法只使用一个合并表并使用单个查询来注册客人?

更新:我可以执行以下操作以将客人插入单个表中:

SELECT @mg := IFNULL(MAX(guestId), 0) + 1 FROM t_users;

INSERT INTO t_users (guestId) VALUES(@mg);

但我不能确定,在执行这两个语句之间没有人在 t_users 中插入新的客人记录。而且我不能使 guestId 唯一,因为真实用户会将其设置为零。

最佳答案

如果你只有一张 table "用户ID、用户名、类型

对于用户名,您可以使用脚本生成一个 Guid 并将其用作用户名或其他随机变量。如果您使用 GUID,您几乎不可能获得 2 个冲突的 GUID。

此外,如果您确实有 2 个用户名冲突,如果您确保用户名列必须是唯一的,那么插入将失败,您可以再试一次。

这里绝对不应该只有一张 table 。

关于mysql - 数据库设计 : users and guests,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12328391/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com