【问题标题】:How to do MySQL bulk insert using stored procedure?如何使用存储过程进行 MySQL 批量插入?
【发布时间】:2017-07-03 20:07:31
【问题描述】:

在使用 MySQL 进行数据库操作时,我专门使用存储过程。需要定期插入数千条记录。有没有办法将集合作为参数传递给存储过程?如果有,存储过程如何将接收到的参数作为一个批量插入插入?

【问题讨论】:

  • 集合当然是您正在使用的应用程序语言(C#、Java 等)中的一种语言结构。你没有提到你使用的是什么语言。您是否已排除使用 LOAD DATA INFILE 来获取大型数据集的可能性?
  • 我正在使用 Javascript。也许使用“收藏”这个词是一个糟糕的选择。我没有在应用程序语言的上下文中使用它,而是以通用的方式使用它。无论应用程序语言如何,如果我要针对 MySQL 运行原始 SQL 来调用 SP,我将如何向它传递数据集合以及如何对 SP 进行编码以立即插入批量加载?这真的是我的问题。

标签: mysql


【解决方案1】:

我对存储过程的理解是,参数不能包含任何将是可执行命令的代码,例如 INSERT DELETE UPDATE 仅变量。因此,您不能将整个 INSERT 命令传递给存储过程。因此,存储过程可以防止 SQL 注入。这是@Polynomials https://security.stackexchange.com/questions/25684/how-can-i-explain-sql-injection-without-technical-jargon/25710#25710 对存储过程中命令和参数分离的基本原理的出色且非常图灵的解释。

所以批量插入要么是 LOAD DATA INFILE 作为@O。琼斯在上面的 cmets 或一个 INSERT 存储过程中说,您可以使用您选择的语言通过插入来迭代参数插入的填充。

【讨论】:

  • 感谢您的回复。我不倾向于文字 SQL 语句。我想知道 SP 是否有某种字符串格式作为参数接收,它会被解释为 SQL 中的某种集合。我想没有这样的事情。我将尝试使用 LOAD DATA INFILE 方法。谢谢。
猜你喜欢
  • 2012-01-01
  • 1970-01-01
  • 2011-05-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-12
相关资源
最近更新 更多