插入更新多行mysql



我需要向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;

相关内容

  • 没有找到相关文章

最新更新