iOS基础 - 数据库-SQLite

1、iOS应用数据存取的经常使用方式

XML属性列表 —— PList程序员

NSKeyedArchiver 归档sql

Preference(偏好设置)数据库

SQLite3 编程

Core Data(以面向对象的方式操做数据库SQLite数据结构

2、数据库简介(文件)

数据库(Database)是按照数据结构来组织、存储和管理数据的仓库spa

数据库的种类:设计

关系型数据库(主流)excel

对象型数据库sqlite

文档型数据库(Lotus Notes对象

主流数据库

PC端:DB2OracleSybaseMySQLSQLServer

嵌入式\客户端:SQLite

3、数据库的基本概念

数据库的存储结构跟excel相似

表(table

记录(row),每行都有不少个字段

字段(column

SQL语句

SQLstructured query language):结构化查询语言,一种对关系数据库中的数据进行定义和操做的句法

要操做和访问数据库中存储的数据,必须编写SQL语句

SQL语句是不区分大小写的(即大小写同样)

SQL语句都以分号;结尾

4、SQL语句

数据定义语言(DDLData Definition Language

其语句包括动词CREATEDROP

在数据库中建立新表或删除表(CREAT TABLE 或 DROP TABLE

数据操做语言(DMLData Manipulation Language

其语句包括INSERTUPDATEDELETE,它们分别用于添加,修改和删除表中的行

也称为动做查询语言

数据查询语言(DQLData Query Language

也称为“数据检索语句”,用以从表中得到数据

保留字SELECTDQL(也是全部SQL)用得最多的动词,其余DQL经常使用的保留字有WHEREORDER BYGROUP BYHAVING

5、DDL语句

创表

CREATE TABLE 表名 (字段名字段类型1, 字段名字段类型2, );

CREATE TABLE IF NOT EXISTS 表名 (字段名字段类型1, 字段名字段类型2, );

示例:

CREATE TABLE IF NOT EXISTS T_Person (id INTEGER, name TEXT, gender INTEGER, age INTEGER, height REAL);

删表

DROP TABLE 表名;

示例:

DROP TABLE T_Person;

6、字段类型

SQLite将数据值的存储划分为如下几种存储类型:

NULL: 表示该值为NULL

INTEGER: 无符号整型值

REAL: 浮点值

TEXT: 文本字符串

BLOB: 二进制数据(好比文件)

实际上SQLite是无类型的,建表时声明或不声明类型均可以,也就意味着创表语句能够这么写:

create table t_student(name, age);

注意:为了保持良好的编程规范,方便程序员之间的交流,编写建表语句的时候最好加上每一个字段的具体类型

7、DML语句

插入数据(INSERT

INSERT INTO 表名(字段1, 字段2, ) VALUES (字段1的值字段2的值);

示例:

INSERT INTO T_Person (name, age) VALUES ('张三', 18);

注意:数据库中的字符串内容应该用单引号’括住

更新数据(UPDATE

UPDATE 表名 SET 字段1 = 字段1的值字段2 = 字段2的值… 

示例:

UPDATE T_Person SET name = '李四', age = 20;

注意:这里会将T_Person表中全部记录的name都改成李四,age都改成20

删除数据(DELETE

DELETE FROM 表名;

示例:

DELETE FROM T_Person;

注意:这里会将T_Person表中全部记录都删掉

8、条件语句

若是只想更新或者删除某些固定的记录,就须要在DML语句后加上一些条件

条件语句的格式以下:

WHERE 字段 某个值 AND 字段 某个值;  

WHERE 字段 某个值 OR 字段 某个值;   

示例

将年龄大于10而且姓名不等于jack的记录年龄都改成5

UPDATE T_Person SET age = 5 WHERE age > 10 AND name != ‘张三’;

删除年龄小于等于10或者年龄大于30的记录

DELETE FROM T_Person WHERE age < 10 OR age > 30;

9、DQL语句

DQL语句就是查询语句,格式以下:

SELECT 字段1, 字段2, … FROM 表名;

SELECT name, age FROM T_Person;

若是想查询全部的字段能够用:

SELECT * FROM 表名;

SELECT * FROM T_Person;

也能够添加条件语句

SELECT * FROM T_Person WHERE age > 10;

计算记录的数量能够用count(字段)或者count(*)

SELECT count(*) FROM T_Person;

SELECT count(*) FROM T_Person WHERE height < 1.68;

10、排序

查询出来的结果能够用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;

先按照年龄排序(升序),年龄相等就按照身高排序(降序)

11、限制查询数量

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 5;

表示取最前面的5条记录

12、简单约束

建表的时候能够给特定的字段 设置 一些约束条件

NOT NULL指定字段的值不能为null

UNIQUE指定字段的值必须惟一

DEFAULT指定字段的默认值

CREATE TABLE T_Student (id INTEGER, name TEXT NOT NULL UNIQUE, age INTEGER NOT NULL DEFAULT 1);

name字段不能为NULL,而且惟一

age字段不能为NULL,而且默认为1

十3、主键约束(PK)

T_Person中有些记录的name属性和age属性都同样时,将没法区分这些数据,形成数据库的记录不惟一,这样不方便管理数据

良好的数据库编程规范应该是要保证每条记录的惟一性,为此,增长了主键约束

主键是用来惟一地标识某一条记录的,能够是一个字段或多个字段

好比T_Person能够增长一个id字段做为主键,至关于人的身份证

主键的设计原则:

主键应当是对用户没有意义的

永远也不要更新主键,让数据库自动维护

主键不该包含动态变化的数据

主键应当由计算机自动生成

主键目的:惟一标示一条记录

在须要时,让数据库告诉咱们主键是多少

主键一般采用自动增长的整数来定义!

SELECT * FROM T_Student LEFT JOIN T_BOOK

LEFT JOIN 就是以左边的数据为主,右边的数据为辅助,会将左边的数据所有显示出来,右边没有数据的显示为NULL,左边为主的关系!

JOIN 只查询两个表之间共有的数据!在开发中JION用得少,并且容易“丢(有些右边没有数据的记录不会显示)”数据,JOIN是平等关系

十4、主键约束

在创表的时候用PRIMARY KEY声明一个主键

CREATE TABLE T_Student (id integer PRIMARY KEY,name text,age integer);

只要声明为PRIMARY KEY,就说明是一个主键字段,主键字段默认就包含了NOT NULLUNIQUE两个约束

若是想要让主键自动增加(integer类型),应该增长AUTOINCREMENT

CREATE TABLE T_Student (id integer PRIMARY KEY AUTOINCREMENT, name text, age integer);

十5、外键约束(FK)

外键约束能够用来创建表与表之间的联系

新建一个外键

CREATE TABLE T_Student (

 id INTEGER PRIMARY KEY AUTOINCREMENT,

 name TEXT NOT NULL,

 age INTEGER NOT NULL DEFAULT 1,

 book_id INTEGER,

FOREIGN KEY (book_id) REFERENCES T_Book (id) ON DELETE SET NULL,

UNIQUE ("name" ASC)

)

T_Student表中有一个外键book_id引用着T_Book的主键id

十6、表链接查询

查询拥有《如来神掌》这本书的全部学生

SELECT s.name, s.age, b.name bookName 

FROM T_Student s

JOIN T_Book b ON b.id = s.book_id;

WHERE b.name = ‘如来神掌';

JOINON用来创建两个表之间的关联关系

十7、SQLite3

SQLite3是一款开源的嵌入式关系型数据库,可移植性好、易使用、内存开销小

SQLite3是无类型的,意味着能够保存任何类型的数据到任意表的任意字段中。好比下列的创表语句是合法的:

CREATE TABLE T_Person(name, age);

为了保证可读性,建议仍是把字段类型加上:

CREATE TABLE T_Person(name text, age integer);

SQLite3经常使用的5种数据类型:textintegerfloatbooleanblob(大量的文本或者图像)

iOS中要使用SQLite3,须要添加库文件:libsqlite3.dylib并导入主头文件,这是一个C语言的库

十8、应用程序中SQLite3相关的操做

建立数据库(sqlite3_opendb

单步执行操做(sqlite3_exec

建立数据表

数据操做

插入数据

更新数据

删除数据

查询操做

sqlite3_prepare_v2检查sql的合法性

sqlite3_step逐行获取查询结果

sqlite3_coloum_xxx获取对应类型的内容

sqlite3_finalize释放stmt

相关文章
相关标签/搜索