数据库(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. 基于smarty+medoo手搭php简单的框架

    1.首先看一下搭建好的smarty目录(箭头位置是后新建的文件夹,也是框架结构的最终目录结构) 2.首先在根目录下新建index.php文件即入口文件,内容如下 <?phprequire_onc ...

  2. PHP正则表达式 验证电子邮件地址

    我们最经常遇到的验证,就是电子邮件地址验证.网站上常见.各种网页脚本也都常用“正则表达式”(regular expression)对我们输入的电子邮件地址进行验证,判断是否合法.有的还能分解出用户名和 ...

  3. 第 7 章 门面模式【Facade Pattern】

    以下内容出自:<<24种设计模式介绍与6大设计原则>> 好,我们继续讲课.大家都是高智商的人,都写过纸质的信件吧,比如给女朋友写情书什么的,写信的过程大家都还记得吧,先写信的内 ...

  4. phpStorm 配置关联php手册

    phpStorm 配置关联php手册 pasting php开发中我尝试过很多个编辑器,但用的最多的是phpStorm ,但一直因为英文太烂,很多phpStorm功能,都没用过.. 最近发现有些编辑器 ...

  5. mysql Partition(分区)初探

    mysql Partition(分区)初探   表数据量大的时候一般都考虑水平拆分,即所谓的sharding.不过mysql本身具有分区功能,可以实现一定程度 的水平切分.  mysql是具有MERG ...

  6. Spring MVC注解冲突

    SpringMVC+MyBatis - 7 Spring自动扫描注解类的冲突问题 http://www.blogjava.net/crazycy/archive/2014/07/12/415738.h ...

  7. HttpResponseCache 网络缓存使用

    Caches HTTP and HTTPS responses to the filesystem so they may be reused, saving time and bandwidth. ...

  8. paip.php eclipse output echo 乱码

    paip.php eclipse output echo 乱码 作者Attilax ,  EMAIL:1466519819@qq.com  来源:attilax的专栏 地址:http://blog.c ...

  9. Tomcat J2ee 发布步骤

    1.找到要发布的工程,并发布到本地tomcat下,测试完全没有问题,找到tomcat下webapps下 并找到该工程,进入该工程目录,全选添加到  drivingSchool.zip 或  drivi ...

  10. c语言中%p指针

    %p与指针对应,是输出指针的地址 如: char * p="abc"; ...... printf("The address %p is %s", p, p); ...