zoukankan      html  css  js  c++  java
  • 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
    • 事务:保证了操作的原子性,能够避免并发所带来的问题

    • 在事务提交之前,不会修改数据库中的数据

    • 如果事务提交成功才会修改数据库中的数据

    • 如果回滚事务,则不会修改数据库中的任何数据

  • 相关阅读:
    pageload 重新生成动态控件的問題
    管理員維護完整代碼如下:
    Control 'GridView1' of type 'GridView' must be placed inside a form tag with runat=server
    sqlserver兩種查詢方式效率比較
    管理員修改頁面代碼
    SQL2008卸载 检查是否重启错误
    安装Java环境
    asp.net cookie读写
    绘制几何图形——使用android.graphics类
    正则获取图片路径
  • 原文地址:https://www.cnblogs.com/coderwjq/p/6208696.html
Copyright © 2011-2022 走看看