1. 首先简单说一下iOS中数据存储的几种基本方式:
- plist:用来存储基本类型(NSString、NSArray、NSDictionary)等;
- NSUserDefaults:用来进行一些Preference(偏好设置),其中包括用户名、用户密码、自动登录等;
- NSCoding:归档(NSKeyedArchiver)、截档(NSKeyedUnarchiver);
- SQLite、CoreData(用面向对象的思想封装了SQLite语句)。
- 关系型数据库(主流)
- 对象型数据库
SQLite常用的关键字有:select、update、create、delete、insert、where、as、drop、order、by、group、from等。
4. SQLite语句分为三大类
- DDL语句:数据定义语句
创建表:create table if not exists 表明(主键,字段名 字段类型,.....);删 表:drop table if exists 表名
- DML语句:数据操作语句
增:insert into 表名(字段1,字段2,...) values(字段1的值,字段2的值,...);改:update 表名 set 字段1 = 字段1的值, 字段2 = 字段2的值, ...;删:delete from 表名查:select 字段or“*” from 表名
- DQL语句:数据查询语句(有条件约束进行增删改查操作)
主键是一张表中唯一的一个字段,且保证每一条记录的数据主键都是唯一的(不相同)SQLite语句设置主键:create table if not exists 表名 (字段名 字段类型 primary key antoincremant , 字段名1 字段类型1,......) ;
6. 别名(字段和表都可以起别名)
格式:select 字段名1 别名1 ,字段名2 别名2 from 表名 别名;
select 字段名1 as 别名1 ,字段名2 as 别名2 from 表名 as 别名;
select 别名.字段名1 ,别名.字段名2 from 表名 别名;
7. 数据库个数查询(计算某一条件下的数据个数)
f() = count(字段名)
8. 数据库排序(以某一字段为条件进行排序)
格式: select * from 表名 where 字段名 条件 order by 字段名 asc(升序)or desc(降序)
eg: select * from t_student where score >= 60 order by score asc; (按升序排列学生及格成绩)
9. limit(限制)
作用:可以精确的控制查询结果的数量,可以进行分页
格式:select * from 表名 limit 数值1, 数值2 ;
eg: select * from t_student limit 4, 8;
可以理解为:跳过前四条数据,查询后8条数据
分析1:要求每页仅仅显示5条数据
第一页:limit 0,5;
第二页:limit 5,5;
第三页:limit 10,5;
.......
第n页:limit (n-1)*5, 5;
分析2:select * from t_student limit 7;
相当于:select * from t_student limit 0,7;
表示最前面7条数据
10. 约束
(1)简单约束:建表时可以给一些字段设置约束条件,常见的约束有
11. 表链接查询not null:规定字段的值不能为空
unique:规定字段的值必须唯一
default:规定字段的默认值
(2)主键:
上文有介绍,这里不介绍了
(3)外键约束:意指当前表的某一字段通过另一张表的主键字段进行约束(通常情况下)
外键约束的作用:可以建立表与表之间的联系
格式:create table if not exists 表名 ( id integer primary key autoincrement, 字段名 字段类型, constraint 约束名 foreign key 约束字段 references 引用表(字段名) )
eg:create table if not exists t_class ( id integer primary key antoincremant , class_name text);
create table if not exists t_student (id integer primary key auto increment, student_name text, class_id integer, constraint fk_t_student_class_id_t_class_id foreign key class_id references t_class(id));
表链接查询指的是表的个数至少大于两个,进行表链接之间的查询
根据10中例子 查询班级名字为冲刺班学生的所有名字
方法一:表链接查询
select s.student_name from t_class c , t_student s where c.id = s.class_id and c.class_name = '冲刺班' ;
方法二:嵌套查询
select s.student_name from t_student s where s.class_id = (select c.id from t_class c where c.class_name = '冲刺班');
内连接:显示两张表都有的数据;
格式:select * from t_class c inner join t_student s on c.id = s.class_id;
外链接:只能保证左边数据的完整
格式:select * from t_class c left outer join t_student on c.id = s.class_id;