MySQL多个INSERT与ODBC上的ON DUPLICATE KEY UPDATE问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL多个INSERT与ODBC上的ON DUPLICATE KEY UPDATE问题相关的知识,希望对你有一定的参考价值。

我在Stackoverflow中搜索得非常广泛,但无法找到解决方案。

我试图通过ODBC连接将数据插入mysql数据库。只有一个PRIMARY键,即ID字段。

首先是没有ON DUPE位的示例代码

Query$ = Query$ + "INSERT INTO `" + DatabaseMainDataTable.s + "` (`ID`, `Date_TS`, `HTeam`, `ATeam`, `FTG`, `FTA`, `FT`) VALUES "
Query$ = Query$ + "(" + GetRandom() + ", 1533340899, 'Peter', 'Frankie', 2, 1, 'H')," 
Query$ = Query$ + "(" + GetRandom() + ", 1533340899, 'Peter', 'Frankie', 2, 1, 'H')," 
Query$ = Query$ + "(" + GetRandom() + ", 1533340899, 'Peter', 'Frankie', 2, 1, 'H')," 
Query$ = Query$ + "(" + GetRandom() + ", 1533340899, 'Peter', 'Frankie', 2, 1, 'H')," 
Query$ = Query$ + "(" + GetRandom() + ", 1533340899, 'Peter', 'Frankie', 2, 1, 'H')," 
Query$ = Query$ + "(" + GetRandom() + ", 1533340899, 'Peter', 'Frankie', 2, 1, 'H');" 

现在这工作正常但是我需要添加ON DUPLICATE KEY UPDATE以更新任何现有记录,所以使用这段代码我会认为它会像上面的代码一样工作。

Query$ = Query$ + "INSERT INTO `" + DatabaseMainDataTable.s + "` (`ID`, `Date_TS`, `HTeam`, `ATeam`, `FTG`, `FTA`, `FT`) VALUES "
Query$ = Query$ + "(" + GetRandom() + ", 1533340899, 'Peter', 'Frankie', 2, 1, 'H') ON DUPLICATE KEY UPDATE FTG=0, FT='Z'," 
Query$ = Query$ + "(" + GetRandom() + ", 1533340899, 'Peter', 'Frankie', 2, 1, 'H') ON DUPLICATE KEY UPDATE FTG=0, FT='Z'," 
Query$ = Query$ + "(" + GetRandom() + ", 1533340899, 'Peter', 'Frankie', 2, 1, 'H') ON DUPLICATE KEY UPDATE FTG=0, FT='Z'," 
Query$ = Query$ + "(" + GetRandom() + ", 1533340899, 'Peter', 'Frankie', 2, 1, 'H') ON DUPLICATE KEY UPDATE FTG=0, FT='Z'," 
Query$ = Query$ + "(" + GetRandom() + ", 1533340899, 'Peter', 'Frankie', 2, 1, 'H') ON DUPLICATE KEY UPDATE FTG=0, FT='Z'," 
Query$ = Query$ + "(" + GetRandom() + ", 1533340899, 'Peter', 'Frankie', 2, 1, 'H') ON DUPLICATE KEY UPDATE FTG=0, FT='Z';" 

但这不起作用。只有ON DUPLICATE KEY UPDATE FTG = 0,FT ='Z'等添加只会导致错误

错误[MySQL] [ODBC 8.0(w)驱动程序] [mysqld-5.7.22]您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,以便在附近使用正确的语法

我也尝试过ON DUPLICATE KEY UPDATE FTG=VALUES(0), FT=VALUES('Z')没有成功。

这个有趣的事情是,如果我使用上面的代码并粘贴到phpmyadmin然后插入成功,所以我只是不知道是什么导致错误通过ODBC

有任何想法吗?

答案

你不能有多个ON DUPLICATE KEY条款。在所有值之后,只需将其中一个放在最后。

Query$ = Query$ + "INSERT INTO `" + DatabaseMainDataTable.s + "` (`ID`, `Date_TS`, `HTeam`, `ATeam`, `FTG`, `FTA`, `FT`) VALUES "
Query$ = Query$ + "(" + GetRandom() + ", 1533340899, 'Peter', 'Frankie', 2, 1, 'H')," 
Query$ = Query$ + "(" + GetRandom() + ", 1533340899, 'Peter', 'Frankie', 2, 1, 'H')," 
Query$ = Query$ + "(" + GetRandom() + ", 1533340899, 'Peter', 'Frankie', 2, 1, 'H')," 
Query$ = Query$ + "(" + GetRandom() + ", 1533340899, 'Peter', 'Frankie', 2, 1, 'H')," 
Query$ = Query$ + "(" + GetRandom() + ", 1533340899, 'Peter', 'Frankie', 2, 1, 'H')," 
Query$ = Query$ + "(" + GetRandom() + ", 1533340899, 'Peter', 'Frankie', 2, 1, 'H')"
Query$ = Query$ + " ON DUPLICATE KEY UPDATE FTG=0, FT='Z';"

以上是关于MySQL多个INSERT与ODBC上的ON DUPLICATE KEY UPDATE问题的主要内容,如果未能解决你的问题,请参考以下文章

Java MySQL executeUpdate() 为重复键更新上的 INSERT ON 返回啥?

MySQL INSERT 与 ON DUPLICATE SELECT 可能吗?

MySQL INSERT INTO / ON DUPLICATE KEY 与 SELECT 语句问题

MySQL的replace into 与insert into on duplicate key update

MySQL的replace into 与insert into on duplicate key update

mysql特殊语法insert into .. on duplicate key update ..使用详解