SQLite3.7.11以上版本才支持一条INSERT语句插入多行数据

最近被SQLite坑了:一个在Ubuntu14.04的节点上运行正常的PHP程序迁移到CentOS 6.4的服务器之后就一直报SQL Syntax Error。出错的是一条批量插入数据的INSERT语句:

INSERT INTO table (col1, col2) VALUES
  ('row1col1', 'row1col2'),
  ('row2col1', 'row2col2');

报错信息也非常简单:

PHP Warning:  SQLite3::exec(): near ",": syntax error in /tmp/test.php on line 32

这里不得不吐槽一下SQLite的报错信息,你这是在逗我呢吧,我语句里逗号那么多,谁知道你说的哪一个!!相比之下MySQL的报错就友善得多,会把出错的位置之后的SQL一起打出来,一眼就能定位到出错的地方。

言归正传,原来SQLite还真是够Lite的,在3.7.11版之前压根儿不支持一条语句多行插入1。Ubuntu14.04上自带的SQLite版本是3.8.2,而CentOS 6.4上自带的仅是3.6.20。而SQLite官网上的文档也是够Lite的2,虽然一个语法图无比清晰明了,但是却完全无法体现出版本兼容性的差异。不求你像MySQL一般为每个版本写一份文档,但也起码在每篇后面加几条Hint吧?

无奈人家就是要Lite,只好自己写Blog做笔记。


  1. http://stackoverflow.com/questions/1609637/is-it-possible-to-insert-multiple-rows-at-a-time-in-an-sqlite-database/1609688#1609688 

  2. http://sqlite.org/lang_insert.html 

标签: sqlite

添加新评论