Sqlite3
Ansel_m
阿里天猫
展开
-
SQLite的SQL语法
SQLite库可以解析大部分标准SQL语言。但它也省去了一些特性并且加入了一些自己的新特性。这篇文档就是试图描述那些SQLite支持/不支持的SQL语法的。查看关键字列表。如下语法表格中,纯文本用蓝色粗体显示。非终极符号为斜体红色。作为语法一部分的运算符用黑色Roman字体表示。这篇文档只是对SQLite实现的SQL语法的综述,有所忽略。想要得到更详细的信息,参考源代码和语法文件“转载 2014-09-04 19:21:05 · 869 阅读 · 0 评论 -
提升SQLite数据插入效率低、速度慢的方法
前言SQLite数据库由于其简单、灵活、轻量、开源,已经被越来越多的被应用到中小型应用中。甚至有人说,SQLite完全可以用来取代c语言中的文件读写操作。因此我最近编写有关遥感数据处理的程序的时候,也将SQLite引入进来,以提高数据的结构化程度,并且提高大数据的处理能力(SQLite最高支持2PB大小的数据)。但是最开始,我发现,直接使用SQL语句的插入效率简直低的令人发指的。后来不断查转载 2015-06-23 16:29:31 · 72180 阅读 · 25 评论 -
SQLite 约束 Constraints
SQLite 约束 Constraints一、约束 Constraints在上一篇随笔的结尾,我提到了约束, 但是在那里我把它翻译成了限定符,不太准确,这里先更正一下,应该翻译成约束更贴切一点。 那么什么是约束呢?我们在数据库中存储数据的时候,有一些数据有明显的约束条件。 比如一所学校关于教师的数据表,其中的字段列可能有如下约束:年龄 - 至少大于2转载 2015-07-17 14:15:24 · 3746 阅读 · 0 评论 -
iOS学习之sqlite的创建数据库,表,插入查看数据
iOS sqlite数据库操作。步骤是:先加入sqlite开发库libsqlite3.dylib,新建或打开数据库,创建数据表,插入数据,查询数据并打印1、新建项目sqliteDemo,添加使用sqlite的库libsqlite3.dylib2、sqlite 的方法sqlite3 *db, 数据库句柄,跟文件句柄转载 2015-10-20 15:24:32 · 1322 阅读 · 0 评论 -
Sqlite3 批量插入
eg: CREATE TABLE Person (id integer primary key, name text);CREATE TABLE P('name');insert into P('name') values ('Ansel'), ('Joy'),('Lili');insert into Person('name') select namefrom原创 2016-02-04 14:23:11 · 1745 阅读 · 0 评论 -
Sqlite3 like和glob的区别
like不区分大小写, glob区分大小写like: 百分号(%)代表零个、一个或多个数字或字符。下划线(_)代表一个单一的数字或字符。glob: 星号(*)代表零个、一个或多个数字或字符。问号(?)代表一个单一的数字或字符。eg:select * from Person where name like '_n%';select * from Person原创 2016-02-04 15:17:45 · 4128 阅读 · 0 评论 -
sqlite3 limit 使用limit
语法带有 LIMIT 子句的 SELECT 语句的基本语法如下select column1, column2, columnNfrom tableNamelimit rows;select column1, column2, columnNfrom tableNameLIMIT offset, rows; //(of原创 2016-02-04 15:31:29 · 8488 阅读 · 0 评论 -
sqlite3 的约束
有以下5种NOT NULL 约束:确保某列不能有 NULL 值。DEFAULT 约束:当某列没有指定值时,为该列提供默认值。UNIQUE 约束:确保某列中的所有值是不同的。PRIMARY Key 约束:唯一标识数据库表中的各行/记录。CHECK 约束:CHECK 约束确保某列中的所有值满足一定条件。sqlite3 没有直接删除原创 2016-02-04 16:02:54 · 1192 阅读 · 0 评论 -
sqlite3 join
sqlite3 定义了三种主要类型的连接:交叉连接 - CROSS JOIN (笛卡尔积 x*y)内连接 - INNER JOIN (默认是内连接, inner 可以省略, 左右表都满足条件才显示)外连接 - OUTER JOIN (sqlite3只支持 Left连接, 用右表来匹配左表,即每一行先从左表拿一条数据,再去右表找,右表没有找到,右表的项原创 2016-02-04 17:03:47 · 993 阅读 · 1 评论 -
Sqlite3 子查询的规则
以下是子查询必须遵循的几个规则:子查询最好用括号括起来。子查询在 SELECT 子句中只能有一个列,除非在主查询中有多列,与子查询的所选列进行比较。ORDER BY 不能用在子查询中,虽然主查询可以使用 ORDER BY。可以在子查询中使用 GROUP BY,功能与 ORDER BY 相同。子查询返回多于一行,只能与多值运算符一起使用,如 IN原创 2016-02-04 17:24:37 · 1839 阅读 · 0 评论 -
sqlite3查看select使用什么索引
eg:CREATE TABLE Person (id integer primary key, name text, age integer default 5);CREATE INDEX index_age on Person (age);EXPLAIN QUERY PLAN select * from Person where age = 9;selectid or原创 2016-02-04 18:04:16 · 3987 阅读 · 0 评论 -
sqlite3 alter table
sqlite3 alter table只支持两个1.alter table tableName rename to newTableName;2.alter table tableName add column columnName integer(类型);原创 2015-06-17 09:41:45 · 3187 阅读 · 0 评论 -
不完全解决sqlite遇到database is locked问题方法
sqlite遇到database is locked问题的完美解决这两天在项目中用大强度大频率的方法测试时遇到sqlite报database is locked的问题,分析下来原因是sqlite对数据库做修改操作时会做(文件)锁使得其它进程同一时间使用时会报该错误(也就是SQLITE_BUSY),但如果仅是多进程或多线程查询sqlite是支持的。解决方法有:1。转载 2014-09-07 11:29:24 · 5119 阅读 · 0 评论 -
sqlite constraint
sqlite3中的约束如下:CREATE TABLE CheckTable (rowId integer primary key autoincrement, name text not null, address text default "China", userId text unique, age integer check(age >= 0));sqlite3中的约束一原创 2015-06-23 08:34:12 · 2786 阅读 · 2 评论 -
解决sqlite3插入数据很慢的问题
初用sqlite3插入数据时,插入每条数据大概需要100ms左右。如果是批量导入,可以引进事物提高速度。但是假设你的业务是每间隔几秒插入几条数据,显然100ms是不能容许的。解决办法是,在调用sqlite3_open函数后添加下面一行代码: sqlite3_exec(db, "PRAGMA synchronous = OFF; ", 0,0,0); 上面的解决办法貌似治转载 2015-06-23 16:29:11 · 7759 阅读 · 0 评论 -
SQLite中的PRAGMA语句攻略
原文地址:http://iihero.iteye.com/blog/1189633 PRAGMA语句是SQLITE数据的SQL扩展,是它独有的特性,主要用于修改SQLITE库或者内数据查询的操作。它采用与SELECT、INSERT等语句一样的形式来发出请求,但也有几个重要的不同: 1. 特定的PRAGMA语句可能被移走,新的PRAGMA语句可能在新的版本中添加。因此,后向兼容无转载 2015-06-01 11:07:36 · 684 阅读 · 0 评论 -
SQLite3的加密
SQLite3的加密函数说明sqlite3_key是输入密钥,如果数据库已加密必须先执行此函数并输入正确密钥才能进行操作,如果数据库没有加密,执行此函数后进行数据库操作反而会出现“此数据库已加密或不是一个数据库文件”的错误。int sqlite3_key( sqlite3 *db, const void *pKey, int nKey),db 是指定数据库,pKey 是密钥,nKey转载 2014-09-05 18:18:51 · 5380 阅读 · 0 评论 -
fmdb -> intForQuery
//開始使用建立的資料庫 //資料庫建在 /tmp 裡,如果沒有 tmp.db,應該會自己建一個 FMDatabase *db = [FMDatabase databaseWithPath:@"/tmp/tmp.db"]; if (![db open]) { //一定要 [db open] 喔!! 不然出的錯不好抓 NSLog(@"Could not转载 2014-11-13 19:59:09 · 1968 阅读 · 0 评论 -
sqlite3创建数据库--mac终端界面
例如,我们想在文档下的sqlite文件夹下创建数据库,我们需要先装载该目录。使用cd命令+文件夹目录完成任务 如下cd /Users/wer/Documents/sqlite2>创建数据库使用sqlite3 + 数据库名 可以打开数据库,我们同样也可以用该方法创建数据库例如,我们想创建名为test的数据库,需执行如下命令sqlite3 t转载 2014-11-19 15:07:36 · 5152 阅读 · 0 评论 -
MAC下终端sqlite3简单使用
最近iOS项目中用到了sqlite3,所以研究了下MAC下的sqlite3.好了,废话不多说,进入正题. 一.MAC下打开终端 我知道的有两种方式:1.点击"Launchpad"(就是桌面底部一个金属圆盘中间是个斜着的火箭) ----->进去之后有个"其他"这个选项,点击进入----->"终端";2.点击"Finder"---->边栏处"应用程序"-----转载 2014-11-19 14:49:54 · 53885 阅读 · 3 评论 -
SQL多表连接查询
本文主要列举两张和三张表来讲述多表连接查询。 新建两张表: 表1:student 截图如下: 表2:course 截图如下: (此时这样建表只是为了演示连接SQL语句,当然实际开发中我们不会这样建表,实际开发中这两个表会有自己不同的主键。) 一、外连接 外连接可分为本文主要列举两张和三张表来讲述多表连接查询。新建两张表:表1:student 截图如下:表2转载 2014-11-07 00:10:27 · 880 阅读 · 0 评论 -
SQLite数据升级数据迁移
SQLite数据升级数据迁移做Android应用,不可避免的会与SQLite打交道。随着应用的不断升级,原有的数据库结构可能已经不再适应新的功能,这时候,就需要对SQLite数据库的结构进行升级了。 SQLite提供了ALTER TABLE命令,允许用户重命名或添加新的字段到已有表中,但是不能从表中删除字段。并且只能在表的末尾添加字段,比如,为 Subscription添加两个字段:转载 2014-11-25 11:40:25 · 1656 阅读 · 0 评论 -
SQLite学习手册
SQLite学习手册 很有用的开源跨平台数据库,可以作为客户端的小型内存数据库使用,据说它有N多用户(Nokia's Symbian,Mozilla,Abobe,Google,阿里旺旺,飞信,Chrome,FireFox),记录下。 下文转自: http://www.cnblogs.com/stephen-liu74/archive/2012/03/09/2328转载 2014-12-02 10:13:48 · 1063 阅读 · 0 评论 -
ios开发FMDB导入SQLCipher加密数据库
程用得FMDB做数据库的操作,后期要对数据库做加密,这里有两种方法: 1.对数据库内容加密,存的时候加密,用得时候解密。 2.直接对数据库文件加密。 这里我选择了第二种,原因不细说,自己决定。 百度后,决定用SQLCipher,而且FMDB是支持SQLCipher的,官方配置说明地址 http://sqlcipher.ne转载 2015-06-18 15:52:19 · 2144 阅读 · 0 评论 -
ios开发FMDB导入SQLCipher加密数据库
工程用得FMDB做数据库的操作,后期要对数据库做加密,这里有两种方法:1.对数据库内容加密,存的时候加密,用得时候解密。2.直接对数据库文件加密。这里我选择了第二种,原因不细说,自己决定。百度后,决定用SQLCipher,而且FMDB是支持SQLCipher的,官方配置说明地址 http://sqlcipher.net/ios-tutorial/ ,然后转载 2015-06-18 15:57:32 · 2065 阅读 · 0 评论 -
SQLite Pragma语法
pragma:1.pragma auto_vacuum = 0|1 设置自动缩放文件2.PRAGMA cache_size = Number-of-pages;查询或修改SQLITE,一次存储在内存中的数据库文件页数。改变只是对当前会话有效,关闭数据库时。无效3.PRAGMA case_sensitive_like =0|1是否忽略大小写4.PRAGMA count_c转载 2015-06-01 11:21:17 · 3522 阅读 · 0 评论 -
sqlite获取表信息
iOS获取表信息原创 2015-06-01 12:08:39 · 1130 阅读 · 0 评论 -
ios 控制数据库的版本号
1.查询版本号PRAGMA user_version 1.设置版本号PRAGMA user_version = %d;- (uint32_t)userVersion { uint32_t r = 0; FMResultSet *rs = [selfexecuteQuery:@"pragma user_version"];原创 2015-06-01 12:14:47 · 2167 阅读 · 0 评论 -
sqlite3 多线程和锁 ,优化插入速度及性能优化
一、 是否支持多线程? SQLite官网上的“Is SQLite threadsafe?”这个问答。 简单来说,从3.3.1版本开始,它就是线程安全的了。而iOS的SQLite版本没有低于这个版本的,当然,你也可以自己编译最新版本。不过这个线程安全仍然是有限制的,在这篇《Is SQLite thread-safe?》里有详细的解释。另一篇重要的文档就是《SQLite转载 2018-01-29 11:54:00 · 2550 阅读 · 0 评论