SQLite 和 SQL
在移动项目开发中*(这里特指iOS
开发)*,通常都会接触到各种数据。对于少量、简单的数据,我们可以用归档、偏好设置或者pilst存储。但是如果遇到了大量的、复杂的数据,前面的几种方法就不太适合了。如果偏要用也不是不可以,但是会或多或少的造成性能的问题。对于复杂数据,最好使用数据库来存储。在移动项目开发中通常使用嵌入式数据库,因为这种数据库轻量级、效率高。
在介绍SQLite之前,先总结一下iOS常用的几种数据存储方式:
- Plist
- Perference
- NSCoding
- SQLite3
- Core Data
SQLite
SQLite
是一款轻量级的嵌入式数据库,Android
和iOS
开发使用的基本都是SQLite
数据库。它占用的资源少*(通常只需要几百K的内存),处理速度快(比MySQL
、PostgreSQL
这两款著名的数据库都还快)*。SQLite3
是SQLite的第三个版本,也是目前使用的比较多的一个版本。
我们该如何使用呢?
可以下载一个Navcat Premium
,软件图标很精致,是我喜欢的风格。这个软件是收费的,不过在中国嘛…你们都懂的。个人提倡使用正版软件,毕竟都是开发者,互相尊重劳动成果嘛。
软件安装完成之后,新建一个SQLite连接,填写连接名称,选择类型(新建SQLite3
),填写数据库文件的名称以及存放路径,最后点击确定,一个数据库连接就搞好了。然后就可以进行数据库相关的操作了。
SQL
SQL(Structured Query Language)结构化查询语言。SQL是一种对关系型数据库中的数据进行定义和操作的语言,它语法简单、好学好用。
使用SQL语言所编写的代码串就是SQL语句,在程序运行过程中,想要实现数据的增删改查,必须使用SQL语句。SQL语句不区分大小写,(在Navcat Premium
中关键字会有智能提示,很方便),每条语句必须都要以分号;
结尾。
SQL语句的种类
-
DDL:Data Definition Language(数据定义语句)
- 包括CREAT和DROP等操作。
-
DML:Data Definition Language(数据操作语句)
- 包括INSERT、UPDATE、DELETE等操作。
-
DQL:Data Definition Language(数据查询语句)
- 包括SELECT操作
- WHERE、ORDER BY、GROUP BY和HAVING等条件。
基本操作
在介绍基本操作之前,我们先了解一下SQLite中的几种字段。
SQLite字段:
- INTEGER 整型
- REAL 浮点型
- TEXT 字符串
- BLOB 二进制数据
实际上SQLite是无类型的,即使声明了字段类型,也可以存储其他类型的数据。
为了保持良好的编程规范、方便开发人员之间的交流,建表的时候最好给每个加上字段类型。
-
建表
- CREATE TABLE 表名(字段1 类型 其他条件*(E.g.主键约束、非空约束等)*,字段2 类型 …,…);
- CREATE TABLE IF NOT EXISTS 表名(……);
-
删表
- DROP TABLE 表名;
- DROP TABLE IF EXISTS 表名;
-
插入数据
- INSERT INTO 表名(字段1,字段2,…) VALUES(值1,值2,…);
如果值是字符串,要用单引号''括住。
-
更新数据
- UPDATE 表名 SET 字段1 = 值, 字段2 = 值, … ;
-
删除数据
- DELETE FROM 表名;
-
条件语句
- WHERE 字段 = 某值;
- WHERE 字段 IS 某值;
- WHERE 字段 != 某值;
- WHERE 字段 IS NOT 某值;
- WHERE 字段1 > 某值 AND 字段2 > 某值;
- WHERE 字段1 = 某值 OR 字段2 = 某值;
E.g. DELETE FROM 表名称 WHERE 字段名 = 某值 AND 字段名 = 某值;
-
查询语句
- SELECT * FROM 表名;//查询所有字段
- SELECT 字段1,字段2 FROM 表名;//查询指定字段
-
别名
- SELECT 字段1 别名1,字段2 别名2 FROM 表名 别名;
- SELECT 字段1 AS 别名1,字段2 AS 别名2 FROM 表名 AS 别名;
- SELECT 别名.字段1,别名.字段2 FROM 表名 别名;//可以用点语法访问指定表中的字段
-
计算记录数量
- SELECT COUNT(字段) FROM 表名;
- SELECT COUNT(*) FROM 表名;
-
排序
- SELECT * FROM 表名 ORDER BY 字段;
- SELECT * FROM 表名 ORDER BY 字段 ASC;//升序,默认;
- SELECT * FROM 表名 ORDER BY 字段 DESC;//降序
- SELECT * FROM 表名 ORDER BY 字段 ASC, 字段2 DESC;//先按字段1排序,字段1相等再按字段2排序
-
LIMIT
- SELECT * FROM 表名 LIMIT 数值1,数值2;
约束
-
简单约束
建表时可以给特定的字段设置一些约束条件,以满足需求,常见的约束有:
- NOT NULL
- UNIQUE
- DEFAULT
- AUTOINCREMENT
-
主键约束
-
为了保证每一条记录的唯一性,便于管理,增加了主键约束。用主键来标识记录的唯一性。
-
用PRIMARY KEY来标识主键,主键可以是一个或者多个字段。
-
主键默认包含了NOT NULL和UNIQUE两个约束。
-
如果想让主键自动增长,主键的字段类型必须是INTEGER类型,且应增加AUTOINCREMENT约束。
CREATE TABLE 表名(字段 INTEGER PRIMARY KEY AUTOINCREMENT,字段2 …);
-
-
外键约束
- 如果有两张或者多张表,且表与表之间有联系,就要用到外键约束。
- 外键约束的一般情况是:一张表的某个字段,引用着另一张表的主键字段。
CREAT TABLE 表名(字段1 INTEGER PRIMARY KEY AUTOINCREMENT,字段2 ,CONSTRAINT 外键名称 FOREIGN KEY (字段2) REFERENCE 另一张表(主键字段));
-
表连接查询
所谓表连接查询,就是需要联合多张表才能查到想要的所有数据的查询。
- 内连接:INNER JOIN 或 JOIN
- 左外连接: LEFT OUTER JOIN
E.g. SELECT 别名1.字段1 ,别名1.字段2 FROM 表1 别名1,表2 别名2 WHERE 别名1.字段 = 别名2.主键 AND 别名.字段 = 'xxx';
小结
以上就是我在学习SQLite过程中总结以及汇总的一些经验,这些只是冰山一角。数据库是一个很复杂很神奇的技术,有待我们去深入发掘。