Sqlite3:Sqlite3命令行Linux操作
1.查看sqlite版本
[istester@ietester.com idoxu]$ sqlite3 -version
2.进入sqlite后台操作
指定一个完整文件的路径名,打开或者创建数据库(文件不存在,则创建),同时进入sqlite后台操作程序。
[istester@ietester.com idoxu]$ 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')) -- 时间 );