2

我需要将多条记录添加到 mysql 数据库中。我尝试了多个查询并且工作正常,但效率不高。所以我只用下面的一个查询尝试了它,

INSERT INTO data (block, length, width, rows) VALUES
    ("BlockA", "200", "10", "20"),
    ("BlockB", "330", "8", "24"),
    ("BlockC", "430", "7", "36")
ON DUPLICATE KEY UPDATE 
    block=VALUES(block),
    length=VALUES(length),
    width=VALUES(width),
    rows=VALUES(rows)

但它总是更新表(列是block_id、block、length、width、rows)。我是否应该通过添加block_id对查询进行任何更改。block_id是主键。任何帮助,将不胜感激。

4

1 回答 1

1

我已经毫无问题地运行了您的查询,您确定您没有使用数据表定义其他键吗?并确保您为 id 字段设置了“自动增量”。没有 auto_increment,查询总是更新现有行

** * **更新** * ** * ****

对不起,我弄错了你的问题。是的,只有一个 auto_increment 键,您的查询将始终插入新行而不是更新现有行(因为主键是检测“现有”/重复的唯一方法),因为键是 auto_increment,如果插入查询中未给出主键。

我认为您想要实现的目标不同,您可能希望在所有字段(即块、字段、宽度、行)上设置复合唯一键

顺便说一句,我已经为你设置了一个 SQL 小提琴。 http://sqlfiddle.com/#!2/e7216/1

添加唯一键的语法:

CREATE TABLE `data` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`block` varchar(10) DEFAULT NULL,
`length` int(11) DEFAULT NULL,
`width` int(11) DEFAULT NULL,
`rows` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `uniqueme` (`block`,`length`,`width`,`rows`)
 ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
于 2013-08-12T09:47:14.160 回答