ubuntu下下SQLite3的着力命令

发布时间:2018-11-15  栏目:sqlite  评论:0 Comments

系平台:ubuntu10.04

|SQLite3简介 

简介
sqlite3平等缓主要用于嵌入式的轻量级数据库,本文旨在为熟悉sqlite3基本命令提供技能文档。
     备注:本文所有操作均于root用户下进展。

SQLite3只是一个轻型的嵌入式数据库引擎,占用资源异常小,处理速度比Mysql还抢,专门用来移动设备上展开适度的数码存取,它就是一个文书,不需要服务器进程。

1、安装sqlite3
ubuntu下安装sqlite3直接以极限运行命令:

经常因此术语表(table)、字段(column,列,属性)、记录(row,record)。

#apt-get install sqlite3

|SQL(structured
query language)语句 

查看版本信息:

特点:不区分轻重缓急写,每条语句后加”;”结尾。

#sqlite3 -version

关键字:select、insert、update、delete、from、creat、where、desc、order、by、group、table、alter、view、index等,数据库被不可知应用要字命名表和字段。

 
2 、sqlite3常用命令
当前目录下建立或者打开test.db数据库文件,并进入sqlite命令终端,以sqlite>前缀标识:

数码定义语句(DDL:Data Definition
Language)

#sqlite3 test.db
  • 新建表 ⟹ create:create table 表名 (字段名1 字段类型1,字段名2
    字段类型2,。。。); create table if not exists 表名 (字段名1
    字段类型1,字段名2 字段类型2,。。。);

 
翻数据库文件信息命令(注意命令前带字符’.’):

   CREATE TABLE IF NOT
EXISTS t_person (id integer
PRIMARY KEY AUTOINCREMENT, name text NOT NULL, age integer NOT
NULL); 

sqlite>.database
  • 删除表 ⟹ drop:dorp table 表名;drop table if exists 表名;

翻看所有表的创语句:

   DROP TABLE IF EXISTS
t_person; 

sqlite>.schema

多少操作语句(DML:Data Manipulation
language)

 
查看指定表的创立语句:

  • 补给加表中的数额 ⟹ insert:insert into 表名 (字段1,字段2,。。。)
    values (字段1的价值,字段2的价值);字符串内容用单引号。
sqlite>.schema table_name

   INSERT INTO
t_person (name, age) VALUES (‘大明’, 22); 

 

  • 修改表中之数 ⟹ update:update 表名 set 字段1 = 字段1底值,字段2
    = 字段2的价值,。。。;
以sql语句的形式列出表内容:
sqlite>.dump table_name

设置显示信息的分隔符:
sqlite>.separator symble
Example:设置显示信息以‘:'分隔
sqlite>.separator :

设置显示模式:
sqlite>.mode mode_name
Example:默认为list,设置为column,其他模式可通过.help查看mode相关内容
sqlite>.mode column

输出帮助信息:
sqlite>.help

设置每一列的显示宽度:
sqlite>.width width_value
Example:设置宽度为2
sqlite>.width 2

列出当前显示格式的配置:
sqlite>.show

退出sqlite终端命令:
sqlite>.quit
或
sqlite>.exit

    UPDATE t_person SET
name = ‘小明’, age = 10; //
把表中name字段的价值周改变成为小明,age字段的价周改变化10。  

 
3、sqlite3指令
sql的通令格式:所有sql指令都是坐分行(;)结尾,两单减号(–)则意味着注释。
如:

    UPDATE t_person SET
age = 12 WHERE name = ‘小明’; //
把表中name字段值是小明的age值改吗12。  

sqlite>create studen_table(Stu_no interger PRIMARY KEY, Name text NOT NULL, Id interger UNIQUE, Age interger CHECK(Age>6), School text DEFAULT 'xx小学);
  • 去除表中的数 ⟹ delete:delete from 表名;delete from 表名 where
    字段 = 字段值。

该语句创建一个笔录学生信息的数据表。
 
3.1 sqlite3存储数据的种类
NULL:标识一个NULL值
INTERGER:整数门类
REAL:浮点数
TEXT:字符串
BLOB:二上制数

   DELETE FROM
t_person; // 删除表中的具有记录。 

3.2 sqlite3囤积数据的格原则
Sqlite常用约束规范如下:
PRIMARY KEY – 主键:
1)主键的价必须唯一,用于标识每一样久记下,如学生的学号
2)主键同时也是一个索引,通过主键查找记录速度比快
3)主键如果是整数类型,该列的价值好自动增长
NOT NULL – 非空:
自律列记录不克也空,否则报错
UNIQUE – 唯一:
除了主键外,约束其他列的数的价唯一
CHECK – 条件检查:
自律该列的价值必须符合条件才不过存入
DEFAULT – 默认值:
列数据遭到之价值基本还是一模一样的,这样的字段列可要为默认值

   DELETE FROM
