首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MYSQL:单次查询中的批处理插入/更新语句

问MYSQL:单次查询中的批处理插入/更新语句
EN

Stack Overflow用户
提问于 2016-10-29 19:16:04
回答 2查看 6.8K关注 0票数 1

我需要做批处理 MYSQL插入/更新。我得到了批处理插入语句,但是当插入以多个行的形式出现时,它不会..类似地,我无法生成批处理更新。请参阅下面的例子。

批处理插入语句工作

代码语言:javascript
复制
$sql = "INSERT INTO `test` (`somefield`) VALUES ('test', 'test');";
db::statement($sql);

多单独插入语句 NOT working

代码语言:javascript
复制
$sql = "INSERT INTO `test` (`somefield`) VALUES ('test'); INSERT INTO `test` (`somefield`) VALUES ('test');";
db::statement($sql);

SQLSTATE42000:语法错误或访问冲突: 1064您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以获得在第1行(SQL:插入test (somefield)值('test');插入test (somefield)值('test');)附近使用“插入到test (somefield)值”(‘test’)的正确语法;

批处理更新语句不工作的

代码语言:javascript
复制
$sql = "INSERT INTO 'flights' (`id`, `airline`) VALUES ('142832', 'BA') ON DUPLICATE KEY UPDATE `airline`=VALUES(`airline`);"
db::statement($sql);

1064 -您的SQL语法有一个错误;请检查与您的MySQL服务器版本对应的手册,以便在第1行的重复键UP上使用接近“id,airline”值('142832','BA')的正确语法。

查看了多个堆栈溢出帖子--但我搞错了

多个插入语句- Multiple SQL Update Statements in single query

批处理更新语句- Multiple Updates in MySQL

非常感谢你的帮助-谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-10-29 19:48:40

这太奇怪了。乍一看,这条批处理语句似乎是错误的,这应该是可行的。

语义正确的批处理语句的括号将分隔每一行数据,即。就像这样:

代码语言:javascript
复制
INSERT INTO test 
VALUES 
  ('test1')
, ('test2')
, ('test3');

单独的insert语句看起来很好,但是,您的数据库驱动程序可能不支持它的statement方法中的多个语句(大多数不支持AFAIK)。所做的工作是从客户端启动事务,循环遍历语句数组并执行。然后,当所有语句执行时,如果没有错误,提交,或者回滚事务。不过,第一种选择更快。

update语句不能工作,因为表名flights是使用单引号引用的。如果要引用模式/表/列标识符,请使用回标,并为字符串值和日期保留单引号,就像在同一查询的其他地方所做的那样。只有当数据库元素名是保留词时,才有必要转义它,但是将数据库元素命名为“into”、“user”等是错误的做法,应该避免。

代码语言:javascript
复制
INSERT INTO flights (`id`, `airline`) 
VALUES 
('142832', 'BA') 
ON DUPLICATE KEY UPDATE 
airline=VALUES(`airline`)
票数 3
EN

Stack Overflow用户

发布于 2016-10-29 19:32:23

尝试取消对航班的引用,或者在上一次查询(批处理更新语句)中使用倒计时引用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40322726

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档