MySQL: 2 个字段的唯一数据

MySQL: unique data for 2 fields

并没有标题写的那么简单

我有一个table,用于将用户帐户绑定在一起。

例如:某人通过标准网站功能注册。第二天,他通过 Facebook 帐户注册。

我有 user_user table 和 a_user_idb_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;

(未经检查的语法)