MYSQL视图?加入两张桌子

时间:2011-08-14 19:46:27

标签: mysql join view

我有两张桌子。 'users'和'paid_users'

Paying_users有关课程付款的更多信息。

我正在寻找一种方法,在插入时我将能够强制使用两个表共有的唯一用户名。 因此,如果'Shelly'在'用户'上,我将无法将'Shelly'插入'paid_users'。 这可能在MYSQL上吗?

4 个答案:

答案 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)
  • 使用此结构,当您要添加paid_user时,可以分两步执行:
    • 1将他添加到表users(因此他的name在所有用户中都是唯一的)
    • 2将他的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