sqlite sql语法不支持的SQL语法有哪些

您所在的位置: &
这些SQLite与SQL差异问题,你遇到过吗
这些SQLite与SQL差异问题,你遇到过吗
不觉流年似水
这些关于SQLite与SQL差异的问题,你是否遇到过呢?笔者在这里为大家总结出了使用SQLite时,与SQL之间经常会出现的一些差异性问题,希望对大家的使用有所帮助。
编者注:这些关于SQLite与SQL差异的问题,你是否遇到过呢?笔者在这里为大家总结出了使用SQLite时,与SQL之间经常会出现的一些差异性问题,希望对大家的使用有所帮助。
一、常见问题汇总
这是一个大家经常问到的问题,例如在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_&
上面这条SQL语句执行后会显示成功,但是实际上除了
SELECT&COUNT(*)&FROM&[watch_single&]&WHERE&watch_&single.watchid&=&1;&
能执行之外是无法执行其他任何语句的。其原因在于建立视图的时候指定了字段所在的表名,而SQLite并不能正确地识别它。所以上面的创建语句要改为:
CREATE&VIEW&watch_single&AS&SELECT&DISTINCT&[watchid],[itemid]&FROM&watch_&
但是随之而来的问题是如果是多表的视图,且表间有重名字段的时候该怎么办?
3 COUNT(DISTINCT column)
SQLite在执行如下语句的时候会报错:
SELECT&COUNT(DISTINCT&watchid)&FROM&[watch_item]&WHERE&watch_item.watchid&=&1;&
其原因是SQLite的所有内置函数都不支持DISTINCT限定,所以如果要统计不重复的记录数的时候会出现一些麻烦。比较可行的做法是先建立一个不重复的记录表的视图,然后再对该视图进行计数。
虽然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.返回最后插入的标识值
返回最后插入的标识值sql server用@@IDENTITY
sqlite用标量函数LAST_INSERT_ROWID()
返回通过当前的 SQLConnection 插入到数据库的最后一行的行标识符(生成的主键)。此值与 SQLConnection.lastInsertRowID 属性返回的值相同。
在sql server中返回前2行可以这样:
select&top&2&*&from&aa& &order&by&ids&desc&
sqlite中用LIMIT,语句如下:
select&*&from&aa& &order&by&ids&desc& &LIMIT&2&
3.GETDATE ( )
在sql server中GETDATE ( )返回当前系统日期和时间
sqlite中没有
4.EXISTS语句
sql server中判断插入(不存在ids=5的就插入)
IF&NOT&EXISTS&(select&*&from&aa&where&ids=5)& &BEGIN& &insert&into&aa(nickname)& &select&'t'& &END& &
在sqlite中可以这样
insert&into&aa(nickname)& &select&'t'& &where&not&exists(select&*&from&aa&where&ids=5)&
5.嵌套事务
sqlite仅允许单个活动的事务
6.RIGHT 和 FULL OUTER JOIN
sqlite不支持 RIGHT OUTER JOIN 或 FULL OUTER JOIN
7.可更新的视图
sqlite视图是只读的。不能对视图执行 DELETE、INSERT 或 UPDATE 语句,sql server是可以对视图 DELETE、INSERT 或 UPDATE
三、新增内容
1.关于日期时间类型列的默认设置:
对&列&的设置包括三个字段:Name、Type、Default
Name:logTime(随意命名);
Date类型,得到的值形如&&,
DATETIME类型,得到的值形如& 11:49:04.000&;
Default:datetime('now','localtime')& 我采用的是两个参数,后面的localtime不要丢弃,不然时间不准确。
原文链接:/luoxiaonet/archive//2024877.html
【编辑推荐】
【责任编辑: TEL:(010)】
关于的更多文章
SQLite是一款轻型的数据库,它遵守ACID的关联式数据库管理系统,
数据库产品
数据库综合
数据库新闻
维基百科将切换到另外一款开源数据库MariaDB
为什么会发生死锁?如何利用SQL Server Profiler分析
Oracle集群,也称Oracle RAC,称为“真正应用集群”。
Oracle数据库会经常出现一些Error错误信息,本专题将
本书是根据全国计算机技术与软件专业技术资格(水平)考试《网络管理员考试大纲》所要求的考试范围而编写的试题集。全书共分10个
51CTO旗下网站如何用标准SQL语句给一张表中添加多个字段_java吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:514,606贴子:
如何用标准SQL语句给一张表中添加多个字段收藏
存在一张person表,添加一个字段phone可用sql语句alter table person add phone varchar(20)如果同时添加两个字段phone和address,试过用以下两条SQL语句alter table person add phone varchar(15),address varchar(15)和alter table person add phone varchar(15),add address varchar(15)结果都是错误的那么请问应该如何给一张表增加多个字段
java 开发快速开发全球领先,快速开发+定制+集成,上千开发商采用,免费下载!完全可视化工作流+界面+规则+报表+移动支持,纯BS+SOA,支持所有浏览器,平板和移动设备
alter table person add phone varchar(15),address varchar(15)这样是可以的。1.检查你的表中是否有相同的列名。2.是否是中文状态的。
alter table person
add phone char(200)
报错sql语句 person表中只有name和id两个字段难道SQLite不支持这种语法?资料上说SQLite支持所有的标准sql语句呀
我以前没用过这玩意的数据库。下载了一个。确实不可以。但是sqlserver 和oracle确实可以执行。既然是这样。肯定是有解决方案。慢慢找。找到答案的话可以告诉我。
你用的是什么数据库?oracle是不可以的
alert(chaalert(channelId=id)nnelId=id)
alter table person add ( phone varchar(15),address varchar(15) ,……)用括号包裹起来就可以了
SQLite不支持吧。SQLServer肯定支持。SQLIte必竟是桌面小型数据。别要求太高。
--sqlserveralter table t1
f1 varchar(20) ,
f2 varchar(20)--oraclealter table t1
add ( f1 varchar2(20),
f2 varchar2(20))
数据库已存在数据 需要加新加字段的默认值吧! 你试试
楼上方法都试过了,都不对~楼主找到答案了吗?
中文逗号?
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或<span style="color:#、TOP
这是一个大家经常问到的问题,例如在 SQLSERVER 中可以使用如下语句来取得记录集中的前十条记录:&
SELECT TOP10 * FROM [index] ORDER BYindexid DESC;&
但是这条SQL语句在SQLite中是无法执行的,应该改为:&
SELECT * FROM [index] ORDER BY indexid DESClimit0,10;&
其中limit 0,10表示从第0条记录开始,往后一共读取10条
<span style="color:#、创建视图(Create View)
SQLite在创建多表视图的时候有一个BUG,问题如下:&
CREATE VIEW watch_single AS SELECTDISTINCTwatch_item.[watchid],watch_item.[itemid] FROM watch_&
上面这条SQL语句执行后会显示成功,但是实际上除了&
SELECT COUNT(*) FROM [watch_single ] WHEREwatch_ single.watchid = 1;&
能执行之外是无法执行其他任何语句的。其原因在于建立视图的时候指定了字段所在的表名,而SQLite并不能正确地识别它。所以上面的创建语句要改为:&
CREATE VIEW watch_single AS SELECT DISTINCT[watchid],[itemid] FROM watch_&
但是随之而来的问题是如果是多表的视图,且表间有重名字段的时候该怎么办?
<span style="color:#、COUNT(DISTINCT column)
SQLite在执行如下语句的时候会报错:&
SELECT COUNT(DISTINCT watchid) FROM[watch_item] WHERE watch_item.watchid = 1;&
其原因是SQLite的所有内置函数都不支持DISTINCT限定,所以如果要统计不重复的记录数的时候会出现一些麻烦。比较可行的做法是先建立一个不重复的记录表的视图,然后再对该视图进行计数。
<span style="color:#、外连接
虽然SQLite官方已经声称 LEFT OUTER JOIN已经实现,但还没有 RIGHT OUTER JOIN 和 FULL OUTER JOIN。但是实际测试表明&#20284;乎并不能够正常的工作。以下三条语句在执行的时候均会报错:&
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];&
此外经过测试用&#43;号代替*号也是不可行的。
收集 SQLite 与 Sql Server 的语法差异
<span style="color:#、返回最后插入的标识&#20540;
返回最后插入的标识&#20540;sql server用@@IDENTITY&
sqlite用标量函数 LAST_INSERT_ROWID()&
返回通过当前的 SQLConnection 插入到的最后一行的行标识符(生成的主键)。此&#20540;与SQLConnection.lastInsertRowID属性返回的&#20540;相同。
<span style="color:#、top n
在sql server中返回前2行可以这样:&
select top 2* from aa order by ids desc
sqlite中用LIMIT,语句如下:&
select * from aa order by ids desc LIMIT 2
<span style="color:#、GETDATE()
在 sql server 中 GETDATE()返回当前日期和时间&
sqlite中 没有
<span style="color:#、EXISTS语句
sql server中判断插入(不存在ids=5的就插入)&
IF NOT EXISTS(select * from aa whereids=5)&
& insert into aa(nickname)&
& select 't'&
在sqlite中可以这样&
Insert into aa(nickname)&
select 't'&
where not exists(select * from aa whereids=5)
<span style="color:#、嵌套事务
sqlite仅允许单个活动的事务
<span style="color:#、RIGHT和 FULL OUTER JOIN
sqlite不支持 RIGHT OUTER JOIN或 FULL OUTERJOIN
<span style="color:#、可更新的视图
sqlite视图是只读的。不能对视图执行 DELETE、INSERT 或UPDATE 语句,sql server是可以对视图DELETE、INSERT 或 UPDATE
转自:/link?url=VttRxBsW-x3byxJY9Timl1MbgoST_7JdRcbE_uuKk42FigNyltcdaxSNTJ9WrPeG7Ezc8k-L45Ajqld7bV9ka6wu_1jIuDZyuG5popDulxC
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:93565次
积分:1572
积分:1572
排名:第19025名
原创:61篇
转载:38篇
评论:17条<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
您的访问请求被拒绝 403 Forbidden - ITeye技术社区
您的访问请求被拒绝
亲爱的会员,您的IP地址所在网段被ITeye拒绝服务,这可能是以下两种情况导致:
一、您所在的网段内有网络爬虫大量抓取ITeye网页,为保证其他人流畅的访问ITeye,该网段被ITeye拒绝
二、您通过某个代理服务器访问ITeye网站,该代理服务器被网络爬虫利用,大量抓取ITeye网页
请您点击按钮解除封锁&

我要回帖

更多关于 android sqlite语法 的文章

 

随机推荐