Linux sqlite3基本命令

来源:互联网 发布:情侣定位软件 编辑:程序博客网 时间:2024/04/28 18:55
系统平台:ubuntu10.04

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

1、安装sqlite3
ubuntu下安装sqlite3直接在终端运行命令:
#apt-get install sqlite3
查看版本信息:
#sqlite3 -version
 
sqlite3常用命令
当前目录下建立或打开test.db数据库文件,并进入sqlite命令终端,以sqlite>前缀标识:
#sqlite3 test.db
 
查看数据库文件信息命令(注意命令前带字符'.')
sqlite>.database

查看所有表的创建语句:
sqlite>.schema
 
查看指定表的创建语句:
sqlite>.schema table_name
 
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
 
3sqlite3指令
sql的指令格式:所有sql指令都是以分号(;)结尾,两个减号(--)则表示注释。
如:
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小学);
该语句创建一个记录学生信息的数据表。
 
3.1 sqlite3存储数据的类型
NULL:标识一个NULL
INTERGER:整数类型
REAL:浮点数
TEXT:字符串
BLOB:二进制数

3.2 sqlite3存储数据的约束条件
Sqlite常用约束条件如下:
PRIMARY KEY 主键:
1)主键的值必须唯一,用于标识每一条记录,如学生的学号
2)主键同时也是一个索引,通过主键查找记录速度较快
3)主键如果是整数类型,该列的值可以自动增长
NOT NULL 非空:
约束列记录不能为空,否则报错
UNIQUE 唯一:
除主键外,约束其他列的数据的值唯一
CHECK 条件检查:
约束该列的值必须符合条件才可存入
DEFAULT 默认值:
列数据中的值基本都是一样的,这样的字段列可设为默认值

3.3 sqlite3常用指令
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;
wheresql语句中用于条件判断的命令,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;

Android简单的 将sqlite中两个表进行关联

(2012-07-24 15:16:10)
转载
标签:

字段

指令

sql数据库

年份

索引

 

