一. iOS中的數據存儲方式
1.Plist(NSArray\NSDictionary)
2.Preference(偏好設置\NSUserDefaults)
3.NSCoding(NSKeyedArchiver\NSkeyedUnarchiver)
4.對數據操作(增、刪、改、查)不方便
5.SQLite3(數據庫)
6.Core Data(對sqlite的封裝)
二. 數據庫可以分為2大種類:
1.關系型數據庫(主流)
2.對象型數據庫
三.常用關系型數據庫
PC端:Oracle、MySQL、SQL Server
移動客戶端:SQLite
四.SQLite 命令
我們在IOS應用程序中無法使用圖形化界面操作數據庫。在程序運行過程中操作數據庫中的數據需要通過SQL語句
1.什么是SQL
SQL(structured query language):結構化查詢語言
SQL是對數據庫中的數據進行定義和操作的語言
SQL語言簡潔,語法簡單,好學好用
2.什么是SQL語句
使用SQL語言編寫出來的句子\代碼,就是SQL語句
在程序運行過程中,要想操作(增刪改查)數據庫中的數據,必須使用SQL語句
3.SQL語句的種類
(1) DDL - 數據定義語句
命令 描述
1??.CREATE 創建一個新的表,一個表的視圖,或者數據庫中的其他對象
2??.ALTER 修改數據庫中的某個已有的數據庫對象,比如一個表
3??.DROP 刪除整個表,或者表的視圖,或者數據庫中的其他對象創建表
創建數據表
DDL CREATE
CREATE TABLE? ? --創建數據表
T_Student? ? ? ? --數據表名稱
(
id? ? ? ? ? ? ? ? --字段名稱
INTEGER? ? ? ? --字段類型
NOT NULL? ? --字段約束, NOT NULL表示字段的值不能為空
PRIMARY KEY? ? --表示主鍵
AUTOINCREMENT? ? --自動增長
,? ? ? ? ? ? ? ? --多個字段之間用,分開
name? ? ? ? ? ? --字段名稱
TEXT? ? ? ? --字段的類型
...
)
;? ? ? ? ? ? ? ? --表示一段sql語句結束
注意:
1.數據表名稱和字段名稱可以用""引起來
2.DDL語句不需要熟練的被下來.開發的時候可以在Navicat里面創建好表,在把DDL復制過來
3.數據表已經存在,還創建表會報'數據表已經存在'的錯誤,需要加IF NOT EXISTS 表示數據表不存在才創建
CREATE TABLE IF NOT EXISTS T_Student (
id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
name text,
age integer,
height real,
score real
);
CREATE TABLE IF NOT EXISTS T_Person (
id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
name text,
age integer,
height real
);
刪除表
/*
DDL刪除表
DROP TABLE T_Student? ? --刪除T_Student這張表
*/
DROP TABLE T_Person;
(2) DML - 數據操作語句
命令 描述
1??.INSERT 新增
2??.UPDATE 修改
3??.DELETE 刪除
插入數據
/*
DML插入數據
INSERT INTO? ? ? ? --表示插入數據
T_Person? ? ? ? --插入數據的數據表名稱
(name, age, height)? ? ? ? --表示要設置哪些字段的值
VALUES
('zhangsan', 18, 1.65)? ? --每個字段對應的值
注意:
1.字段名和字段值要對應
2.sqlite其實是沒有數據類型的,DDL語句中的類型只是給我們程序員看的
3.字符串需要用‘’
*/
INSERT INTO T_Person (name, age, height) VALUES ('lisi', 15, 1.70);
INSERT INTO T_Person (name, age, height) VALUES ('lisi', 15, 1.70);
INSERT INTO T_Person (name, age, height) VALUES ('lisi2', 18, 1.80);
INSERT INTO T_Person (name, age, height) VALUES ('lisi3', 17, 1.78);
INSERT INTO T_Person (name, age, height) VALUES ('zhangsan', 18, 1.72);
INSERT INTO T_Person (name, age, height) VALUES ('zhangsan', 18, 1.75);
INSERT INTO T_Person (name, age, height) VALUES ('wangwu', 20, 1.79);
INSERT INTO T_Person (name, age, height) VALUES ('zhaoliu', 20, 1.77);
INSERT INTO T_Person (name, age, height) VALUES ('zhaoliu', 21, 1.77);
INSERT INTO T_Person (name, age, height) VALUES ('zhaoliu2', 26, 1.87);
更新數據
/*
DML更新數據
UPDATE T_Person? ? ? ? --更新T_Person中的數據
SET
字段名稱=字段的值;? ? ? ? --更新的字段名=字段值
...? ? ? ? ? ? ? ? ? ? --更多的字段
WHERE? ? ? ? ? ? ? ? --設置更新條件
字段名稱=字段的值
注意:
1.如果不設置更新數據的條件,默認會更新所有數據
*/
UPDATE T_Person SET name = 'wangwu', height = 180 WHERE id = 3;
刪除數據
/*
DML刪除數據
DELETE FROM? ? T_Person? ? --刪除T_Person中的數據
WHERE? ? ? ? ? ? --設置刪除數據的條件
id=14? ? ? ? ? ? --表示刪除id=14的這條記錄
*/
DELETE FROM T_Person WHERE id = 6;
(3) DQL - 數據查詢語句
命令 描述
SELECT 查詢
查詢數據
-- 查詢指定字段
-- 查詢所有字段
-- 查詢 age < 20 的記錄的 name, age 字段
-- 查詢 age < 20 的記錄的所有字段
-- 查詢記錄總數
-- 查詢 age < 18 的記錄總數
-- 查詢最大 age
-- 查詢最小 age
-- 查詢所有記錄的所有字段,根據 age 排序(默認升序排序,ASC)
-- 查詢所有記錄的所有字段,根據 age 降序排序(DESC)
-- 使用多個字段排序,先按age降序排序,當age相同時再根據height降序排序
-- 返回指定的記錄
/*
LIMIT 常用于分頁, 比如一頁顯示3條數據
*/
-- 取出年齡最大的3條記錄
-- 查詢時給字段取別名
示例:
/*
SELECT? ? ? ? --查詢
name,? ? --需要的字段
age,? ? --需要的字段
FROM 表名;? ? --從哪張表里查找
*/
SELECT name, age FROM T_Person;
-- 查詢 age < 20 的人名
SELECT name FROM T_Person WHERE age < 20;
-- * 查詢所有的字段
SELECT * FROM T_Person;
-- 查詢 age > 20 記錄的所有字段
SELECT * FROM T_Person WHERE age > 20;
-- 查詢記錄總數
SELECT count(*) FROM T_Person;
-- 查詢age < 18 的記錄總數
SELECT count(*) FROM T_Person WHERE age < 18;
-- 查詢最大的年齡
SELECT MAX(age) FROM T_Person;
-- 查詢最小的年齡
SELECT MIN(age) FROM T_Person;
-- ORDER BY age 根據age排序,默認排序升序(ASC)
SELECT * FROM T_Person ORDER BY age;
-- 根據age降序排序(DESC)
SELECT * FROM T_Person ORDER BY age DESC;
-- 使用多個字段排序,先按age降序排序,當age相同時再根據height降序排序
SELECT * FROM T_Person ORDER BY age DESC, height DESC;
-- LIMIT 返回指定的記錄數
-- 前面的數值: 跳過的記錄條數
-- 后面的數值: 返回的記錄條數
SELECT * FROM T_Person LIMIT 2, 3;
/*
LIMIT 常用于分頁, 比如一頁顯示3條數據
第一頁: LIMIT 0, 3? ? --取最前面的3條數據
第二頁: LIMIT 3, 3? ? --跳過前面3條取3條數據
第三頁: LIMIT 6, 3? ? --跳過前面6條取3條數據
第n頁:? LIMIT (n - 1) * 3, 3
注意: LIMIT 0,3; 前面的數值為0時,可以省略 0, LIMIT 3;
*/
SELECT * FROM T_Person LIMIT 0, 3;
SELECT * FROM T_Person LIMIT 3, 3;
SELECT * FROM T_Person LIMIT 6, 3;
SELECT * FROM T_Person LIMIT 9, 3;
--LIMIT 0,3; 前面的數值為0時,可以省略 0, LIMIT 3;
SELECT * FROM T_Person LIMIT 3;
/*
取出年齡最大的3條記錄
1.按年齡降序排序,年齡大的在前面
3.取出前3條記錄.
*/
SELECT * FROM T_Person ORDER BY age DESC LIMIT 3;
查詢時給字段取別名
/*
別名格式:
字段名 AS 別名. 可以省略 AS 關鍵字
*/
SELECT id, name AS Stu_Name, height Stu_Height FROM T_Person LIMIT 20;