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;
我的源代码是否正确(语法和编码)?还是需要更多?例如,我需要在表中添加唯一吗?
答案 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');