IOS SQLLite操作(一)
iOS应用数据存取的常用方式
•XML属性列表 —— PList
•NSKeyedArchiver 归档
•Preference(偏好设置)
•SQLite3
•Core Data
DDL语句
•创表
CREATE TABLE 表名 (字段名1 字段类型1, 字段名2 字段类型2, …);
CREATE TABLE if not exists 表名 (字段名1 字段类型1, 字段名2 字段类型2, …);
create table t_person (id integer, name text, age inetger);
•删表
drop table 表名;
drop table t_person;
字段类型
•SQLite将数据值的存储划分为以下几种存储类型:
•NULL: 表示该值为NULL值
•INTEGER: 无符号整型值
•REAL: 浮点值
•TEXT: 文本字符串
•BLOB: 二进制数据(比如文件)
•实际上SQLite是无类型的,建表时声明或不声明类型都可以,也就意味着创表语句可以这么写:
create table t_student(name, age);
•注意:为了保持良好的编程规范,方便程序员之间的交流,编写建表语句的时候最好加上每个字段的具体类型
DML语句
•插入数据(insert)
insert into 表名(字段1, 字段2, …) values(字段1的值, 字段2的值, …);
insert into t_person(name, age) values(‘mj’, 10);
•注意:数据库中的字符串内容应该用单引号’括住
•更新数据(update)
update 表名 set 字段1 = 字段1的值, 字段2 = 字段2的值, … ;
update t_person set name = ‘jack’, age = 20;
•注意:这里会将t_person表中所有记录的name都改为jack,age都改为20
•删除数据(delete)
delete from 表名;
delete from t_person;
•注意:这里会将t_person表中所有记录都删掉
条件语句
•如果只想更新或者删除某些固定的记录,那就必须在DML语句后加上一些条件
•条件语句的格式如下:
where 字段 = 某个值 and 字段 > 某个值; // and相当于 &&
where 字段 = 某个值 or 字段 = 某个值; // or相当于 ||
•实例
•将年龄大于10并且姓名不等于jack的记录年龄都改为5
update t_person set age = 5 where age > 10 and name != ‘jack’;
•删除年龄小于等于10或者年龄大于30的记录
delete from t_person where age <= 10 or age > 30;
DQL语句
•DQL语句就是查询语句,格式如下:
select 字段1, 字段2, … from 表名;
select name, age from t_peron;
•如果想查询所有的字段可以用:
select * from 表名;
select * from t_person;
•也可以添加条件语句
select * from t_person where age > 10;
•计算记录的数量可以用count(字段)或者count(*)
select count(*) from t_person;
select count(age) from t_person where height < 1.66;
排序
•查询出来的结果可以用order by进行排序
select * from t_person order by 字段;
select * from t_person order by age;
•默认是按照升序排序(由小到大),也可以变为降序(由大到小)
select * from t_person order by age desc; // 降序
select * from t_person order by age asc; // 升序(默认)
•也可以用多个字段进行排序
select * from t_person order by age asc,height desc;
先按照年龄排序(升序),年龄相等就按照身高排序(降序)
限制查询数量
select * from 表名 limit 数值1, 数值2;
select * from t_person limit 4, 8;
•上面的语句,可以这么理解:
•跳过最前面4条语句,然后取8条记录
•limit常用来做分页查询,比如每页固定显示6条数据,那么每一页应该这样取数据:
第1页:limit 0, 6
第2页:limit 6, 6
第3页:limit 12, 6
…
第n页:limit 6*(n-1), 6
select * from t_person limit 7;
•表示取最前面的7条记录
简单约束
•建表的时候可以给特定的字段 设置 一些约束条件
1:用not null指定字段的值不能为null
2:用unique指定字段的值必须唯一
3:用default指定字段的默认值
CREATE TABLE t_student (id integer, name text NOT NULL UNIQUE, age integer NOT NULL DEFAULT 1);
1:name字段不能为NULL,并且唯一
2:age字段不能为NULL,并且默认为1
主键约束(PK)
•当t_person中有些记录的name属性和age属性都一样时,那么就没法区分这些数据,造成数据库的记录不唯一,这样就不方便管理数据
•良好的数据库编程规范应该是要保证每条记录的唯一性,为此,增加了主键约束
•主键是用来唯一地标识某一条记录的,可以是一个字段或多个字段
•比如t_person可以增加一个id字段作为主键,相当于人的身份证
•主键的设计原则:
1:主键应当是对用户没有意义的
2:永远也不要更新主键
3:主键不应包含动态变化的数据
4:主键应当由计算机自动生成
•在创表的时候用primary key声明一个主键
CREATE TABLE t_student (id integer PRIMARY KEY,name text,age integer);
•只要声明为primary key,就说明是一个主键字段,主键字段默认就包含了not null 和 unique 两个约束
•如果想要让主键自动增长(integer类型),应该增加autoincrement
CREATE TABLE t_student (id integer PRIMARY KEY AUTOINCREMENT,name text,age integer);
外键约束(FK)
•外键约束可以用来建立表与表之间的联系
•新建一个外键
CREATE TABLE t_student (id integer PRIMARY KEY AUTOINCREMENT,name text,age integer,book_id integer REFERENCES t_book(id));
t_student表中有一个外键book_id引用着t_book的主键id