sqlite

数据库的存储以表为单位

  1. 表由多个字段(列, 属性,行)组成
  2. 表里面的每一行数据成为"记录"
  3. iOS中使用数据库之前要先添加库文件(libsqlite3.tbd), 负责会报错
  4. 添加头文件: #import<sqlite3.h>


想要在程序运行过程中操作数据库中的数据, 就要使用SQL语句增删改查(CRUD),SQL语句的特点:

  1. 不区分大小写.
  2. 每条语句都以;号结尾
  3. 不能使用关键字来命名表,字段
  4. 除过查询以外的所有操作都成为更新

  5. create 和 drop针对于创表和删表 - 针对于表

  6. insert,update,delete - 针对于表中的数据
  7. select 用户查询表中的数据
  8. 实际上sqlite是无类型的,所谓的类型, 是给我们自己看的


基本语句

CREATE TABLE if not EXISTS t_student (id integer, name text, age integer);

INSERT into t_student (id, name, age) VALUES (1, 'pj', 20);

UPDATE t_student set name = 20, id = 10;

DELETE from t_student

条件语句

update t_student set age = 20 where id = 10;

delete from t_student WHERE id = 100;

update t_student set id = age WHERE id = 9; //把id为9的字段的年龄赋值给id.

/ 数据查询 /

SELECT id, name, age from t_student;

SELECT * from t_student where age < 30;

SELECT id stu_id, name, age from t_student; // id stu_id和id as stu_id 是一样的, 中间的as可以省略

SELECT * from t_student stu WHERE stu.age < 25;//起别名 在多张表中用的比较多

SELECT count(*) FROM t_student where age < 35; // 显示消息的个数

SELECT * from t_student ORDER by age asc // 升序(默认) desc 降序

SELECT * from t_student where age < 24 order by age asc, id desc; // 显示年龄小于24的所有信息, 这些信息 按照年龄的升序排列, 年龄一样的情况下按照id的降序排列

SELECT * from t_student limit 10, 20; //跳过前面的10条记录, 取20条

SELECT * from t_student limit 0, 10; //取最前面的10条

SELECT * from t_student limit 7; //取最前面的7条

CREATE TABLE IF not EXISTS s_tu(id integer unique, name text not null, age integer default 20);// id必须唯一, name不能为空, 年龄默认为20 CREATE TABLE IF not EXISTS s_tu(id integer primary key autoincrement, name text);// 申明主键 INSERT into t_stu (id, name, age) VALUES (1, 'ww', 30);

主键约束

  1. 每张表都有一个唯一的主键, 用来标识记录的唯一性,
  2. 主键可以是一个字段或者多个字段

/* * 设计一个班级和学生的信息的数据库 * 设计2张表: t_class, t_student * t_class: id, name, open_time * t_student: id, name * 设置表(t_class和t_student)的关联 在t_student中扩展字段 class_id(外键) /

CREATE TABLE if not EXISTS t_class(id integer primary key autoincrement, name text not null unique);

// constraint fk_student_class foreign key class_id references t_class(id); // 生成一个约束, 约束的名称叫fk_student_class, 这个约束是一个外键约束, 我的外键约束class_id引用着t_class中的id // 添加了外键约束之后, class_id 的值 只能从 t_class中的id字段 CREATE TABLE if not EXISTS t_student(id integer primary key autoincrement, name text not null unique, class_id integer, constraint fk_student_class foreign key class_id references t_class(id);

SELECT * FROM t_food WHERE food_type_id = (SELECT id FROM t_foot_type where name = '粤菜') // 子查询

SELECT * FROM t_food food, t_food_type food_type where food.food_type_id = food_type.id and food_type.name = '粤菜';//联合查询 SELECT food.name, food_type.name FROM t_food food, t_food_type food_type where food.food_type_id = food_type.id and food_type.name = '粤菜';

FMDB

FMDB是IOS平台的SQLite数据库框架

FMDB是以OC的方式封装了SQLite的C语言API

FMDB提供了多线程安全的数据库操作方法,有效的防止了数据混乱

FMDatabase:代表一个数据库对象

FMResultSet:代码一个语句执行完成的结果集

FMDatabaseQueue:如果你在多个线程执行一个查询或更新语句, 那就要使用这个, 因为他是线程安全的

事务

事务的处理有三种:1. 开始, 结束, 回滚三种. beginTransaction 开启事务. commit 提交事务, rollback 回滚.

block 事务, 一句话搞定 beginTransaction rollback commit [queue inTransaction:^(FMDatabase db,BOOL rollback) {

}];

1. 批量更新数据: 节省时间, 提高效率 

  1. 数据处理完之后, 一次性操作数据库. 如果不使用事务, 每一条数据都操作一次数据库. 比如: A工厂给我们公司加工2000套工作服
    1. 不使用事务, 生产一套, 给我们送过来再生产第二套.
    2. 使用事务, 2000套生产完之后, 一次性送过来.

1. 数据安全:回滚 

  1. 比如买书操作. 我们刷卡, 机器扣费, 操作数据库. 这个过程中任意一个环节出错, 均视为操作失败. 这个时候我们要手动调用rollback进行回滚. 回滚之后数据库里面就没有我们这次<刷卡, 机器扣费, 操作数据库这个操作了>.


详见https://github.com/zhoupengju/PJSQLite


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值