【发布时间】:2019-01-16 16:39:08
【问题描述】:
我正在尝试在单个查询中插入多个数据。
INSERT INTO tableName (`ITEM`, `QUANTITY`)
VALUES
('PAPER', '1'),
('PENCIL', '1'),
('FOLDER', '1'),
('PEN', '1'),
('ERASER', '1')
这行得通。基本上它所做的只是针对每个条目(或如上所示的“纸”、“铅笔”等项目),它只是将其作为一条记录插入。
我现在的问题是如果记录已经存在怎么办?我不想插入与现有记录具有相同详细信息的新记录。
我正试图弄清楚如何在重复密钥更新时遇到。
这是我的新查询:
INSERT INTO tableName (`ITEM`, `QUANTITY`)
VALUES
('PAPER', '1'),
('PENCIL', '1'),
('FOLDER', '1'),
('PEN', '1'),
('ERASER', '1')
ON DUPLICATE KEY UPDATE ITEM=ITEM, QUANTITY=QUANTITY;
虽然这适用于插入,但我的问题是所有现有记录都将具有应更新的固定值,无法确定哪个记录应具有指定值作为新数据。
不用说,使用这种方法,我无法确定应该插入什么值作为对某个记录的更新,因为它会更新所有现有数据。
我正在考虑一种类似的方法:
INSERT INTO tableName (`ITEM`, `QUANTITY`)
VALUES
('PAPER', '1') ON DUPLICATE KEY UPDATE ITEM=ITEM, QUANTITY='2',
('PENCIL', '1') ON DUPLICATE KEY UPDATE ITEM=ITEM, QUANTITY='33',
('FOLDER', '1') ON DUPLICATE KEY UPDATE ITEM=ITEM, QUANTITY='19',
('PEN', '1') ON DUPLICATE KEY UPDATE ITEM=ITEM, QUANTITY='28',
('ERASER', '1') ON DUPLICATE KEY UPDATE ITEM=ITEM, QUANTITY='14';
这样的东西可以帮助我在表中插入任意数量的记录,如果我尝试插入的某个记录已经存在,则会使用新数据进行更新。不过这个当然不行。
我正在尝试找到一种方法来做这样的事情,因为在单个查询中插入多条记录是一项要求。
注意:我在 MySQL 上工作。另外,我试图避免使用存储过程。
【问题讨论】:
-
MySQL 有存储过程。你以前试过吗?
-
@FrankAK - 我之前使用 Microsoft SQL Server Management Studio 尝试过存储过程,但没有使用 MySQL。但无论如何,我想在不依赖存储过程的情况下做到这一点。