MySQL:2个字段的唯一数据

时间:2015-01-03 10:22:07

标签: mysql

这并不像标题中所写的那么简单。

我有一张表,用于将用户帐户绑定在一起。

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

我的user_user表包含a_user_idb_user_id个字段。这些字段是标准用户表的外键。 我为2个字段制作了唯一的密钥。

但是。如何避免这样的情况:

a_user_id: 1
b_user_id : 2

和下一行:

a_user_id: 2
b_user_id : 1

两行意味着相同。 MySQL能处理这个吗? 对于这种情况,有没有更好的方法?

1 个答案:

答案 0 :(得分:0)

引入约束a_user_id < b_user_id。老实说,直到现在我总是在编程方面保持这种约束,这可以防止循环:自引用和a-b-a。

首先需要对表进行规范化,可能使用MySQL中的临时表。


旧表的规范化:

假设表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;

(未经检查的语法)