一、SQLite简介:
SQLite是一款嵌入式的轻量关系型数据库。
它占用资源非常低。在嵌入式设备中,可能只需要几百K内存;
处理速度比Mysql、PostgreSQL这两款开源的世界著名数据库管理系统还要快。
二、SQL语句:
SQL是专门操作数据库的一种特定的语言;
SQL语句不区分大小写;
在程序运行中,想要操作(增删改查,CRUD)数据库,必须使用SQL语句。
1、数据定义语句(DDL: Data Definition Language):
1.1 创建表:
create table if not exists t_student (id integer primary key autoincrement,
name varchar(128),
age integer,
class integer default 0,
register_time date time,
money float default 0,
birthday date);
整数数据类型:
integer: 整型数据,大小为4个字节;
bigint: 整型数据,大小为8个字节;
smallint: 整型数据,大小为2个字节;
tinyint: 从0到255的整数数据,存储大小为1个字节;
float: 4字节浮点型;
double: 8字节浮点型;
real: 8字节浮点型。
字符串数据类型:
char(n): n长度的字符串,n不超过254;
varchar(n): 长度不固定且最大长度为n的字符串,n不超过4000;
text: 存储可变长的unicode数据,存更大字符串。
日期类型:
date: 包含年月日;
time: 包含时分秒;
datetime: 包含年月日时分秒,格式:'2016-05-25 11:11:11';
timestamp: 包含年月日时分秒和毫秒。
所有字符串和日期需要加单引号。
其他类型
null: 空值;
blob: 二进制数据;
default: 缺省值;
not null: 规定字段的值不能为空
unique:规定字段的值必须唯一
primary key: 主键;
autoincrement: 主键自动增长。
外键约束:
当学生表中有个class_id字段时,class_id字段的内容应该对应班级表中的id字段,不能随意填写,这时,应当把学生表中的class_id字段设置为外键。
create table if not exists t_student (id integer primary key autoincrement, name varchar(128), class_id integer,
constraint fk_t_student_class_id_t_class_id foreign key (class_id) references t_class(id));
1.2 删除表:
drop table if exists t_student;
2、数据操作语句(DML: Data Manipulation Language):
添加记录(insert):
insert into t_student (name, age) values ('Jack', 20);
修改记录(update):
update t_student set name = 'Rose', age = 18 where id = 1;
删除记录(delete):
delete from t_student; // 删除所有记录
delete from t_student where id = 2;
3、数据查询语句(DQL: Data Query Language):
查询记录(select):
select * from t_student; // 查询所有记录
select name, age from t_student;
select name from t_student where id > 10 and age < 20;
select * from t_student where name like '%Ja%'; // 模糊查询,查询所有名字中含有 Ja 的记录
起别名:
select name myname, age myage from t_student;
select s.name, s.age from t_student s;
select统计语句:
select count(*) from t_student; // 统计记录的条数
select avg(age) from t_student: // 年龄的平均值
select sum(age) from t_student: // 年龄的和
排序:
select * from t_student order by age; // 根据年龄排序,默认升序
select * from t_student order by age desc; // 降序
select * from t_student order by age asc; // 升序
select * from t_student order by age asc, height desc; // 先按年龄升序,年龄相同时按身高降序
limit(分页查询):
select * from t_student limit 4, 8; // 从第4条开始,查询8条记录。(记录从第0条开始)
多表查询:
select s.name, s.age from t_student s, t_class c where s.class_id = c.id and c.name = 'iOS';