sql語句的特點:不區分大小寫(比如資料庫認為user和user是一樣的)
每條語句都必須以分號 ; 結尾
sql中的常用關鍵字有:select、insert、update、delete、from、create、where、desc、order、by、group、table、
alter、view、index等等
資料庫中不可以使用關鍵字來命名表、字段
•1、sqlite3是一款開源的嵌入式關係型資料庫,可移植性好、易使用、記憶體開銷比較小
sqlite3是無型別的,意味著你可以儲存任何型別的資料到任意表的任意欄位中
2、 sqlite3常用的5種資料型別:text(文字)、integer(整型)、real(浮點值)、blob(二進位制)
3、 在ios中使用sqlite3,首先要新增庫檔案libsqlite3.dylib和匯入主標頭檔案
4、 建立或開啟資料庫
// path為:~/documents/person.db
sqlite3 *db;
int result = sqlite3_open([path utf8string], &db);
**解析:sqlite3_open()將根據檔案路徑開啟資料庫,如果不存在,則會建立乙個新的資料庫。如果result等於常量sqlite_ok,則表示成功開啟資料庫。資料庫檔案的路徑必須以c字串(而非nsstring)傳入
關閉資料庫:sqlite3_close(db);
5、執行創表語句
char *errormsg; // 用來儲存錯誤資訊
char *sql = "create table if not exists t_person(id integer primary key autoincrement, name text, age integer);";
int result = sqlite3_exec(db, sql, null, null, &errormsg);
**解析:sqlite3_exec()可以執行任何sql語句,比如創表、更新、插入和刪除操作。但是一般不用它執行查詢語句,因為它不會返回查詢到的資料
sqlite3_exec()還可以執行的語句:
①開啟事務:begin transaction;
②回滾事務:rollback;
③提交事務:commit;
6、基本操作
①建立表:
(1) table if not exists 表名 (欄位名1 字段型別1, 欄位名2 字段型別2, …) ;
(2)create table 表名 (欄位名1 字段型別1, 欄位名2 字段型別2, …) ;
特別說明:(1)就算宣告為integer型別,還是能儲存字串文字(主鍵除外)
(2)建表時宣告啥型別或者不宣告型別都可以,也就意味著創表語句可 以這麼寫:create table t_student(name, age);(為了保持良好的程式設計規範、方便程式設計師之間的交流,編寫建表語句的時候最好加上每個欄位的具體型別)
②刪除表:
(1)drop table 表名 ;
(2)drop table if exists 表名 ;
③插入資料:
insert into 表名 (欄位1, 欄位2, …) values (欄位1的值, 欄位2的值, …) ;
注意:資料庫中的字串內容應該用單引號 』 括住
④更新資料:
update 表名 set 欄位1 = 欄位1的值, 欄位2 = 欄位2的值, … ;
⑤刪除資料:
delete from 表名 ;
⑥條件語句的常見格式:
where 字段 = 某個值 ; // 不能用兩個 =
where 字段 is 某個值 ; // is 相當於 =
where 字段 != 某個值 ;
where 字段 is not 某個值 ; // is not 相當於 !=
where 字段 > 某個值 ;
where 欄位1 = 某個值 and 欄位2 > 某個值 ; // and相當於c語言中的 &&
where 欄位1 = 某個值 or 欄位2 = 某個值 ; // or 相當於c語言中的 ||
⑦查詢語句:
select 欄位1, 欄位2, … from 表名 ;
select * from 表名; // 查詢所有的字段
⑧起別名:格式(欄位和表都可以起別名)
select 欄位1 別名 , 欄位2 別名 , … from 表名 別名 ;
select 欄位1 別名, 欄位2 as 別名, … from 表名 as 別名 ;
select 別名.欄位1, 別名.欄位2, … from 表名 別名 ;
⑨計算記錄的數量:格式
select count (字段) from 表名 ;
select count ( * ) from 表名 ;
⑩排序:
查詢出來的結果可以用order by進行排序
select * from t_student order by 字段 ;
select * from t_student order by age ;
預設是按照公升序排序(由小到大),也可以變為降序(由大到小)
select * from t_student order by age desc ; //降序
select * from t_student order by age asc ; // 公升序(預設)
也可以用多個字段進行排序
select * from t_student order by age asc, height desc ;
先按照年齡排序(公升序),年齡相等就按
7、limit:使用limit可以精確地控制查詢結果的數量,比如每次只查詢10條資料
格式:select * from 表名 limit 數值1, 數值2 ;
示例:select * from t_student limit 4, 8 ;(可以理解為:跳過最前面4條語句,然後取8條記錄)
8、建表的約束:
建表時可以給特定的字段設定一些約束條件,常見的約束有
not null :規定欄位的值不能為null
unique :規定欄位的值必須唯一
default :指定欄位的預設值(建議:盡量給字段設定嚴格的約束,以保證資料的規範性)
資料庫相關知識
1儲存過程和函式的區別 儲存過程是使用者定義的一系列sql語句的集合,涉及特定表或其它物件的任務,使用者可以呼叫儲存過程,而函式通常是資料庫已定義的方法,它接收引數並返回某種型別的值並且不涉及特定使用者表。1.事務是什麼?事務是作為乙個邏輯單元執行的一系列操作,乙個邏輯工作單元必須有四個屬性,稱為 ...
資料庫相關知識
innodb和myisam資料庫引擎的區別 對比項innodb myisam事務 外來鍵 索引聚集索引,使用b tree作為索引結構,資料檔案是和 主鍵 索引綁在一起,5.7以前的innodb不支援全文索引支援全文索引,在涉及全文索引領域的查詢效率上myisam速度更快高 主鍵必須有主鍵 使用者沒有...
SQLite3資料庫操作語法
sql的指令格式 所以的sql指令都是以分號 結尾的。如果遇到兩個減號 則代表註解,sqlite3會略過去。建立資料表 假設我們要建乙個名叫film的資料表,只要鍵入以下指令就可以了 create table film title,length,year,starring 這樣我們就建立了乙個名叫f...