(一)SQLite3:
(1)定义:是一款轻量级的,嵌入式的数据库。是一个进程内的库,本质就是一个文件,不需要依赖外部,不需要服务器,不需要安装或者管理,就是一个单一的磁盘文件。而服务端的数据库往往都很大,例如Orcal,MySql,SQL Server,这些需要独立的服务器,安装配置并且需要大量人员的维护。
(2)数据类型:五个数据类型,integer整数,real小数,text字符串,blob二进制数据(把一段图片,音频,视频塞进去,一般不塞,数据库是查询检索的,而不是保存的,没法检索,一般值存路径),NULL。
(3)主键:主键:唯一标示一条记录,一般是整数,一般是自动增长的。每一个表存储相同类型的数据。例如一个Dog对象,每一行都是一个对象,每一列都是对象的某一个属性。例如age,name等等。
(4)存的时候服务器会有一个排它锁。因为有可能会多个同时存储。为了唯一区分id,服务器就自己锁住下一条记录。并且id主键是唯一标示,是由数据库自动生成的。及其偶尔的情况下,主键可以采用其他方式。
(5)所以说,SQL3就是存储数据的,一个表可以是一个对象,不同表之间还可以(一般必然)有关系。iOS开发一般是需要了解数据库代码写法的,如上只是Navicat自动生成的一个table,如果写成数据库代码,是这样的。
-- 创建数据表 CREATE TABLE IF NOT EXISTS "T_Person" ( // 创建一个表 如果不存在 "id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, // id integer类型 不为空 主键 自动增长 "name" TEXT, // 名字 text类型 "age" INTEGER, // 年龄 integer类型 "height" REAL // 身高 real类型 )
(6)数据修改: 上面已经创建了一个T_Person表,并且有四个属性,那么现在可以插入数据了。
6.1增:
INSERT INTO T_Person(name,age,heigth) VALUES (‘shy‘,24,1.7) // 插入一条数据数据到T_Person表
SQL的字段属性其实只是给程序员看的,其实存什么都行。并没有做校验,你给一个int存字符串都没事-。-!但是事实证明,SQL3在移动端嵌入开发是唯一首选的。插入一万条数据也需要0.几秒就行,速度非常快性能非常好。
INSERT INTO T_Person (name,age,height) VALUES (‘shy‘,‘24‘,‘shy‘) // 插入一个错误数据类型,数据库表不受任何影响
6.2改:更新数据时候一定要设置条件,因为SQL是没法command+Z返回的,数据改了就无法改变。
UPDATE T_Person SET name = ‘aixin‘, age = 100, height = 88 WHERE id = 2
此时数据就改了
6.3删:删除数据也要注意设置条件,要不然整个表就没了。。。你就被开除了。
DELETE FROM T_Person WHERE id = 1;
注意: ‘;’分号是表示一个完整事件的结束,可以加也可以不加(改没加,删加了),但是加上才是比较正规的SQL语句。如果删除条件不满足,那么什么也不会发生。
删除整个表:
DROP TABLE T_Person;
6.4查:
SELECT * FROM T_Person; // 查询整个表所有信息,开发一般不用,调试用,因为无法控制选什么 SELECT name,age FROM T_Person; // 查询具体某些属性 SELECT count(*) FROM T_Person; // 查询有多少个 SELECT count(*) FROM T_Person WHERE age<26; // 条件选择查询多少个 SELECT name,age,height FROM T_Person WHERE age<26; // 条件展示具体属性
SELECT max(age) FROM T_Person; // 查询最大年龄 SELECT min(age) FROM T_Person; // 查询最小年龄 SELECT id,name,age FROM T_Person // 查询3条 LIMIT 3; SELECT id,name,age FROM T_Person // 从..位置查询..条 LIMIT 3,3; SELECT id,name,age FROM T_Person // 从id.. 位置查询..条 WHERE id > 5 LIMIT 2;
SELECT id,name,age FROM T_Person // 按照名字排序,默认a升序 ORDER BY name; SELECT id,name,age FROM T_Person // DESC是降序,如果名字一样,按照第二要求age进行升序排序 ORDER BY name DESC,age ASC;