2015-06-10 14 views
0
id name title city 
1 n  t  c 
2 n1  t1 c1 
3 n3  t3 c2 

我想避免在插入插入dublicate(我想忽略dublicate插入新行:创建表和编码,以避免在mysql中重复新行

首先我创建一个表:

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; 

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

+0

取决于你认为是独一无二的。 'name'和'title'各自是独一无二的,还是它们在结合时是唯一的? –

+0

没有没有组合 – partiz

回答

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');