t_person WHERE age = 25; //
删除表中字段age等于25之即漫漫记下。 

3.3 sqlite3时时因此命令

   DELETE FROM
t_person WHERE age > 12 AND age
< 15; //
删除表中年龄过12且低于15底记录。 

1)建立数据表
create table table_name(field1 type1, field2 type1, ...);
table_name是要创建数据表名称,fieldx是数据表内字段名称,typex则是字段类型。
例,建立一个简单的学生信息表,它包含学号与姓名等学生信息:
create table student_info(stu_no interger primary key, name text);

2)添加数据记录
insert into table_name(field1, field2, ...) values(val1, val2, ...);
valx为需要存入字段的值。
例,往学生信息表添加数据:
Insert into student_info(stu_no, name) values(0001, alex);

3)修改数据记录
update table_name set field1=val1, field2=val2 where expression;
where是sql语句中用于条件判断的命令,expression为判断表达式
例,修改学生信息表学号为0001的数据记录:
update student_info set stu_no=0001, name=hence where stu_no=0001;

4)删除数据记录
delete from table_name [where expression];
不加判断条件则清空表所有数据记录。
例,删除学生信息表学号为0001的数据记录:
delete from student_info where stu_no=0001;

5)查询数据记录
select指令基本格式:
select columns from table_name [where expression];
a查询输出所有数据记录
select * from table_name;
b限制输出数据记录数量
select * from table_name limit val;
c升序输出数据记录
select * from table_name order by field asc;
d降序输出数据记录
select * from table_name order by field desc;
e条件查询
select * from table_name where expression;
select * from table_name where field in ('val1', 'val2', 'val3');
select * from table_name where field between val1 and val2;
f查询记录数目
select count (*) from table_name;
g区分列数据
select distinct field from table_name;
有一些字段的值可能会重复出现,distinct去掉重复项,将列中各字段值单个列出。

6)建立索引
当说数据表存在大量记录,索引有助于加快查找数据表速度。
create index index_name on table_name(field);
例,针对学生表stu_no字段,建立一个索引:
create index student_index on student_table(stu_no);
建立完成后,sqlite3在对该字段查询时,会自动使用该索引。

7)删除数据表或索引
drop table table_name;
drop index index_name;

数查询语句(DQL:Data Query
Language)

参考资料:
http://www.sqlite.com.cn/MySqlite/4/378.Html

  • select:select 字段1, 字段2, 。。。 from 表名;select 字段1,
    字段2, 。。。 from 表名 where 字段 = 某值;select * from
    表名;(查询所有的字段)
  • 表别名:select 字段1 别名, 字段2 别名,。。。from 表名 别名;select
    字段1 别名, 字段2 as 别名,。。。from 表名 as 别名;select
    别名.字段1,别名.字段2,。。。from 表名 别名;

卿或许感兴趣的篇章:

  • android操作SQLite增删改减实现代码
  • Android–SQLite(增,删,改,查)操作实例代码
  • Android
    用SQLite实现工作的不二法门
  • Android开发之SQLite的采取方法
  • Android
    SQLite数据库增删改查操作的应用详解
  • Android
    SQLite数据库增删改查操作的案例解析
  • 深入Android SQLite
    事务处理详解
  • 基于Android
    SQLite的晋级详解
  • android中sqlite的依标准查找的小例子
  • Android使用SQLite数据库的简要实例
  • Linux sqlite3 基本命令
  • SQLite3 命令行操作指南
  • Android
    Sqlite命令详解(基本命令)

   SELECT name, age
FROM t_person WHERE age < 80; 

   SELECT * FROM
t_person WHERE age < 80; 

   SELECT name, age
nianling FROM t_person ren WHERE ren.age > 80 AND nianling < 90; 

  • 计记录条数:select count(字段或者*) from 表名;

   SELECT count(name)
FROM t_person ren WHERE ren.age > 80; 

   SELECT count(*)
