请问用过sqlite的朋友,有谁是在delete的时候带limit的。比如delete from table where (whereSql) order by (orderSql) limit -1 offset n;看官方文档,最新的版本肯定是支持的,而且我也把编译选项SQLITE_ENABLE_UPDATE_DELETE_LIMIT加进去了。为啥执行的时候还是报错呢。严重怀疑sqlite到底支不支持。
------解决方案--------------------
没有用过 limit 的路过
如果真的不支持,LZ 想到解决的办法没?
------解决方案--------------------
没这样用过,我都很多年没有升级了。
------解决方案--------------------
貌似也不行... delete 不能带limit ... 是版本的问题么?
delete from running_log where ( select count(*) from running_log ) > 5 and id in (select id from running_log limit (select (select count(*) from running_log )-5)) ;
带limit 的话就不这么费事了.
------解决方案--------------------
昨夜折腾这玩意,搞了一个通宵,后来仔细阅读官方文档后才明白怎么回事。总结一下,发在这个,以帮助从搜索引擎查找到这里的朋友。
=================================
使SQLite的UPDATE/DELETE支持LIMIT子句
SQLite从版本3.6.4开始支持UPDATE/DELETE使用LIMIT子句,可以使用宏SQLITE_ENABLE_UPDATE_DELETE_LIMIT进行编译控制。
但是,从http://www.sqlite.org/download.html上直接下载得到的amalgamation代码,是不支持这个功能的。我们必须使用代码未被合并的完整代码生成我们自己的amalgamation代码。
从http://www.sqlite.org/cgi/src/taglist获得你需要的代码包,比如版本3.8.0.2的下载地址是http://www.sqlite.org/cgi/src/info/7dd4968f23,我们这里以版本3.8.0.2在Windows平台下为例进行说明。下载好后,将代码包解压缩到任意位置,比如:C:\sqlite_code
下载之后,我们还需要两个工具:
ActiveTcl v8.5
下载地址:http://www.tcl.tk/software/tcltk/8.5.html
使用默认方式进行安装
gwak
下载地址:http://gnuwin32.sourceforge.net/packages/gawk.htm
找到gawk.exe,丢在SQLite代码所在目录(和Makefile.msc同一个目录)
使用MSVC的命令提示工具,进入SQLite代码所在目录,进行生成amalgamation代码的make操作:
C:\sqlite_code>nmake -f Makefile.msc "OPTS=-DSQLITE_ENABLE_UPDATE_DELETE_LIMIT=1" sqlite3.c
这样,代码所在目录中,就生成了一个打开了UPDATE/DELETE的LIMIT子句功能的amalgamation代码。
使用这个我们自己生成的amalgamation代码时,依然要提供SQLITE_ENABLE_UPDATE_DELETE_LIMIT这个宏。
其它平台,请参考本说明,在阅读相关Makefile后进行操作。