我需要将多条记录添加到 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_increment,如果插入查询中未给出主键。
我认为你想要实现的是不同的,你可能想在所有字段(即 block 、字段、宽度、行)上设置复合唯一键
顺便说一下,我已经为你设置了一个 SQL fiddle。 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;
关于mysql - 插入更新多行mysql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18183703/