数据库(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的更多相关文章

  1. iOS中SQLite知识点总结2

    数据库(SQLite) 01-多表查询 格式:select 字段1,字段2,... from 表名1,表名2; 别名:select 别名1.字段1 as 字段别名1,别名2.字段2 as 字段别名2, ...

  2. iOS 中SQLite数据库操作

    在iOS中实现SQLite数据库的操作:1.导入框架(libsqlite3.0.tbd) 2.导入头文件<sqlite3.h> 3.实现数据的增删改查 实现简单 SQLite数据库操作 的 ...

  3. 关于iOS中SQLITE句柄的使用的细节

    1.设计思想:给SQLITE进行封装,利用定义的类别实现方法的简洁,以便达到低耦合效果 控制器代码: #import "ViewController.h" #import &quo ...

  4. iOS中sqlite版本号

    https://github.com/yapstudios/YapDatabase/wiki/SQLite-version-(bundled-with-OS) https://github.com/y ...

  5. ios 中sqlite的用法

    #import <sqlite3.h> @interface ViewController () { sqlite3 *_sqldb; } @end @implementation Vie ...

  6. 在IOS中使用DES算法对Sqlite数据库进行内容加密存储并读取解密

    在IOS中使用DES算法对Sqlite 数据库进行内容加密存储并读取解密 涉及知识点: 1.DES加密算法: 2.OC对Sqlite数据库的读写: 3.IOS APP文件存储的两种方式及读取方式. 以 ...

  7. iOS项目开发中的知识点与问题收集整理②(Part 二)

    1.点击UIButton 无法产生触摸事件    如果在UIImageView中添加了一个按钮,你会发现在默认情况下这个按钮是无法被点击的,需要设置UIImageView的userInteractio ...

  8. ios中常见数据存储方式以及SQLite常用的语句

    在iOS中,根据不同的需求对应的有多种数据存储方式: 1.NSUserdefaults  将数据存储到沙盒中(library),方便易用,但是只能存储系统提供的数据类型(plist),不能存储自定义的 ...

  9. iOS中关于KVC与KVO知识点

    iOS中关于KVC与KVO知识点 iOS中关于KVC与KVO知识点  一.简介 KVC/KVO是观察者模式的一种实现,在Cocoa中是以被万物之源NSObject类实现的NSKeyValueCodin ...

随机推荐

  1. yii2 gii页面404和debug调试栏无法显示解决方法

    在debug和gii配置项中加一项: 'allowedIPs' => ['127.0.0.1', '::1', '*.*.*.*']即可 注:因为yii默认只让127.0.0.1访问

  2. uublog在线测试demo

    http://demo.uublog.me/ 后台 http://demo.uublog.me/admin/ 用户名/密码:admin/admin

  3. java MYSQL做分页

    MySql中查询语句实现分页功能 语句: select * from 表名 where 条件 limit 要找第几页,每页多少行; import java.util.*; import java.sq ...

  4. No Hibernate Session bound to thread, and configuration does not allow creat

    No Hibernate Session bound to thread, and configuration does not allow creat 今天遇到这么一个错误,在网上差了很多都没有能解 ...

  5. Java SE/ME/EE的概念介绍

    转自 Java SE/ME/EE的概念介绍 多数编程语言都有预选编译好的类库以支持各种特定的功能,在Java中,类库以包(package)的形式提供,不同版本的Java提供不同的包,以面向特定的应用. ...

  6. 找到个好的讲PYTHON FILE IO的文档,收藏

    现在我感觉快入门了哈, 这两天,可以用PYTHON写一点自己想要实现的东东了. 但文件,IO,编码,邮件,始终有点续不完全. 这个文档,我看行.. http://www.dabeaz.com/pyth ...

  7. const char * 的终结贴(看完无需其他任何文章,从此不再蛋疼)

    我之前也是以为我对const char *ptr 这种形式的写法是掌握了的,真的,不就是说一个指针是不可改变的吗? 那么问题就来了,到底是ptr指针本身不能改变,还是ptr执行的值不能改变呢? 从网上 ...

  8. 【HDU 5233】Tree chain problem (树形DP+树剖+线段树|树状数组)最大权不相交树链集

    [题目] Tree chain problem Problem Description Coco has a tree, whose vertices are conveniently labeled ...

  9. 【poj3070】矩阵乘法求斐波那契数列

    [题目描述] 我们知道斐波那契数列0 1 1 2 3 5 8 13…… 数列中的第i位为第i-1位和第i-2位的和(规定第0位为0,第一位为1). 求斐波那契数列中的第n位mod 10000的值. [ ...

  10. 猜测:信号槽的本质是使用Windows的自定义消息来实现的

    在不断执行: void MyTool::DeleteAllFiles(){ for (i = 0; i <= n - 1; i++) { // do something }}在for循环没有执行 ...