我在 Stackoverflow 中进行了广泛的搜索,但找不到解决方案。
我正在尝试通过 ODBC 连接将数据插入 MySQL 数据库。只有一个主键,即 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' 等只会导致错误
Error [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.22]You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near
我还尝试过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 通过 ODBC 进行多重插入和重复键更新问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52211530/