SQLiteDatabase db1 =tracks.getWritableDatabase(); 

   ContentValues tracksvalues = newContentValues(); 

   tracksvalues.put(COL1,'1'); 

   tracksvalues.put(COL2,'2'); 

   Long insertid=db1.insertOrThrow(TABLE_NAME1,null, tracksvalues); 

 

   if (insertid!=-1){ 

 

      SQLiteDatabase db2 =waypoints.getWritableDatabase(); 

      ContentValues waypointvalues = newContentValues(); 

      waypointvalues.put(LONGITUDE,loc.getLongitude()); 

      waypointvalues.put(LATITUDE,loc.getLatitude()); 

      waypointvalues.put(TIME,System.currentTimeMillis()); 

      waypointvalues.put(TRACK_ID_FK,insertid); 

      db2.insertOrThrow(TABLE_NAME2, null,waypointvalues); 

 

  

将TABLE_NAME1中插入tracksvalues,并返回一个vid Long insertid

然后将这个id放入另一个表中存储



下面是sqlite3的一些用法:


 

假设我们要建一个名叫film的资料表,只要键入以下指令就可以了: 


create table film(title,length, year, starring); 


这样我们就建立了一个名叫film的资料表,里面有name、length、year、starring四个字段。 


这个createtable指令的语法为: 


create tabletable_name(field1, field2, field3, ...); 


table_name是资料表的名称,fieldx则是字段的名字。sqlite3与许多SQL数据库软件不同的是,它不在乎字段属于哪一种资料型态:sqlite3的字段可以储存任何东西:文字、数字、大量文字(blub),它会在适时自动转换。



建立索引 

如果资料表有相当多的资料,我们便会建立索引来加快速度。好比说: 

create index film_title_index onfilm(title); 

意思是针对film资料表的name字段,建立一个名叫film_name_index的索引。这个指令的语法为 

create index index_name ontable_name(field_to_be_indexed); 

一旦建立了索引,sqlite3会在针对该字段作查询时,自动使用该索引。这一切的操作都是在幕后自动发生的,无须使用者特别指令。 



加入一笔资料 

接下来我们要加入资料了,加入的方法为使用insertinto指令,语法为: 

insert into table_name values(data1, data2, data3,...); 

例如我们可以加入 

insert into film values ('Silence of the Lambs, The', 118, 1991,'Jodie Foster');insert into film values ('Contact', 153, 1997,'Jodie Foster');insert into film values ('Crouching Tiger, HiddenDragon', 120, 2000, 'Yun-Fat Chow');insert into film values('Hours, The', 114, 2002, 'NicoleKidman'); 

如果该字段没有资料,我们可以填NULL。 


 

查询资料 


讲到这里,我们终于要开始介绍SQL最强大的select指令了。我们首先简单介绍select的基本句型: 


select columns fromtable_name where expression; 


最常见的用法,当然是倒出所有数据库的内容: 


select * fromfilm; 


如果资料太多了,我们或许会想限制笔数: 


select * from film limit10; 


或是照着电影年份来排列: 


select * from film order byyear limit 10; 


或是年份比较近的电影先列出来: 


select * from film order byyear desc limit 10; 


或是我们只想看电影名称跟年份: 


select title, year from filmorder by year desc limit 10; 


查所有茱蒂佛斯特演过的电影: 


select * from film wherestarring='Jodie Foster'; 


查所有演员名字开头叫茱蒂的电影('%' 符号便是 SQL的万用字符): 


select * from film wherestarring like 'Jodie%'; 


查所有演员名字以茱蒂开头、年份晚于1985年、年份晚的优先列出、最多十笔,只列出电影名称和年份: 


select title, year from filmwhere starring like 'Jodie%' and year >= 1985 orderby year desc limit 10; 


有时候我们只想知道数据库一共有多少笔资料: 


select count(*) fromfilm; 


有时候我们只想知道1985年以后的电影有几部: 


select count(*) from filmwhere year >= 1985; 


(进一步的各种组合,要去看SQL专书,不过你大概已经知道SQL为什么这么流行了:这种语言允许你将各种查询条件组合在一起──而我们还没提到「跨数据库的联合查询」呢!) 


如何更改或删除资料 

了解select的用法非常重要,因为要在sqlite更改或删除一笔资料,也是靠同样的语法。 

例如有一笔资料的名字打错了: 

update film set starring='Jodie Foster' where starring='JodeeFoster'; 

就会把主角字段里,被打成'Jodee Foster'的那笔(或多笔)资料,改回成JodieFoster。 

delete from film where year <1970; 

就会删除所有年代早于1970年(不含)的电影了。 


其他sqlite的特别用法 

sqlite可以在shell底下直接执行命令: 

sqlite3 film.db "select * fromfilm;" 

输出 HTML 表格: 

sqlite3 -html film.db "select * fromfilm;" 

将数据库「倒出来」: 

sqlite3 film.db ".dump" >output.sql 

利用输出的资料,建立一个一模一样的数据库(加上以上指令,就是标准的SQL数据库备份了): 

sqlite3 film.db <output.sql 

在大量插入资料时,你可能会需要先打这个指令: 

begin; 

插入完资料后要记得打这个指令,资料才会写进数据库中: 

commit;


参考资料:
http://www.sqlite.com.cn/MySqlite/4/378.Html
http://www.cnblogs.com/myqiao/ 
转自:
http://blog.sina.com.cn/s/blog_7573977301018ee3.html
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 被套盖久了发黄怎么办 小白鞋里面发霉怎么办 棉被淋了一点雨怎么办 苹果手机被拉进电话群怎么办 墙上的插座烧了怎么办 富士康早退4分钟怎么办 我老婆起泡疹腿剌痛睡不着了怎么办 oppo耳机孔坏了怎么办 魅族耳机口坏了怎么办 控制线的报验资料怎么办 人失踪报警派出所不管怎么办 铁板的货架久了怎么办 干镀锌让环保查了怎么办 水管软管生锈了拧不动怎么办 镀锌管会生锈吗.怎么办 冷镀锌钢管生锈了怎么办 卖了过期的东西怎么办 喝到了假的饮料怎么办 烧汤总是溢锅怎么办 脚踩垃圾桶坏了怎么办 连衣裙特别容易起褶怎么办 施肥过度烧根了怎么办 农作物施用尿素发生肥害怎么办? 水稻尿素施多了怎么办 花施肥施多了怎么办 玉米被化肥烧了怎么办 撒施复合肥没有充分融化怎么办 绿箩化肥施多了怎么办 辣椒化肥施多了怎么办? 化肥施多了烧苗怎么办 绿植施肥施多了怎么办 盆栽肥料放多了怎么办 三环复合肥怎么办啊 母猪下崽后不吃食怎么办 猪自配料料槽不下怎么办 美甲边缘起翘怎么办 猪粪流到鱼塘里鱼死了怎么办啊 在基本农田建有机肥厂怎么办 有机肥厂的环评怎么办 织玻璃纤维网布环评怎么办 吃了受潮的奶粉怎么办