加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

sqlite不支持的sql语句有哪些

发布时间:2020-12-12 20:35:16 所属栏目:百科 来源:网络整理
导读:总结 SQLite 不支持的 SQL 语法有哪些 1 TOP 这是一个大家经常问到的问题,例如在 SQLSERVER 中可以使用如下语句来取得记录集中的前十条记录: SELECT TOP 10 * FROM [index] ORDER BY indexid DESC; 但是这条 SQL 语句在 SQLite 中是无法执行的,应该改为:

总结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 DISTINCTwatch_item.[watchid],watch_item.[itemid] FROM watch_item;
上面这条语句执行后会显示成功,但是实际上除了
SELECT COUNT(*) FROM [watch_single ] WHERE watch_ single.watchid = 1;
能执行之外是无法执行其他任何语句的。其原因在于建立视图的时候指定了字段所在的表名,而并不能正确地识别它。所以上面的创建语句要改为:
CREATE VIEW watch_single AS SELECT DISTINCT [watchid],[itemid] FROM watch_item;
但是随之而来的问题是如果是多表的视图,且表间有重名字段的时候该怎么办?

3 COUNTDISTINCT column
在执行如下语句的时候会报错:
SELECT COUNT(DISTINCT watchid) FROM [watch_item] WHERE watch_item.watchid = 1;
其原因是SQLite的所有内置函数都不支持DISTINCT限定,所以如果要统计不重复的记录数的时候会出现一些麻烦。比较可行的做法是先建立一个不重复的记录表的视图,然后再对该视图进行计数。

4 外连接
虽然官方已经声称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];
此外经过测试用+号代替*号也是不可行的。

收集Sql Server的语法差异

1.返回最后插入的标识值
返回最后插入的标识值sql server@@IDENTITY
sqlite
用标量函数LAST_INSERT_ROWID()
返回通过当前的 SQLConnection 插入到数据库的最后一行的行标识符(生成的主键)。此值与 SQLConnection.lastInsertRowID 属性返回的值相同。

2.top n中返回前2行可以这样:
select top 2 * from aa
order by ids desc

sqlite中用LIMIT,语句如下:
select * from aa
order by ids desc
LIMIT 2

3.GETDATE ( )GETDATE ( )返回当前系统日期和时间
sqlite
中没有 可以用这个代替select date('now')

4.EXISTS语句
中判断插入(不存在ids=5的就插入)
IF NOT EXISTS (select * from aa where ids=5)
BEGIN
insert into aa(nickname)
select 't'
END
中可以这样
insert into aa(nickname)
select 't'
where not exists(select * from aa where ids=5)

5.嵌套事务
sqlite
仅允许单个活动的事务

6.RIGHT FULL OUTER JOIN不支持 FULL OUTER JOIN

7.可更新的视图视图是只读的。不能对视图执行 DELETEINSERT UPDATE 语句,是可以对视图 UPDATE

8.外键约束(FOREIGN KEY constraints)外键约束会被解析但不会被执行。

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读