FROM t_person ren WHERE ren.age > 80; 

  • where:where 字段 = 某值;where 字段 is 某值;where 字段 !=
    某值;where 字段 is not 某值;where 字段 > 某值;where 字段1 =
    某值1 and 字段2 < 某值2;where 字段1 = 某值1 or 字段2 >
    某值2;
  • order by:select * from 表名 order by 字段(默认升序);select *
    from 表名 order by 字段 desc(降序);select * from 表名 order by
    字段 asc(升序);select * from 表名 order by 字段1
    asc(先照字段1升序),字段2 desc(再按照字段2降序);

   SELECT * FROM
t_person WHERE age < 100 ORDER
BY age DESC, name ASC; // 先随年降序,再以名升序。  

  • limit:select * from 表名 limit
    数值1,数值2;分页查询,数值1代表过了前面多少条,数值2意味着取出后小条。select *
    from 表名 limit 数值2;(跳了前面0长达,相当给select * from 表名 limit
    0,数值2,表示最好前头多少条数)

   SELECT * FROM
t_person WHERE age < 100 ORDER
BY age DESC, name ASC LIMIT 3,
5; //
先筛选,后排序,再分页。 

  • like:模糊查询,select 字段1, 字段2, 。。。 from 表名 where 字段
    like %有值%;

   SELECT * FROM
t_person WHERE name like ‘%明%’; 

囤类型:integer(整型)、real(浮点型)、text(文本字符串)、blob(二进制数据)。

事实上SQLite是无类型的,建表时声称的门类是为着便于程序员之间的交流,是一致种美的编程规范。

字段约束:

  • not null:字段的价值未克啊空。
  • unique:字段的值必需唯一。
  • default:指定字段的默认值。
  • primary
    key:主键,用来唯一的标识某修记下,相当给记录之身份证。主键可以是一个要多单字段,应由计算机自动生成和管理。主键字段默认包含了not
    null和unique两个框。
  • autoincrement:当主键是integer类型时,应该长autoincrement约束,能兑现主键值的电动增长。

   CREATE TABLE IF NOT
EXISTS t_person (id integer
PRIMARY KEY AUTOINCREMENT, name text NOT NULL UNIQUE, age integer NOT
NULL DEFAULT 30); 

外键:以外键约束好用来起表和申内的维系,一般是如出一辙张表的某个字段,引用在其他一样张表的主键的字段。

  • 创立一个说明: 

  CREATE TABLE IF NOT
EXISTS t_class (id integer PRIMARY
KEY AUTOINCREMENT, name text NOT NULL UNIQUE);

  • 创立一个带外键的表:t_student表中来一个叫fk_student_class的外键,这个外键的来意是让t_student表中的class_id字段引用t_class表中的id字段。

   CREATE TABLE IF NOT
EXISTS t_student (id integer
PRIMARY KEY AUTOINCREMENT, name text NOT NULL, age integer NOT NULL,
class_id integer NOT NULL, CONSTRAINT fk_student_class FOREIGN KEY
(class_id) REFERENCES t_class(id)); 

  • 运用外键来询问多张表中之多少:

   SELECT t.name
t_name, t.age t_age, tc.name c_name FROM t_student t, t_class tc
WHERE t.class_id = tc.id; //
查询有学员对应之班级 

   SELECT * FROM
t_student WHERE class_id = (SELECT id FROM t_class WHERE name = ‘四班’); // 查询四趟的持有学员

|SQLite3的使用 

1、导入libsqlite3.dylib库,包含头文件#import <sqlite3.h>。

2、打开或者创造数据库。

  • 1 sqlite3 *sq = NULL; // 一个打开的数据库实例
    2 NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).lastObject stringByAppendingPathComponent:@"test.sqlite"];
    3 
    4 // 根据文件路径打开数据库,如果不存在,则会创建一个新的数据库。
    5 // 数据库文件的路径必须以C字符串(而非NSString)传入。
    6 int result = sqlite3_open(path.UTF8String, &sq);
    7 if (result == SQLITE_OK) {
    8     self.sq = sq;
    9     NSLog(@"打开数据成功");
    

    10 const char sql = “CREATE TABLE IF NOT EXISTS t_person (id integer PRIMARY KEY AUTOINCREMENT, name text NOT NULL, age integer NOT NULL);”;
    11 char
    errmsg = NULL; // 用来存储错误信息
    12 // 可以实行另外SQL语句,比如创表、更新、插入和去操作。但是一般不要其实施查询语句,因为它们不见面回来查询到的数额。
    13 result = sqlite3_exec(self.sq, sql, NULL, NULL, &errmsg);
    14 if (result == SQLITE_OK) {
    15 NSLog(@”创表成功”);
    16 } else {
    17 NSLog(@”创表失败:%@”, [NSString stringWithUTF8String:errmsg]);
    18 }
    19 } else {
    20 NSLog(@”打开数据库失败”);
    21 }

