XML屬性列表 —— PList程序員
NSKeyedArchiver 歸檔sql
Preference(偏好設置)數據庫
SQLite3 編程
Core Data(以面向對象的方式操做數據庫SQLite)數據結構
數據庫(Database)是按照數據結構來組織、存儲和管理數據的倉庫spa
數據庫的種類:設計
關係型數據庫(主流)excel
對象型數據庫sqlite
文檔型數據庫(Lotus Notes)對象
主流數據庫
PC端:DB2、Oracle、Sybase、MySQL、SQLServer
嵌入式\客戶端:SQLite
數據庫的存儲結構跟excel相似
表(table)
記錄(row),每行都有不少個字段
字段(column)
SQL語句
SQL(structured query language):結構化查詢語言,一種對關係數據庫中的數據進行定義和操做的句法
要操做和訪問數據庫中存儲的數據,必須編寫SQL語句
SQL語句是不區分大小寫的(即大小寫同樣)
SQL語句都以分號;結尾
數據定義語言(DDL:Data Definition Language)
其語句包括動詞CREATE和DROP
在數據庫中建立新表或刪除表(CREAT TABLE 或 DROP TABLE)
數據操做語言(DML:Data Manipulation Language)
其語句包括INSERT,UPDATE和DELETE,它們分別用於添加,修改和刪除表中的行
也稱爲動做查詢語言
數據查詢語言(DQL:Data Query Language)
也稱爲「數據檢索語句」,用以從表中得到數據
保留字SELECT是DQL(也是全部SQL)用得最多的動詞,其餘DQL經常使用的保留字有WHERE,ORDER BY,GROUP BY和HAVING
創表
CREATE TABLE 表名 (字段名1 字段類型1, 字段名2 字段類型2, …);
CREATE TABLE IF NOT EXISTS 表名 (字段名1 字段類型1, 字段名2 字段類型2, …);
示例:
CREATE TABLE IF NOT EXISTS T_Person (id INTEGER, name TEXT, gender INTEGER, age INTEGER, height REAL);
刪表
DROP TABLE 表名;
示例:
DROP TABLE T_Person;
SQLite將數據值的存儲劃分爲如下幾種存儲類型:
NULL: 表示該值爲NULL值
INTEGER: 無符號整型值
REAL: 浮點值
TEXT: 文本字符串
BLOB: 二進制數據(好比文件)
實際上SQLite是無類型的,建表時聲明或不聲明類型均可以,也就意味着創表語句能夠這麼寫:
create table t_student(name, age);
注意:爲了保持良好的編程規範,方便程序員之間的交流,編寫建表語句的時候最好加上每一個字段的具體類型
插入數據(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表中全部記錄都刪掉
若是隻想更新或者刪除某些固定的記錄,就須要在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;
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;
查詢出來的結果能夠用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 5;
表示取最前面的5條記錄
建表的時候能夠給特定的字段 設置 一些約束條件
用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
當T_Person中有些記錄的name屬性和age屬性都同樣時,將沒法區分這些數據,形成數據庫的記錄不惟一,這樣不方便管理數據
良好的數據庫編程規範應該是要保證每條記錄的惟一性,爲此,增長了主鍵約束
主鍵是用來惟一地標識某一條記錄的,能夠是一個字段或多個字段
好比T_Person能夠增長一個id字段做爲主鍵,至關於人的身份證
主鍵的設計原則:
主鍵應當是對用戶沒有意義的
永遠也不要更新主鍵,讓數據庫自動維護
主鍵不該包含動態變化的數據
主鍵應當由計算機自動生成
主鍵目的:惟一標示一條記錄
在須要時,讓數據庫告訴咱們主鍵是多少
主鍵一般採用自動增長的整數來定義!
SELECT * FROM T_Student LEFT JOIN T_BOOK
LEFT JOIN 就是以左邊的數據爲主,右邊的數據爲輔助,會將左邊的數據所有顯示出來,右邊沒有數據的顯示爲NULL,左邊爲主的關係!
JOIN 只查詢兩個表之間共有的數據!在開發中JION用得少,並且容易「丟(有些右邊沒有數據的記錄不會顯示)」數據,JOIN是平等關係
在創表的時候用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);
外鍵約束能夠用來創建表與表之間的聯繫
新建一個外鍵
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
查詢擁有《如來神掌》這本書的全部學生
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 = ‘如來神掌';
JOIN和ON用來創建兩個表之間的關聯關係
SQLite3是一款開源的嵌入式關係型數據庫,可移植性好、易使用、內存開銷小
SQLite3是無類型的,意味着能夠保存任何類型的數據到任意表的任意字段中。好比下列的創表語句是合法的:
CREATE TABLE T_Person(name, age);
爲了保證可讀性,建議仍是把字段類型加上:
CREATE TABLE T_Person(name text, age integer);
SQLite3經常使用的5種數據類型:text、integer、float、boolean、blob(大量的文本或者圖像)
在iOS中要使用SQLite3,須要添加庫文件:libsqlite3.dylib並導入主頭文件,這是一個C語言的庫
建立數據庫(sqlite3_opendb)
單步執行操做(sqlite3_exec)
建立數據表
數據操做
插入數據
更新數據
刪除數據
查詢操做
sqlite3_prepare_v2檢查sql的合法性
sqlite3_step逐行獲取查詢結果
sqlite3_coloum_xxx獲取對應類型的內容
sqlite3_finalize釋放stmt