iOS中SQLite知识点总结1

2023-06-02,,

数据库(SQLite)

01-数据库简介

1.什么是数据库

数据库(Database)是按照数据结构来组织,存储和管理数据的仓库

2.数据库的分类

关系型数据库(主流)

PC端:Oracle/MySQL/SQL Server/Access/DB2/Sybase
嵌入式/移动端:SQLite
对象型数据库

3.iOS中数据存储的方式

plist(NSArray/NSDictionary)

特点:只能存储系统自带的数据类型,比如NSDictionary/NSArray等等.自定义的对象无法存储.
preference(偏好设置/NSUserDefaults)
特点:本质就是一个plist文件,也是只能存储系统自带的数据类型,自定义的对象无法存储
NSCoding(NSKeyedArchiver/NSKeyedUnarchiver)
特点:可以存储自己定义的数据类型,但是都是一次性的全数据操作
SQLite3
特点:存储一些大批量的数据,排序,统计等操作
Core Data
特点:对SQLite3的一层面向对象的包装,本质还是要转换成为对应的SQL语句去执行
钥匙串
APP之间数据共享
系统级别的加密,安全性高
当APP被删除时,存储的数据依然存在

4.什么是SQLite

SQLite是一款轻型的嵌入式数据库
它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了
它的处理速度比MySQL,PostgreSQL这两款注明的数据库都还快

5.如何存储数据到数据库

数据库库的存储结构和excel很像,以table为单位
数据库存储数据的步骤:
新建数据库文件
新建一张表table
添加多个字段(列,属性)
添加多行记录(每行存放多个字段对应的值)

6.通过Navicat操作数据库

Navicat是一套适用于MySQL,SQLite等多个数据库系统的图形化数据库管理,报告以及监控的工具.
具有高性能的,商业智能的,强大的备份功能.
通过该软件可以创建/删除表,查询/删除/修改记录操作的SQL语句
表格组成:行(记录)和列(属性)
属性类型:
blob:二进制类型
integer:整型
real:浮点型
text:文本类型
null:空
主键(Primary Key,PK):用来唯一的标识某一条记录
主键可以是一个字段或多个字段
主键的设计原则:
主键应当是对用户没有意义的
永远不要更新主键
主键不应包含动态变化的数据
主键应当由计算机自动生成

02-SQL语言简介

1.什么是SQL

SQL(Structured Query Language):结构化查询语言
SQL是一种对关系型数据库中的数据进行定义和操作的语言
SQL语言简洁,语法简单,好学好用
使用SQL语言编写出来的句子/代码,就是SQL语句
在程序运行过程中,要想操作(CRUD)数据库中的数据,必须使用SQL语句
C-Create,R-Retrive,U-Update,D-Delete

2.SQL语句的特点

不区分大小写
每条语句必须以分号结尾

3.SQL语句的常用关键字

select,insert,update,delete,from,create,where,desc,order,by,group,table,alter,view,index等

4.SQL语句的种类

数据定义语句(DDL:Data Definition Language)

包括create,drop,alert等操作
在数据库中创建新表或删除表
数据操作语句(DML:Data Manipulation Language)
包括insert,update,delete等操作
上面3中操作分别用于添加,修改,删除表中的数据
数据查询语句(DQL:Data Query Language)
可以用于查询获得表中的数据
关键字select是DQL,也是所有SQL语句中用的最多的操作
其他DQL常用的关键字有where,order by,group by和having

5.DDL语句

创建表

格式:create table 表名 (字段名1 字段类型1,字段名2 字段类型2,...)
实际上SQLite是无类型的
就算声明为integer类型,还是能存储字符串文本(主键除外)
建表时声明什么类型或者不声明类型都可以,也就是意味着字段类型可以省略
为了保持良好的编程规范,方便程序员之间的交流,编写建表语句的时候最好加上每个字段的具体类型
语句优化:创建表格时,最好加个表格是否已经存在的判断,可以防止语句多次执行时发生错误.
create table if not exists table_name
删除表
格式:drop table 表名;
优化:删除表格时,最好加个表格是否已经存在的判断,可以防止语句多次执行时发生错误
drop table if exists table_name
修改表
注意:SQLite里面只能实现alter table的部分功能,不能删除一列,不能修改一个已经存在的列名
修改表名:alter table 旧表名 rename to 新表名
新增属性:alter table 表名 add column 列名 数据类型 限定符

6.约束

简单约束

not null:字段的值不能为空
unique:字段的值必须唯一
default:指定字段的默认值
主键约束
作用:保证每条记录的唯一性,每张表必须有一个主键,用来标识记录的唯一性
主键可以使一个字段或多个字段
主键的声明:在创建表的时候用primary key声明主键
只要声明为primary key就说明是一个主键字段
主键字段默认就包含了not null和unique两个约束
如果想让主键自动增长(必须是integer类型),应该增加autoincrement

7.DML语句

插入数据(insert)

insert into 表名 (字段1,字段2,...) values (字段1的值,字段2的值,...);
注意:数据库中字符串内容应该用单引号括住
更新数据(update)
update 表名 set 字段1 = 字段1的值, 字段2 = 字段2的值, ...;
删除数据(delete)
delete from 表名;

8.条件语句

作用:如果只想更新或者删除某些固定的记录,那就必须在DML语句后加上一些条件

9.DQL语句

10.查询相关语句

统计

count(X)/avg(X)/sum(X)/max(X)/min(X)
排序
查询出来的结果可以用order by进行排序
默认是按照升序排列(由小到大),asc(升序)
也可以按照降序排列(由大到小),desc(降序)
也可以用多个字段进行排序:
select * from t_student order by age asc, height desc;
先按照年龄排序(升序),年龄相等就按照身高排序(降序)
分页
使用limit可以精确地控制查询结果的数量,比如每次只查询10条数据
格式:select * from 表名 limit 数值1, 数值2;
示例:select * from t_student limit 4, 8;
可以理解为:跳过最前面4条记录,然后取8条记录
limit通常来做分页查询,比如每页固定显示5条记录,那么第n页应该这样取:limit 5*(n-1), 5
特殊案例:
select * from t_student limit 7;
相当于:select * from t_student limit 0, 7;
表示取最前面的7条记录

swift中使用sqlite3

导入sqlite3的动态链接库

由于SQLite3使用c语言实现,在swift中需要使用桥接
桥接时,随便创建一个oc的文件,然后删除创建的文件,保留桥接的.h文件
看是否桥接成功,就编译项目,然后敲代码sqlite3看是否有提示

数据库插入大批量数据的优化

使用预编译语句
手动开启和提交事务(最终解决方案)
begin transaction
commit transaction
事务:保证了操作的原子性,能够避免并发所带来的问题
在事务提交之前,不会修改数据库中的数据
如果事务提交成功才会修改数据库中的数据
如果回滚事务,则不会修改数据库中的任何数据

iOS中SQLite知识点总结1的相关教程结束。

《iOS中SQLite知识点总结1.doc》

下载本文的Word格式文档,以方便收藏与打印。