插入忽略多列数据唯一

时间:2015-11-19 21:02:36

标签: mysql sql

我很好奇是否有办法插入MySQL并避免重复。我知道有三种主要方法可以实现它。替换,插入忽略或插入重复键。我相信这些都依赖于一个独特的主键,对我来说是一个自动增量id字段。这个id字段对我的特定插入需求没有任何值,而是我想检查一些字段是否包含相同的值,如果不是不确保

例如:

INSERT INTO table (name, team, email) VALUES (:n, :t, :e)

如果我有三个这样的数据集

1) array (":n" => "john doe", ":t" => 1, ":e" => john@doe.com);
2) array (":n" => "Jane doe", ":t" => 1, ":e" => john@doe.com);
3) array (":n" => "john doe", ":t" => 1, ":e" => john1@doe.com);
4) array (":n" => "john doe", ":t" => 2, ":e" => john1@doe.com);

假设表中没有值

1,3和4将被插入,但2将不会,因为团队和电子邮件不是唯一的

我知道我可以创建第四列并将电子邮件和团队添加到其中并创建一个唯一值并使用它但是我不希望这样做,因为它是冗余数据。

由于

3 个答案:

答案 0 :(得分:1)

您可以创建UNIQUE约束

 ALTER TABLE `tableName` ADD UNIQUE `unique_idx`(`name`, `team`, `email`);

答案 1 :(得分:0)

如果id字段对您没有价值,请不要理会。您描述的所需行为是composite key的行为,因此请创建一个复合键。

首先,废弃存在且没有价值的那个......

ALTER TABLE YourTableName DROP PRIMARY KEY;

然后创建新的复合词......

ALTER TABLE YourTableName ADD PRIMARY KEY (name, team, email);

答案 2 :(得分:0)

您可以尝试使用DUAL

INSERT INTO table (name, team, email)
SELECT :n, :t, :e
FROM DUAL
WHERE :t NOT IN (SELECT team FROM table WHERE email = :e)
相关问题