掌握SQLite3命令行操作技巧

发表时间: 2024-02-02 20:30

1.查看sqlite版本

[uos-pc@localhost user1]$ sqlite3 -version

2.进入sqlite后台操作

指定一个完整文件的路径名,打开或者创建数据库(文件不存在,则创建),同时进入sqlite后台操作程序。

[uos-pc@localhost user1]$ sqlite3 dome.db

3.查看所有数据库

#查看所有数据库sqlite>.database

4.查看所有表

#查看所有表sqlite>.table

5.查看所有表的创建语句

#查看所有表的建表语句sqlite>.schema

6.查看某个表的创建语句

#查看某表的建表语句sqlite>.schema table_name

7.增删改查命令

1)建立数据表

create table table_name(field1 type1, field2 type1, ...);

table_name是要创建数据表名称,fieldx是数据表内字段名称,typex则是字段类型。
例,建立一个简单的学生信息表,它包含学号与姓名等学生信息:

create table student_istester(stu_no interger primary key, name text);

2)添加数据记录

insert into table_name(field1, field2, ...) values(val1, val2, ...);

values为需要存入字段的值。
例,往学生信息表添加数据:

insert into student_istester(stu_no, name) values(0001, alex);

3)修改数据记录

update table_name set field1=val1, field2=val2 where expression;

where是sql语句中用于条件判断的命令,expression为判断表达式
例,修改学生信息表学号为0001的数据记录:

update student_istester set stu_no=0001, name=hence where stu_no=0001;

4)删除数据记录

delete from table_name [where expression];

不加判断条件则清空表所有数据记录。
例,删除学生信息表学号为0001的数据记录:

delete from student_istester 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;

注意:

指定INTEGER PRIMARY KEY AUTOINCREMENT 和不指定自增长字段用rowid有什么区别:

Sqlite中,一个自增长字段定义为INTEGER PRIMARY KEY AUTOINCREMENT,那么在插入一个新数据时,只需要将这个字段的值指定为NULL,即可由引擎自动设定其值,引擎会设定为最大的rowid+1。当然,也可以设置为非NULL的数字来自己指定这个值,但这样就必须自己小心,不要引起冲突。

当这个rowid的值大于所能表达的最大值 9223372036854775807 (3.0及以后版本的rowid最大值)后,rowid的新值会这个最大数之前随机找一个没被使用了的值。所以在rowid达到最大值前,rowid的值是严格单调增加的。
INTEGER PRIMARY KEY AUTOINCREMENT 自增长字段的算法与rowid稍微有些不同。
第一,在达到最大值后,rowid会找已被删除的字段对应的rowid作为新值,而自增长字段则会丢出一个SQLITE_FULL的错误。
第二,自增长字段在增加新值时,是找一个从没被使用过的rowid作为新值,而rowid则是找最大已存在的rowid+1。这里对应用的影响会比较大,尤其是一些对id值有依赖的元记录,只适合使用自增长字段而不能用rowid。

附录建表语句:

drop table test;create table test (    [tkid]            integer PRIMARY KEY autoincrement,                -- 设置主键    [tktype]          int default 0,    [tableid]         varchar (50),    [createdate]      datetime default (datetime('now', 'localtime'))    -- 时间);