首页 > 代码库 > SQlite数据库相关语法知识

SQlite数据库相关语法知识

 

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 :指定字段的默认值(建议:尽量给字段设定严格的约束,以保证数据的规范性)