`
wecbk
  • 浏览: 31903 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

SQLite 不支持的 SQL 特性

阅读更多
外键约束(FOREIGN KEY constraints)
外键约束会被解析但不会被执行。

完整的触发器支持(Complete trigger support)
现在有一些触发器的支持,但是还不完整。 缺少的特性包括 FOR EACH STATEMENT 触发器(现在所有的触发器都必须是 FOR EACH ROW ), 在表上的 INSTEAD OF 触发器(现在 INSTEAD OF 触发器只允许在视图上), 以及递归触发器——触发自身的触发器。

完整的 ALTER TABLE 支持(Complete ALTER TABLE support)
只支持 ALTER TABLE 命令的 RENAME TABLE 和 ADD COLUMN。 其他类型的 ALTER TABLE 操作如 DROP COLUMN,ALTER COLUMN,ADD CONSTRAINT 等等均被忽略。

嵌套事务(Nested transactions)
现在的实现只允许单一活动事务。

RIGHT 和 FULL OUTER JOIN(RIGHT and FULL OUTER JOIN)
LEFT OUTER JOIN 已经实现,但还没有 RIGHT OUTER JOIN 和 FULL OUTER JOIN。

可写视图(Writing to VIEWs)
SQLite 中的视图是只读的。无法在一个视图上执行 DELETE,INSERT,UPDATE。 不过你可以创建一个试图在视图上 DELETE,INSERT,UPDATE 时触发的触发器,然后在触发器中完成你所需要的工作。

GRANT 和 REVOKE(GRANT and REVOKE)
由于 SQLite 读和写的是一个普通的磁盘文件, 因此唯一可以获取的权限就是操作系统的标准的文件访问权限。一般在客户机/服务器架构的关系型数据库系统上能找到的 GRANT 和 REVOKE 命令对于一个嵌入式的数据库引擎来说是没有意义的,因此也就没有去实现。

SQLite不支持的SQL语法总结
1 TOP

这是一个大家经常问到的问题,例如在SQLSERVER中可以使用如下语句来取得记录集中的前十条记录:

SELECT TOP 10 * FROM [index] ORDER BY indexid DESC;


但是这条SQL语句在SQLite中是无法执行的,应该改为:

SELECT * FROM [index] ORDER BY indexid DESC limit 0,10;


其中limit 0,10表示从第0条记录开始,往后一共读取10条





2 创建视图(Create View)
SQLite在创建多表视图的时候有一个BUG,问题如下:

CREATE VIEW watch_single AS SELECT DISTINCT watch_item.[watchid],watch_item.[itemid] FROM watch_item;


上面这条SQL语句执行后会显示成功,但是实际上除了

SELECT COUNT(*) FROM [watch_single ] WHERE watch_ single.watchid = 1;

能执行之外是无法执行其他任何语句的。其原因在于建立视图的时候指定了字段所在的表名,而SQLite并不能正确地识别它。所以上面的创建语句要改为:

CREATE VIEW watch_single AS SELECT DISTINCT [watchid],[itemid] FROM watch_item;


但是随之而来的问题是如果是多表的视图,且表间有重名字段的时候该怎么办?





3 COUNT(DISTINCT column)
SQLite在执行如下语句的时候会报错:

SELECT COUNT(DISTINCT watchid) FROM [watch_item] WHERE watch_item.watchid = 1;

其原因是SQLite的所有内置函数都不支持DISTINCT限定,所以如果要统计不重复的记录数的时候会出现一些麻烦。比较可行的做法是先建立一个不重复的记录表的视图,然后再对该视图进行计数。





4 外连接
虽然SQLite官方已经声称LEFT OUTER JOIN 已经实现,但还没有 RIGHT OUTER JOIN 和 FULL OUTER JOIN。但是实际测试表明似乎并不能够正常的工作。以下三条语句在执行的时候均会报错:
SELECT tags.[tagid] FROM [tags],[tag_rss] WHERE tags.[tagid] = tag_rss.[tagid](*);


SELECT tags.[tagid] FROM [tags],[tag_rss] WHERE LEFT OUTER JOIN tag_rss.[tagid] = tags.[tagid];


SELECT tags.[tagid] FROM [tags],[tag_rss] WHERE LEFT JOIN tag_rss.[tagid] = tags.[tagid];


此外经过测试用 号代替*号也是不可行的。





sqlite和sql server语法上的一些区别
1. @@IDENTITY LAST_INSERT_ROWID()
2. SELECT cn = COUNT(*) FROM ... SELECT COUNT(*) cn FROM ...
3. LIMIT startIndex,itemCn 这儿的startIndex是从0开始的,而ROW_NUMBER()是从1开始的
4. sqlite中没有SELECT TOP,用LIMIT即可
5. SQLite自增字段,如果在事务中插入数据失败,并不会占用增长后的id,而sql server中对应的id将无效
6. SQLite中没有GETDATE日期函数
7. SQLite支持REPLACE INTO语法,sql server 2008中支持merge to


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/aroc_lo/archive/2009/02/04/3861686.aspx
分享到:
评论

相关推荐

    SQLite SQL语法 CHM

    SQLite SQL语法 CHM SQLite库可以解析大部分标准SQL语言。但它也省去了一些特性 并且加入了一些自己的新特性。这篇文档就是试图描述那些SQLite支持/不支持的SQL语法的。

    SQLite的SQL语法

    SQLite的SQL语法 SQLite库可以解析大部分标准SQL语言。但它也省去了一些特性 并且加入了一些自己的新特性。这篇文档就是试图描述那些SQLite支持/不支持的SQL语法的。

    xorm, 面向 Go,支持 mysql,postgres,tidb,sqlite3,sql,oracle的简单和强大的ORM.zip

    xorm, 面向 Go,支持 mysql,postgres,tidb,sqlite3,sql,oracle的简单和强大的ORM 中文Xorm... 特性结构 <->-表映射支持可以链接的api事务支持ORM和原始SQL操作支持同步数据库架构支持查询缓存加速数据库反向支持,

    SQLite资料

    这篇文档就是试图描述那些SQLite支持/不支持的SQL语法的。 查看关键字列表。 如下语法表格中,纯文本用蓝色粗体显示。非终极符号为斜体红色。作为语法一部分的运算符用黑色Roman字体表示。 这篇文档只是对SQLite实现...

    sqlite中文手册

    这篇文档就是试图描述那些SQLite支持/不支持的SQL语法的。 查看关键字列表。 如下语法表格中,纯文本用蓝色粗体显示。非终极符号为斜体红色。作为语法一部分的运算符用黑色Roman字体表示。 这篇文档只是对SQLite...

    sqlite3.08源码包及使用指南

    用 SQLite连接的程序可以使用SQL数据库,但不需要运行一个单独的关系型数据库管理系统进程(separate RDBMS process)。 SQLite不是一个用于连接到大型数据库服务器(big database server)的客户端库(client ...

    SQLite3使用详解.rar

    使用主机操作系统不支持的特性 SQLITE_AUTH = 23; 非法授权 SQLITE_FORMAT = 24; 辅助数据库格式错误 SQLITE_RANGE = 25; 2nd parameter to sqlite_bind out of range SQLITE_NOTADB = 26; 打开的不是一个...

    vs2019 C# 对SQLite数据库的增删改查的代码实例

    SQLite支持大多数SQL92标准,可以在所有主要的操作系统上运行,并且其源代码是完全公开的。 SQLite也有一些限制和不足之处,例如不具有高度的并发性和良好的存取权限控制,没有内置的函数集,不支持存储过程以及深奥...

    Sqlite Developer v2.87.275 官方中文破解版.rar

    SharpPlus Sqlite Developer 特性: -强大的SQL编辑器 *Sqlite Sql语法高亮 *Sql编辑历史 *Sql关键字自动完成 *括号高亮匹配 *表,字段名自动完成 *自动SQL语法错误提示 *支持Unicode -SQL代码格式...

    SQLite最全资料-完美书签

    SQLite 不支持的 SQL 特性 21 SQLite 的体系结构简介 22 简介 22 接口程序 22 Tokenizer 22 Parser 23 代码发生器 23 虚拟机器 23 B-树 23 页面高速缓存 24 OS 接口程序 24 Utilities 24 测试代码 24

    SQLite 数据库

    SQLite是一个小型的C程序库,实现了独立的,可嵌入的,零配置的SQL数据库引擎。特性包括: 事务操作是原子,一致,孤立,并且持久的(ACID),即使在系统崩溃和电源故障之后。 零配置——不需要安装和管理。 实现...

    Sqlite Developer 3.86 破解版中文版 管理工具

    Sqlite Developer是SharpPlus出品...支持对sqlite3数据库的管理。破解版 中文版,最新 3.86 SharpPlus Sqlite Developer 特性: -强大的SQL编辑器 *Sqlite Sql语法高亮 *Sql编辑历史 *Sql关键字自动完成 *括号高亮匹配

    SQLite(SqliteDev)

    SQLite支持常见的数据类型, 如:  CREATE TABLE ex2(  a VARCHAR(10),  b NVARCHAR(15),  c TEXT,  d INTEGER,  e FLOAT,  f BOOLEAN,  g CLOB,  h BLOB,  i TIMESTAMP,  j NUMERIC(10,5)  k VARYING ...

    sqlite-amalgamation-3240000.zip

    sqlite是一个开源的嵌入式文件数据库,sqlite以动态链接库的方式供应用程序调用...sqlite虽然小,但功能并不弱,它支持sql-92标准中大部分SQL规范, 支持表,索引,视图,触发器等对象,同时它还支持事务,满足ACID特性

    Delphi SQLite Wrapper 2.1.2(2012-08-21)

    4、支持任何Sqlite的SQL命令并遍历结果集、可以使用准备好的查询、可以使用参数化查询、可以使用事务(包括保存点[savepoints])、可以定义自己的UDF(用户定义的SQL函数)、可以定义自己的排序规则;

    SQLite 中文文档

    这是一个很重要的Android技术资料,Android的数据库操作方法。 2分很值哦 SQLite库可以解析大部分标准SQL语言。但它也省去了一些特性 并且加入了一些自己的...这篇文档就是试图描述那些SQLite支持/不支持的SQL语法的。

    Python SQLite3数据库操作类分享

    接触Python时间也不是很长的,最近有个项目需要分析数据,于是选用Python为编程语言,除了语言特性外主要还是看重Python对于SQLite3数据库良好的支持能力了,因为需要灵活处理大量的中间数据。 刚开始一些模块我还...

    数据库Schema移植工具sql-migrate.zip

    支持 SQLite, PostgreSQL, MySQL, MSSQL 和 Oracle 数据库 (使用 gorp) 可嵌入到应用程序 使用 SQL 定义移植过程 原子迁移 可对移植过程进行撤回 在一个项目中支持多种数据库类型 标签:sqlmigrate

Global site tag (gtag.js) - Google Analytics