2010年SQLite学习笔记
一. 如何获取SQLite最新版本官方站点:http://www.sqlite.org/ 从http://www.sqlite.org/网站的Download页面获取 即如下页面下载 http://www.sqlite.org/download.html 二.Windows下的SQLite的源代码是哪个软件压缩包?sqlite-amalgamation-3_6_22.zip是SQLite的windows下源码文件 三.Window下的SQLite命令行工具sqlite-3_6_22.zip 四.Window下的SQLite开发库,即动态链接库以及DEF文件sqlitedll-3_6_22.zip 五.SQLite最新版本是:3.6.22六.b<=a && a <= c 的SQL语句如何写在SQLite中,表达式"a BETWEEN b AND c"等于表达式 "a >= b AND a <= c",在比较表达式时,a可以是具有任何亲和性 七.a的值是x,y,z其中一个值,SQL语句如何写SQLite把表达式 "a IN (x,z)" 和 "a = z OR a = y OR a = z"视为相等. 八.如何创建制定目录的数据库sqlite3 D:/Project/SyncML/Lib/debug/atsync.db 九.创建数据的注意事项如果不往数据库里面添加任何的表,这个数据库等于没有建立,不会在硬盘上产生任何文件,如果数据库已经存在,则会打开这个数据库。 十.如何添加一张数据表create table student(name varchar(10),age smallint); 十一.如何往数据表中添加数据insert into student values('张三',20); 十二.如何通过sqlite3.dll与sqlite3.def生成sqlite3.lib文件LIB /DEF:sqlite3.def /machine:IX86 十三.如何查询SQLite工具的软件版本也就是sqlite3.exe应用程序小工具的版本号 方法一:进入sqlite3.exe所在目录,在命令行执行如下命令 sqlite3 –version 方法二: select sqlite_version(); 十四.如何在字符串中使用单引号(')?SQL 标准规定,在字符串中,单引号需要使用逃逸字符,即在一行中使用两个单引号 十五.如果删除了大量数据,而又想缩小数据库文件占用的空间,执行 VACUUM 命令vacuum; 十六.在SQLite中,如何在一个表上添加或删除一列?SQLite 有有限地 ALTER TABLE 支持。你可以使用它来在表的末尾增加一列,可更改表的名称。 如果需要对表结构做更复杂的改变,则必须重新建表。 重建时可以先将已存在的数据放到一个临时表中,删除原表, 创建新表,然后将数据从临时表中复制回来。 如,假设有一个 t1 表,其中有 "a","b","c" 三列, 如果要删除列 c ,以下过程描述如何做: 开始事物处理 BEGIN TRANSACTION; 创建临时表格t1-backup CREATE TEMPORARY TABLE t1_backup(a,b); 将数据库表t1中的所有数据拷贝到表t1-backup中 INSERT INTO t1_backup SELECT a,b FROM t1; 删除表格t1 DROP TABLE t1; 创建表格t1 CREATE TABLE t1(a,b); 将数据库表t1-backup中的所有数据拷贝到表t1中 INSERT INTO t1 SELECT a,b FROM t1_backup; 删除备份表格t1-backup DROP TABLE t1_backup; 事物提交 COMMIT; 十七.如何查询当前的编码的编码格式pragma encoding; 十八.SQLite支持哪些数据类型些? NULL 值为NULL 但实际上,sqlite3也接受如下的数据类型: 十九.如果将某个字段设置为INTEGER PRIMARY KEY属性,有什么特性?如果将声明表的一列设置为 INTEGER PRIMARY KEY,则具有: 1.每当你在该列上插入一NULL值时, NULL自动被转换为一个比该列中最大值大1的一个整数; 2.如果表是空的, 将会是1; 注意该整数会比表中该列上的插入之前的最大值大1。 该键值在当前的表中是唯一的。但有可能与已从表中删除的值重叠。要想建立在整个表的生命周期中唯一的键值,需要在 INTEGER PRIMARY KEY 上增加AUTOINCREMENT声明。那么,新的键值将会比该表中曾能存在过的最大值大1。 二十.字段声明中有AUTOINCREMENT属性,有什么与众不同的含义?要想建立在整个表的生命周期中唯一的键值,需要在 INTEGER PRIMARY KEY 上增加AUTOINCREMENT声明。那么,新的键值将会比该表中曾能存在过的最大值大1。 一.建立数据库sqlite3.exe test.db 二.双击sqlite-3_6_16目录下的程序sqlite3.exe,即可运行三.退出.exit 或者 .quit 四.SQLite支持如下5种数据类型1.NULL:空值。 五.联系人表格结构如下create table contact(id integer primary key autoincrement, lastname varchar(20),firstname varchar(20), mobile varchar(30),telephone varchar(20), email varchar(30),company varchar(50), department varchar(16),address varchar(80), id1 interger,id2 integer,updatetime datetime); 六.查看数据库有哪些数据表命令是:.tables 七.如何插入一条记录insert into contact(lastname,firstname,mobile,telephone,updatetime) values('刘','畅','13910128132','010-81749136','2009-07-22'); 八.查看数据表的结构针对整个数据库 .schema 针对仅仅是contact联系人该表 .schema contact 注意没有分号 九.如何打开一个已经创建的数据库sqlite3 test.db 十.如何解决如下问题SQL error: near "sqlite3": syntax error
SQL指令都是以分号(;)结尾的。如果遇到两个减号(--)则代表注解,sqlite3会略过去 十一.如何建立索引create index index_name on table_name(field_to_be_indexed); 十二.如何删除一张数据表drop table contact; 十三.查看当前的数据库.database 十四.如何删除一个数据表的数据delete from contact; 十五.如何导入一个文件到某个表中.import 文件路径 表名 注意这是非SQL语句,所以不加分号 十六.如何设置文件字段的分隔符.separator “,” .import e:/contact.txt contact 十七.如何查看当前sqllite字段的分隔符是什么?.show 十八.如何将查询结果导出到一个文件第一步:.output a.txt 第二步:执行要导出的SQL语句 第三步:.output stdout 十九.SQL查询语句select * from film order by year limit 10; select * from film order by year desc limit 10; select count(*) from film; select * from film where starring like 'Jodie%'; select * from film where starring='Jodie Foster'; select title,year from film order by year desc limit 10; select columns from table_name where expression; 最常见的用法,当然是倒出所有数据库的内容: select * from film; 如果资料太多了,我们或许会想限制笔数: select * from film limit 10; 或是照着电影年份来排列: select * from film order by year limit 10; 或是年份比较近的电影先列出来: select * from film order by year desc limit 10; 或是我们只想看电影名称跟年份: select title,year from film order by year desc limit 10; 查所有茱蒂佛斯特演过的电影: select * from film where starring='Jodie Foster'; 查所有演员名字开头叫茱蒂的电影('%' 符号便是 SQL 的万用字符): select * from film where starring like 'Jodie%'; 查所有演员名字以茱蒂开头、年份晚于1985年、年份晚的优先列出、最多十笔,只列出电影名称和年份: select title,year from film where starring like 'Jodie%' and year >= 1985 order by year desc limit 10; 有时候我们只想知道数据库一共有多少笔资料: select count(*) from film; 有时候我们只想知道1985年以后的电影有几部: select count(*) from film where year >= 1985; (进一步的各种组合,要去看SQL专书,不过你大概已经知道SQL为什么这么流行了:这种语言允许你将各种查询条件组合在一起──而我们还没提到「跨数据库的联合查询」呢!) 如何更改或删除资料 了解select的用法非常重要,因为要在sqlite更改或删除一笔资料,也是靠同样的语法。 例如有一笔资料的名字打错了: update film set starring='Jodie Foster' where starring='Jodee Foster'; 就会把主角字段里,被打成'Jodee Foster'的那笔(或多笔)资料,改回成Jodie Foster。 delete from film where year < 1970; 就会删除所有年代早于1970年(不含)的电影了。 其他sqlite的特别用法 sqlite可以在shell底下直接执行命令: sqlite3 film.db "select * from film;" 输出 HTML 表格: sqlite3 -html film.db "select * from film;" 将数据库「倒出来」: sqlite3 film.db ".dump" > output.sql 利用输出的资料,建立一个一模一样的数据库(加上以上指令,就是标准的SQL数据库备份了): sqlite3 film.db < output.sql 在大量插入资料时,你可能会需要先打这个指令: begin; 插入完资料后要记得打这个指令,资料才会写进数据库中: commit; 创建数据库文件: 把查询结果用屏幕输出 8)把表结构输出,同时索引也会输出 2。从http://sqlite.phxsoftware.com/ 下载Ado.net驱动。 3。SQL语法 SQLite 内建函数表
|