3、执行不返数据的SQL语句。

  • 尽创表语句。

    1 const char *sql = "CREATE TABLE IF NOT EXISTS t_person (id integer PRIMARY KEY AUTOINCREMENT, name text NOT NULL, age integer NOT NULL);";
    2 char *errmsg = NULL; // 用来存储错误信息
    3 // 可以执行任何SQL语句,比如创表、更新、插入和删除操作。但是一般不用它执行查询语句,因为它不会返回查询到的数据。
    4 result = sqlite3_exec(self.sq, sql, NULL, NULL, &errmsg);
    5 if (result == SQLITE_OK) {
    6     NSLog(@"创表成功");
    7 } else {
    8     NSLog(@"创表失败:%s", errmsg);
    9 }
    
  • 行长数据说话(增、删、改)。

    1 NSString *sql = [NSString stringWithFormat:@"INSERT INTO t_person (name, age) VALUES ('%@', %d);", @"夏明", 22];
    2 char *errmsg = NULL;
    3 int result = sqlite3_exec(self.sq, sql.UTF8String, NULL, NULL, &errmsg);
    4 if (result == SQLITE_OK) {
    5     NSLog(@"添加数据成功");
    6 } else {
    7     NSLog(@"添加数据失败:%s", errmsg);
    8 }
    
  • 推行更新、删除语句和实施创表、添加语句基本类似,只待改变sql语句即可。

4、执行回来数据的SQL语句(查)。

  • 1 // 进展查询前的准备干活
    2 const char *sql = "SELECT name, age FROM t_person WHERE age < 30;";
    3 sqlite3_stmt *stmt = NULL; // 用来取数据的
    4 // -1代表系统会自动计算SQL语句的长度
    5 if (sqlite3_prepare_v2(self.sq, sql, -1, &stmt, nil) == SQLITE_OK) {
    6     NSLog(@"查询语句没问题");
    7     // 每调一次sqlite3_step()函数,stmt就会指向下一条记录
    8     while(sqlite3_step(stmt) == SQLITE_ROW) {
    9         // 取出第0列字段的值
    

    10 const unsigned char *name = sqlite3_column_text(stmt, 0);
    11 // 取出第1排列字段的值
    12 int age = sqlite3_column_int(stmt, 1);
    13 NSLog(@”name = %s, age = %d”, name, age);
    14 }
    15 } else {
    16 NSLog(@”查询语句有题目”);
    17 }

5、关闭数据库:sqlite3_close(db)。

|总结 

1.打开数据库

int sqlite3_open(

    const char *filename,                              //
数据库的文书路径

    sqlite3 **ppDb                                       // 数据库实例

);

 

2.履行另外SQL语句

int sqlite3_exec(

    sqlite3*,                                                  //
一个开拓的数据库实例 

    const char *sql,                                       //
需要实施的SQL语句

    int (*callback)(void*,int,char**,char**),   //
SQL语句执行完毕后的回调

    void *,                                                   //
回调函数的第1个参数

    char **errmsg                                        // 错误信息

);

 

3.检查SQL语句之合法性(查询前之备选)

int sqlite3_prepare_v2(

    sqlite3 *db,                                           //
数据库实例

    const char *zSql,                                   //
需要检讨的SQL语句

      int nByte,                                            //
SQL语句之最可怜字节长度

    sqlite3_stmt **ppStmt,                          //
sqlite3_stmt实例,用来取数据库数据

    const char **pzTail

);

 

4.查询一行数

int sqlite3_step(sqlite3_stmt*);                    //
如果查询到一行数,就见面回来SQLITE_ROW

 

5.运stmt获得某平等字段的值(字段的下标从0开始)

double sqlite3_column_double(sqlite3_stmt*, int iCol);              
         // 浮点数据

int sqlite3_column_int(sqlite3_stmt*, int iCol);                    
              // 整型数据

sqlite3_int64 sqlite3_column_int64(sqlite3_stmt*, int iCol);      
          // 长整型数据

const void *sqlite3_column_blob(sqlite3_stmt*, int iCol);          
         // 二向前制文本数

const unsigned char *sqlite3_column_text(sqlite3_stmt*, int iCol);
     // 字符串数据

 

留下评论

网站地图xml地图