MySQL: 2 个字段的唯一数据
MySQL: unique data for 2 fields
并没有标题写的那么简单
我有一个table,用于将用户帐户绑定在一起。
例如:某人通过标准网站功能注册。第二天,他通过 Facebook 帐户注册。
我有 user_user
table 和 a_user_id
、b_user_id
字段。这些字段是标准用户 table 的外键。
我为 2 个字段制作了唯一键。
但是。如何避免这种情况:
a_user_id: 1
b_user_id : 2
下一行:
a_user_id: 2
b_user_id : 1
两行意思相同。 MySQL 可以解决这个问题吗?
这种情况有更好的方法吗?
引入约束a_user_id < b_user_id
。老实说,到目前为止,我一直在编程方面保持这种约束,这可以防止循环:自引用和 a-b-a。
第一个需要规范化 table,可能使用 MySQL 中的临时 table。
旧table的规范化:
假设 table u2(a_user_id NOT NULL, b_user_id NOT NULL)
:
DELETE FROM u2
WHERE a_user_id = b_user_id;
ALTER TABLE u2 ADD COLUMN other ...;
UPDATE u2
SET
other = a_user_id,
a_user_id = b_user_id,
b_user_id = other
WHERE
a_user_id > b_user_id;
ALTER TABLE u2 REMOVE COLUMN other;
(未经检查的语法)
并没有标题写的那么简单
我有一个table,用于将用户帐户绑定在一起。
例如:某人通过标准网站功能注册。第二天,他通过 Facebook 帐户注册。
我有 user_user
table 和 a_user_id
、b_user_id
字段。这些字段是标准用户 table 的外键。
我为 2 个字段制作了唯一键。
但是。如何避免这种情况:
a_user_id: 1
b_user_id : 2
下一行:
a_user_id: 2
b_user_id : 1
两行意思相同。 MySQL 可以解决这个问题吗? 这种情况有更好的方法吗?
引入约束a_user_id < b_user_id
。老实说,到目前为止,我一直在编程方面保持这种约束,这可以防止循环:自引用和 a-b-a。
第一个需要规范化 table,可能使用 MySQL 中的临时 table。
旧table的规范化:
假设 table u2(a_user_id NOT NULL, b_user_id NOT NULL)
:
DELETE FROM u2
WHERE a_user_id = b_user_id;
ALTER TABLE u2 ADD COLUMN other ...;
UPDATE u2
SET
other = a_user_id,
a_user_id = b_user_id,
b_user_id = other
WHERE
a_user_id > b_user_id;
ALTER TABLE u2 REMOVE COLUMN other;
(未经检查的语法)