我有两张桌子。 'users'和'paid_users'
Paying_users有关课程付款的更多信息。
我正在寻找一种方法,在插入时我将能够强制使用两个表共有的唯一用户名。 因此,如果'Shelly'在'用户'上,我将无法将'Shelly'插入'paid_users'。 这可能在MYSQL上吗?
答案 0 :(得分:3)
为什么不将用户用作主表,并将paid_users(我认为是用户的一部分)与用户ID相关联?然后,你不会有重复的问题。
users:
id: ...
name: ...
other information
paying_users:
id: ...
users_id: ...
other information:
答案 1 :(得分:2)
Paying_users仍然是用户,对吧?然后这将解决您的问题:
users:
id: ...
name: ...
other information that relates to a user
PRIMARY KEY: id
UNIQUE KEY: name
paying_users:
id: ...
other information that relates a paying user only
PRIMARY KEY: id
FOREIGN KEY: id
REFERENCES users(id)
users
(因此他的name
在所有用户中都是唯一的)id
添加到表格paying_users
,以及仅与付费用户相关的其他数据。进一步的优势:
当您有一个决定付费的(简单)用户时,您只需执行第2步。
如果pay_user的付款期限已过期,您只能从paying_users
表中删除其记录,因此他仍然是一名简单的用户。
答案 2 :(得分:1)
我认为在MySQL中不可能这样做。如果可能的话,最好设计一个单独的用户表。然后,您将创建一个辅助表,其中包含付费客户的用户ID和pyament信息,您可以在必要时加入
答案 3 :(得分:0)
尝试将INSERT与SELECT结合使用。 e.g:
INSERT INTO paying_users
SELECT 'Shelly', 'other', 'column', 'values'
WHERE (SELECT COUNT(1) FROM users WHERE username = 'Shelly') = 0
我不确定,没有尝试过这个特定的构造,但你可能需要创建一行虚拟表来从中选择数据:
INSERT INTO paying_users
SELECT 'Shelly', 'other', 'column', 'values'
FROM (SELECT 1) AS dummy
WHERE (SELECT COUNT(1) FROM users WHERE username = 'Shelly') = 0