iOS中SQLite知识点总结1
数据库(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知识点总结2
数据库(SQLite) 01-多表查询 格式:select 字段1,字段2,... from 表名1,表名2; 别名:select 别名1.字段1 as 字段别名1,别名2.字段2 as 字段别名2, ...
- iOS 中SQLite数据库操作
在iOS中实现SQLite数据库的操作:1.导入框架(libsqlite3.0.tbd) 2.导入头文件<sqlite3.h> 3.实现数据的增删改查 实现简单 SQLite数据库操作 的 ...
- 关于iOS中SQLITE句柄的使用的细节
1.设计思想:给SQLITE进行封装,利用定义的类别实现方法的简洁,以便达到低耦合效果 控制器代码: #import "ViewController.h" #import &quo ...
- iOS中sqlite版本号
https://github.com/yapstudios/YapDatabase/wiki/SQLite-version-(bundled-with-OS) https://github.com/y ...
- ios 中sqlite的用法
#import <sqlite3.h> @interface ViewController () { sqlite3 *_sqldb; } @end @implementation Vie ...
- 在IOS中使用DES算法对Sqlite数据库进行内容加密存储并读取解密
在IOS中使用DES算法对Sqlite 数据库进行内容加密存储并读取解密 涉及知识点: 1.DES加密算法: 2.OC对Sqlite数据库的读写: 3.IOS APP文件存储的两种方式及读取方式. 以 ...
- iOS项目开发中的知识点与问题收集整理②(Part 二)
1.点击UIButton 无法产生触摸事件 如果在UIImageView中添加了一个按钮,你会发现在默认情况下这个按钮是无法被点击的,需要设置UIImageView的userInteractio ...
- ios中常见数据存储方式以及SQLite常用的语句
在iOS中,根据不同的需求对应的有多种数据存储方式: 1.NSUserdefaults 将数据存储到沙盒中(library),方便易用,但是只能存储系统提供的数据类型(plist),不能存储自定义的 ...
- iOS中关于KVC与KVO知识点
iOS中关于KVC与KVO知识点 iOS中关于KVC与KVO知识点 一.简介 KVC/KVO是观察者模式的一种实现,在Cocoa中是以被万物之源NSObject类实现的NSKeyValueCodin ...
随机推荐
- 简易ORM(基于注解)
这是从我们现有项目做的一定的改进准备做成IDE插件 类似getter和setter的生成 1.定义实体类 通过注解说明其表名和字段名(SOURCE类型的注解 不需要运行时使用)@TableName(& ...
- document.getElementById获取不到标签值
var apliay=document.getElementById('apliay_ok'); 代码里指定有id="apliay_ok"的标签,但是获取不到,折腾半天原来是因为在 ...
- mysqli_fetch_assoc与mysqli_result::fetch_assoc区别
mysqli_fetch_assoc与mysqli_result::fetch_assoc区别
- 在同一台机器上让Microsoft SQL Server 2000/ SQL2005/ SQL2008共存
可能很多朋友都遇到想同时在自己的机器上运行Microsoft SQL Server 2000以及Microsoft SQL Server 2005和Microsoft SQL Server 2008. ...
- Quartz2D学习笔记(1)
********************************** 简介 *************************************** Quartz2D是⼀个二维绘图引擎,同时支持 ...
- uboot的mkconfig分析
uboot的mkconfig是一个shell脚本.对于笔者这种Linux学习初学者,不太可能认真的把shell脚本学习一遍.但是,倘若不能理解mkconfig的含义,又很难从整体的理解uboot(我认 ...
- 关于How,刷墙和亲戚
对于需求而言,最宏观的概念是六字诀: Who->Where->Which->How->End->Effect:谁(Who)在什么地方(Where),对那个对象(Which ...
- Http 状态码详解
状态码 含义 100 客户端应当继续发送请求.这个临时响应是用来通知客户端它的部分请求已经被服务器接收,且仍未被拒绝.客户端应当继续发送请求的剩余部分,或者如果请求已经完成,忽略这个响应.服务器必须在 ...
- ORACLE 常用系统函数
1. 字符类 1.1 ASCII(c ) 函数 和CHR( i ) ASCII 返回一个字符的ASCii码,其中c表示一个字符;CHR 返回ascii码值i 所对应的字符 . 如: S ...
- 事件tou
#define EV_TIMER_RESOLUTION 1 /* 1 msec */ #define EV_READ_EVENT EPOLLIN #define EV_WRITE_EVENT EPOL ...