创建表和编码以避免在mysql中重复新行

时间:2015-06-10 04:33:33

标签: mysql sql

id  name    title   city
1    n        t     c
2    n1       t1    c1
3    n3       t3    c2

我想避免在插入时插入dublicate。(我想忽略在dublicate上插入新行:

首先我创建一个表:

CREATE TABLE IF NOT EXISTS Form (
            id INT(10) UNSIGNED AUTO_INCREMENT PRIMARY KEY,   
            name VARCHAR(243) COLLATE utf8_unicode_ci NOT NULL,
            title VARCHAR(243) COLLATE utf8_unicode_ci NOT NULL,
            city VARCHAR(243) COLLATE utf8_unicode_ci NOT NULL,
            UNIQUE (name),
            UNIQUE (title)      
        ) DEFAULT COLLATE utf8_unicode_ci;

我的结构表是真的吗?

现在在sql代码中:

INSERT INTO Form (name,title,city) VALUES ('name'),('title'),('city') ON DUPLICATE KEY UPDATE name=name AND title = title;

我的源代码是否正确(语法和编码)?还是需要更多?例如,我需要在表中添加唯一吗?

1 个答案:

答案 0 :(得分:1)

正如您现在所拥有的UNIQUE (name), UNIQUE (title),这将允许:

id  name    title   city
1    n1       t1     c
2    n2       t2     c
3    n3       t3     c

但您也可以使用组合的UNIQUE键,以便您可以使用相同的名称和相同的标题,而不是在组合它们时。因此UNIQUE (name, title)将允许您拥有:

id  name    title   city
1    n1       t1     c
2    n1       t2     c
3    n3       t2     c

请注意,您有一些相同的名称和一些标题相同,但名称和标题的组合永远不会相同。此外,上述两个代码示例将允许重复城市。如果您还希望城市是唯一的,请将其添加到上面的示例中。

另外,您的代码:

INSERT INTO Form (name,title,city) VALUES ('name'),('title'),('city') ON DUPLICATE KEY UPDATE name=name AND title = title;

不起作用。您的唯一值将负责不插入重复行,因此您的插入代码应如下所示:

INSERT INTO Form (name,title,city) VALUES ('Fred', 'Mr.', 'Bedrock');