【问题标题】:SQLite batch inserts to multiple tablesSQLite 批量插入多个表
【发布时间】:2014-10-22 14:17:08
【问题描述】:

这很好用:

insert into Genres (ID, Genre) 
select 1 AS ID, 'Action' AS Genre 
union select 2, 'Adventure' 

...这很好用:

insert into Movies_Genres (ID, MovieID, GenreID) 
select 1 AS ID, 2 AS MovieID, 1 AS GenreID 
union select 2, 3, 1 

...但是当我尝试结合这两个语句时:

insert into Genres (ID, Genre) 
select 1 AS ID, 'Action' AS Genre 
union select 2, 'Adventure' 
insert into Movies_Genres (ID, MovieID, GenreID) 
select 1 AS ID, 2 AS MovieID, 1 AS GenreID 
union select 2, 3, 1 

...它会引发错误。我还尝试用分号分隔 2 个表批次,但也出现错误。 “解析提供的 SQL 语句时发生错误。”和“语法错误”。我有大量的插入要做,所以我需要最大限度地提高性能,我发现这种方法非常健壮和快速:

How to insert multiple rows into a SQLite 3 table?

那么,将一堆针对不同表的插入批处理在一起的正确语法是什么?

【问题讨论】:

  • 使用 UNION ALL 代替 UNION。
  • 您如何将INSERT 语句传递给 sqlite3?如果您使用需要单个语句的方法执行此操作,您将无法在单个提交中包含两个 INSERT 语句。

标签: sqlite


【解决方案1】:

一个语句不能插入多个表。

只需执行多个语句。 (如果您使用单个事务,这将很快。)

【讨论】:

  • sqlite 没有多个语句的批处理分隔符(例如分号)?所有其他数据库平台都支持这一点,所以我只是想 sqlite 也可以。
  • 它有,但是许多语言/库的驱动程序不允许它防止注入攻击。
  • 搞定了;只是看起来很奇怪,您不能在同一批次中将任何您想要的插入批量添加到任何表中。
  • @HerrimanCoder 你能告诉我你是如何工作的吗?我想插入 2 个表
  • @TeeJay 这取决于您使用的语言。问一个新问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-23
  • 2019-05-16
  • 1970-01-01
  • 2021-05-12
相关资源
最近更新 更多