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;