sqlite3的使用

0、简介

sqlite3是一款主要用于嵌入式的轻量级数据库

sqlite3存储数据的类型

NULL:标识一个NULL值

INTERGER:整数类型

REAL:浮点数

TEXT:字符串

BLOB:二进制数

sqlite3存储数据的约束条件

Sqlite常用约束条件如下:

PRIMARY KEY - 主键:

1)主键的值必须唯一,用于标识每一条记录,如学生的学号

2)主键同时也是一个索引,通过主键查找记录速度较快

3)主键如果是整数类型,该列的值可以自动增长

NOT NULL - 非空:

约束列记录不能为空,否则报错

UNIQUE - 唯一:

除主键外,约束其他列的数据的值唯一

CHECK - 条件检查:

约束该列的值必须符合条件才可存入

DEFAULT - 默认值:

列数据中的值基本都是一样的,这样的字段列可设为默认值

1、安装sqlite3

sudo apt-get install sqlite3

  查看版本信息

sqlite3 -version

2、新建或打开数据库

# sqlite3 数据库名字
sqlite3 student.db # 当前目录下建立或打开student.db数据库文件,并进入sqlite命令终端,以sqlite>前缀标识

3、数据库命令(以"."开头)

.help 输出帮助信息

.database 查看数据库文件信息

.tables 显示表

.schema 查看所有表

.schema <table_name> 查看指定表,显示表结构

.dump <table_name> 以sql语句的形式列出表内容

.separator <symble> 设置显示信息的分隔符,如.separator :(默认为"|")

.mode <mode_name> 设置显示模式,如.mode column(默认为list)

.width <width_value> 设置每一列的显示宽度,如.width 2

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

.quit或.exit 退出sqlite终端

4、数据库语句(以";"结尾,"--"表示注释)

 (1) 创建数据表:

# create table table_name(field1 type1, field2 type1, ...);
create table student (id int primary key,name char,age int,sex char); # 创建一个记录学生信息的数据表student

 (2) 向表中插入数据记录:

# insert into <table_name> values (val1, val2, ...);
insert into student values (0,'alan_0',20,'m');
# insert into <table_name>(field1, field2, ...) values(val1, val2, ...);
insert into student(id, name, age, sex) values(1, 'alan_1', 20, 'm');

 (3) 修改数据记录 

# update <table_name> set field1=val1, field2=val2 where expression; # where是sql语句中用于条件判断的命令,expression为判断表达式
update student set name='alan_2', age=21 where name='alan_1';

 (4) 查询数据记录

# select columns from <table_name> [where expression];

  a)查询输出所有数据记录

# select * from <table_name>;
select *from student;

  b)限制输出数据记录数量

# select * from <table_name> limit val;
select *from student limit 10;

  c)排序输出数据记录

# select * from <table_name> order by field asc;
select * from student order by age asc limit 10; # 升序,降序为desc

  d)条件查询

# select * from <table_name> where expression;
select * from student where age<21 and sex='m'; # 按照某个条件查找and/or

# select * from table_name where field in ('val1', 'val2', 'val3');
select * from student where name in ('alan_0', 'alan_1');

# select * from table_name where field between val1 and val2;
select * from student where age between 20 and 21;

select * from student where name like 'alan%'; # ('%'符号是SQL的万用字符)

  e)查询记录数目

# select count (*) from <table_name>;
select count(*) from student; # 数据库一共有多少笔资料
select count(*) from student where age > 20; # 年龄大于20的有几个 

  f)区分列数据

  note:有一些字段的值可能会重复出现,distinct去掉重复项,将列中各字段值单个列出。

# select distinct field from <table_name>;
select distinct sex from student;

  g)查找某个字段(列信息)

# select field from <table_name>;
select id from student;
select name, age from student where name like 'alan%' and age >= 20 order by age desc limit 10; # 查所有名字以zhang开头、年龄大于20、年龄大的优先列出、最多十笔,只列出名字和年龄

 (5) 删除数据记录:

# delete from <table_name> [where expression]; # 不加判断条件则清空表所有数据记录
delete from student where name='alan_2';

 (6) 建立索引
 note: 当数据表存在大量记录,索引有助于加快查找数据表速度。建立完成后,sqlite3在对该字段查询时,会自动使用该索引。

# create index <index_name> on <table_name>(field);
create index student_index on student(id); # 针对学生表id字段,建立一个索引

 (7) 删除索引

# drop index <index_name>;
drop index student_index;

 (8) 添加一列

# alter table 表名 add 列名 数据类型;
alter table student add address char;
update student set address='beijing'; # 把地址字段全部更新为beijing

  (9) 删除一列

  note: sqlite3不支持删除一列信息,可以把原来的表里面的需要的列复制到一个新表,重新命名)

# create table 新表名 as select 列名1,列名2,列名3,列名4 from 旧表名; 
create table stu as select id, name, sex from student; # 选择student表中的id,name,sex字段作为新表的字段

  (10) 重新命名表

# alter table 旧表名 rename to 新表名; 
alter table stu rename to student_new;

  (11) 删除数据表

# drop table <table_name>;
drop table student_new;

 5、其他sqlite的特别用法

# sqlite可以在shell底下直接执行命令
sqlite3 student.db "select * from student;"

# 输出 HTML 表格
sqlite3 -html student.db "select * from student;"

# 将数据库「倒出来」
sqlite3 student.db ".dump" >output.sql

# 利用输出的资料,建立一个一模一样的数据库(加上以上指令,就是标准的SQL数据库备份了)
sqlite3 student.db <output.sql

# 在大量插入资料时,你可能会需要先打这个指令:
begin;
# 插入完资料后要记得打这个指令,资料才会写进数据库中:
commit;

猜你喜欢

转载自blog.csdn.net/A_L_A_N/article/details/105587169