`
wecbk
  • 浏览: 32545 次
  • 性别: 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语法详解

    SQLite支持SQL(结构化查询语言)语法,这是数据库管理系统中用于数据操作和管理的标准语言。下面将对SQLite支持的SQL语法进行详细解析。 1. 数据库创建与连接: - 使用`CREATE DATABASE`语句创建数据库,但在...

    sqlite 支持的 sql 语法详解

    以下是对SQLite支持的SQL语法的详细讲解,同时也将指出一些SQLite不支持的SQL语句。 一、创建与管理数据库 在SQLite中,可以使用`CREATE DATABASE`命令创建数据库,例如: ```sql CREATE DATABASE my_database; ```...

    SQLite+SQL中文速查手册

    2. **事务支持**:SQLite支持ACID(原子性、一致性、隔离性和持久性)事务,保证了数据的一致性和完整性。 3. **兼容性**:SQLite遵循SQL标准,虽然某些高级特性可能因实现限制而有所不同,但基本的SELECT、INSERT、...

    Sql server 转sqlite

    它支持复杂的SQL查询、事务处理、存储过程等高级特性。然而,SQLite则更适合那些需要在资源有限的环境下运行或对便携性有高要求的应用,例如移动应用或桌面应用。 转换过程涉及多个步骤: 1. 数据导出:首先,你...

    SQLITE3所支持的SQL教程

    ### SQLITE3支持的SQL教程知识点概述 #### 一、ALTER TABLE命令详解 - **功能**:`ALTER TABLE`命令主要用于SQLite数据库中已有表的结构调整,包括表名更改和字段添加等。 - **语法**: - `ALTER TABLE [database-...

    SQLite的SQL语法(中文)

    SQLite支持SQL语言,这是一种用于管理和处理关系数据库的标准查询语言。下面将详细介绍SQLite中的SQL语法。 一、数据类型 SQLite支持五种基本的数据类型:NULL、INTEGER、REAL、TEXT和BLOB。 1. NULL:表示空值,不...

    Sqlite数据库支持库

    SQLite支持SQL标准,提供事务处理、备份和恢复、数据类型灵活性等多种功能。 在"Sqlite数据库支持库"中,我们可以探讨以下几个关键知识点: 1. **SQLite数据库结构**:SQLite数据库由一个或多个磁盘文件组成,每个...

    DB-SQLite_SQL_sqlite

    SQLite的特性包括事务处理、ACID(原子性、一致性、隔离性、持久性)属性、多种数据类型支持(整型、浮点型、字符串、BLOB等),以及强大的SQL标准兼容性。通过DB-Browser for SQLite,用户可以充分利用这些特性,...

    SQLServer转SQLite源码

    6. **性能优化**:由于SQLite和SQL Server的性能特性不同,源码可能考虑到了性能优化,比如批量迁移、错误处理、事务管理等。 7. **自定义选项**:开发者添加的实用选项可能包括选择性迁移某些表或视图、数据过滤、...

    SQLite SQL语法中文手册

    SQL(Structured Query Language)是用于管理和操作数据库的语言,SQLite支持标准的SQL语法,但也有其特有的一些扩展。这篇"SQLite SQL语法中文手册"详细介绍了如何在SQLite中使用SQL进行数据的查询、插入、更新和...

    SQLite SQL语法 CHM

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

    SQL Server数据导入SQLite工具及源码

    SQL Server和SQLite都是广泛应用的数据库系统,但它们在使用场景和特性上有所不同。SQL Server是Microsoft公司推出的企业级数据库管理系统,适用于大型企业,支持复杂的事务处理和大数据量的管理;而SQLite则是一款...

    SqlServer 到SQLite数据库的自动转换工具

    这样的工具对于那些需要在移动设备、本地离线应用或其他不支持SQL Server的环境中使用数据的用户非常有用。通过自动转换,它可以显著减少手动操作的工作量,提高效率,并降低错误发生的可能性。在实际使用中,用户...

    “SQLITE数据库支持库”开发指南.pdf

    - SQLite支持事务的ACID属性,这意味着它保证了原子性、一致性、隔离性和持久性。即使在系统崩溃和断电后也能保持事务的完整性。 - 不需要配置或管理,即所谓的零配置。 - 支持大部分的SQL92标准,但也有部分功能...

    sqlserver2sqlite_converter

    SQL Server和SQLite都是广泛应用的数据库系统,但它们在使用场景、性能和特性上有所不同。本项目"sqlserver2sqlite_converter"提供了一个便捷的工具,用于将SQL Server数据库转换为SQLite数据库文件,以适应不同的...

    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命令,包括但不限于:`ATTACH DATABASE`、`BEGIN TRANSACTION`、`COMMIT TRANSACTION`、`CREATE INDEX`、`CREATE TABLE`、`CREATE TRIGGER`、`CREATE VIEW`、`DELETE`、`DETACH DATABASE`、`DROP...

    SQLite Sql语法参考手册

    SQLite支持标准SQL的大部分语法,包括以下内容: 1. 数据库创建与删除:CREATE DATABASE和DROP DATABASE语句用于创建和删除数据库。 2. 表的创建与修改:CREATE TABLE用于创建表,ALTER TABLE则用于修改表结构,如...

    SQLite 1.0.112 版,支持数据库加密的版本,支持64和32位

    SQLite是一款轻量级的、开源的、自包含的SQL数据库引擎,它被广泛应用于各种操作系统和应用程序中。...对于那些需要在.NET环境中处理加密SQLite数据库的开发者来说,System.Data.SQLite库是一个不可或缺的工具。

    Sqlite SQL基本语法汇总

    SQLite支持`BEGIN`, `COMMIT`, `ROLLBACK`进行事务操作,确保数据一致性: ```sql BEGIN TRANSACTION; -- 执行一系列SQL操作 COMMIT; -- 提交事务 ``` 14. **存储过程**: 虽然SQLite没有标准的存储过程概念...

Global site tag (gtag.js) - Google Analytics