本文是作者所创,转载请注明出处,如果你在阅读的时候发现问题欢迎一起讨论。本文会不断更新。
对于iOS应用,我相信有很多人还选择使用sqlite作为数据的持久化操作,但是对于一个还没有接触过sqlite的同学难免会有点不知所措,我记得我曾经刚接触sqlite的时候,花费了不少时间。那是的我不知道如何连变查询,如何创建表,如何使用聚合函数等等。下面这篇文章希望能帮助你少走一些弯路。
如果你在创建表的时候,需要指定某个字段的数据类型,下面是一些基本的数据类型,当然这里我没有一一列出,只列出了常用的一些。
当你学习使用sqlite的时候,直接在终端输入(这里以mac为例):sqlite3 database_name,按回车键,比如:<code>sqlite3 wsy.db</code>,不过在使用的过程中有一些技巧帮你更好的查看数据,比如找到创建的所有表,创建表所使用的SQL语句,显示表中的数据的时候连同列名一块显示,等等。
会使用终端创建数据库后,你可以直接创建表,当然这里只是为了演示,在真正的开发过程中,可以使用sqlite自己分装一系列操作数据的方法。如果为了省时省力,可以直接使用FMDB。根据实际情况,创建表的时候需要注意哪些字段是主键,哪些字段需要添加约束,表之间如何关联。
创建数据库表的时候可以为表添加约束,这样可以避免非法数据插入到数据库中
-DEFAULT
: 提供一列的默认值;
-UNIQUE
: 确保某一列所有值不同(唯一);
-PRIMARY KEY
: 主键,唯一标识数据库表中的各行记录;
-CHECK
: CHECK约束,确保一列中的所有值满足一定条件。
- 打开终端(以mac为例),输入:sqlite3 wsy.db,点击回车
建好表以后就可以想表中插入数据,当然可以一次性插入一行或者多行数据。
数据查询在数据库操作中起到了很大的作用,巧妙的使用SQL语句会减少很多的数据处理操作。SELECT命令用一系列子句将很多关系操作组合到一起,每个子句代表一种特定的关系操作。
以上是所有的准备工作,下表开始使用连表查询:
- 会找到所有与左表对应的数据,如果没有将为空,例如:task=1236没有file,但结果也返回了task=1236的数据
注意表的主键是不能修改的;
索引是一种用来在某种条件下加速查询的结构。但是创建索引后,数据表的大小会增大,而且可能会降低insert、update的操作速度,因为修改表的同时,数据库也必须修改对应的索引。所有创建索引的时候,要选择执行查询比较频繁的字段。
视图也叫虚拟表,是从基本表中动态产生的数据。
事务定义了一组SQL命令的边界,这组命令或者作为一个整体被全部执行,或者都不执行。比如银行转账,A想B转账500,A账户减少500,B账号多500,如果在转账的过程中电力中断或者其他意外情况发生,那么必须中断此次操作。
数据库中表的行必须在某种方式上是唯一的,这就是主键的功能。实体完整性基本保持表中的数据是可寻址的,如果找不到数据,那还有什么意义?
-
当你定义一个表的时候,总会指定一个主键,不管你有没有指定,都会有一个rowid来充当主键。你可以使用SQL语句找到它:SELECT rowid FROM student;
-
插入或更新数据时不能为NULL
-
允许定义表达式来验证要插入或者更新的字段值是否满足表达式,如果不满足讲不能插入。
由于项目对数据库采取了加密,每次出现bug的时候总想到数据库中找一下数据是否异常,可使用sqlite工具的时候必须下载包,然后找到数据库,这时打开数据库,发现数据库是加密的,即使输入正确的密码也不能查看数据库中的数据,每次感觉很头疼。最后实在没办法,自己写了一个查看数据库的小工具(
),写的很粗糙,不过一直使用,感觉还行。