我需要向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是主键。如有任何帮助,我们将不胜感激。
我已经毫无问题地运行了您的查询,您确定没有用数据表定义其他键吗?还要确保为id字段设置了"自动递增"。在没有auto_increment的情况下,查询总是更新现有的行
******更新******
对不起,我弄错了你的问题。是的,如果只有一个auto_increment关键字,则查询将始终插入新行,而不是更新现有行(因为主键是检测"现有"/重复的唯一方法),因为关键字是auto_increement,所以如果插入查询中没有给定主键,则永远不会有重复。
我认为你想要实现的是不同的,你可能想要在所有字段(即块、字段、宽度、行)上设置复合唯一密钥
顺便说一下,我已经为您设置了一个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;