SQLite :
- 简介:
SQLite是一个进程内的轻量级嵌入式数据库,它的数据库就是一个文件,实现了自给自足、无服务器、零配置的、事务性的SQL数据库引擎。它是一个零配置的数据库,这就体现出来SQLite与其他数据库的最大的区别:SQLite不需要在系统中配置,直接可以使用。且SQLite不是一个独立的进程,可以按应用程序需求进行静态或动态连接。SQLite可直接访问其存储文件 - 语法:
1.(不区分大小写)SQLite 是不区分大小写的,但也有一些命令是大小写敏感的,比如 GLOB 和 glob 在 SQLite 的语句中有不同的含义。
2.(注释)SQL 注释以两个连续的 “-” 字符(ASCII 0x2d)开始,并扩展至下一个换行符(ASCII 0x0a)或直到输入结束,以先到者为准。或者 以 “/* ” 开始,并扩展至下一个 ” */” 字符对或直到输入结束,以先到者为准。SQLite的注释可以跨越多行。.
3.(语句以 ;结束)所有的 SQLite 语句可以以任何关键字开始,如 SELECT、INSERT、UPDATE、DELETE、ALTER、DROP 等,所有的语句以分号(;)结束 - 存储类型:
SQLite 没有单独的 Boolean 存储类。相反,布尔值被存储为整数 0(false)和 1(true)
NULL: 表示该值为NULL值。
INTEGER: 无符号整型值。
REAL: 浮点值。
TEXT: 文本字符串,存储使用的编码方式为UTF-8、UTF-16BE、UTF-16LE。
BLOB: 存储Blob数据,该类型数据和输入数据完全相同。
- 命令;
//sql命令一定要以“;”结束
//以下以表stdinfo为例
创建表: create table stuinfo(id integer, name text, age integer, score integer);
插入记录:insert into stuinfo values(1, 'Andy', 30, 99.9);
insert into stuinfo(id, name, score) values(2, 'Amy', 100);
查看记录:select * from stuinfo;
select * from stuinfo where score = 100;
select * from stuinfo where score = 99.9 and name = 'Andy';
select * from stuinfo where score = 99.9 or name = 'Amy';
select * from stuinfo where score > 80 and score < 100;
select name,score from stuinfo; //查询指定的字段
删除记录:delete from stuinfo where id = 1 and name = 'Andy';
更新记录:update stuinfo set age = 20,score = 100 where id = 1;
增加一列:alter table stuinfo add column sex char;
删除一列:create table stu as select id, name, score from stuinfo; //从stuinfo中复制新表(不包含要删除的列)
drop table stuinfo; //删除老的表stuinfo
alter table stu rename to stuinfo; //将新表stu重命名为stuinfo,完成删除列的操作
删除表: drop table stuinfo;
/***设置主键***/
设置主键: create table table_name(column1 datatype PRIMARY KEY, column2 datatype, ……);
//PRIMARY KEY表示该列为该表的“主关键字”,主关键字用于唯一索引表内的某一条记录,主关键字必须唯一且主关键字的列值不能为空
select * from person where id<>1 //表示查询这张表 id不等于1的所有数据 <>表示不等于
select name from sqlite_master where type='table' order by name;//sqlite查看所有表名 如果type段是’index’, 则name是index的名字,`tabl_name是index所拥有的table的名字。
PRAGMA table_info([tablename]) //sqlite查看某表的字段名称
select count(LineName) from test; //sqlite查询某表的某列的行数 当LineName为*时,表示整个数据表的行数,当某一列有null时,行数部计数
select * from table_name limit 1 offset (select count(*) - 1 from table_name); //sqlite查询某表最新一行的数据
select * from table_name limit 1 offset (select count(*) - count(*) from table_name); //sqlite查询某表的第一条数据
select * from test limit LineSum; //sqlite查询某表最早的指定的数据条数
- 类型亲缘型:
为了最大化SQLite和其它数据库引擎之间的数据类型兼容性,SQLite提出了"类型亲缘性(Type Affinity)"的概念。我们可以这样理解"类型亲缘性 ",在表字段被声明之后,SQLite都会根据该字段声明时的类型为其选择一种亲缘类型,当数据插入时,该字段的数据将会优先采用亲缘类型作为该值的存储方式,除非亲缘类型不匹配或无法转换当前数据到该亲缘类型,这样SQLite才会考虑其它更适合该值的类型存储该值。
SQLite目前的版本支持以下五种亲缘类型:
1.TEXT:数值型数据在被插入之前,需要先被转换为文本格式,之后再插入到目标字段中
2.NUMERIC:当文本数据被插入到亲缘性为NUMERIC的字段中时,如果转换操作不会导致数据信息丢失以及完全可逆,那么SQLite就会将该文本数据转换为INTEGER或REAL类型的数据,如果转换失败,SQLite仍会以TEXT方式存储该数据。对于NULL或BLOB类型的新数据,SQLite将不做任何转换,直接以NULL或BLOB的方式存储该数据。需要额外说明的是,对于浮点格式的常量文本,如"30000.0",如果该值可以转换为INTEGER同时又不会丢失数值信息,那么SQLite就会将其转换为INTEGER的存储方式。
3.INTEGER:对于亲缘类型为INTEGER的字段,其规则等同于NUMERIC,唯一差别是在执行CAST表达式时。
4.REAL:其规则基本等同于NUMERIC,唯一的差别是不会将"30000.0"这样的文本数据转换为INTEGER存储方式
5.NONE:不做任何的转换,直接以该数据所属的数据类型进行存储
- 测试接口
1.建表
2.新增
3.查询
4.修改