转载自:
SQLite的简单使用
3.1 建立数据库
C:\sqlite> sqlite3.exe dbname.db
sqlite3.exe后面跟数据库文件名
3.2 创建数据表
sqlite> create table users(userid varchar(20) PRIMARY KEY, ...> age int, ...> birthday datetime);
3.3 添加记录
insert into users values('wang',20,'1989-5-4');insert into users values('li',22,'1987-11-16');
3.4 查询记录
select * from users order by birthday;
3.5 删除记录
delete from users where userid='wang';
3.6 退出sqlite
sqlite> .exit
SQLite数据库的数据结构是存贮在 "sqlite_master" 表中
具体命令可以输入 .help查看或参考帮助文档
sqlite 表结构和数据的导出
全部导出
sqlite3 data.db >.output dd.sql >.dump导出表结构
.output dd.sql
.schema
全部导入 sqlite3 mydb.db >.read dd.sql 平时使用官方提供的sqlite3.exe工具来操作 sqlite的数据库 进入管理: sqlite3.exe d:\test.db //假设数据是 d:\test.db >.databases //显示所有数据库 和 mysql的 show databases; >.tables //显示当前数据库的表格 和 mysql 的show tables; >.schema tablename; //显示表格结构 和mysql的 SHOW Create TABLE tbl_name >.output c:\\1.sql //导出当前数据库的 sql语句 和mysql的 mysqldump >.dump >.import c:\\1.sql //导入 //mysql 用source =================== 导入 命令: .import sqlite> .import 文件名 表名 注1: 不要忘了开头的点 注2: 这条语句不能用分号结束. 非SQL不需要分号结束. 注3: 需要查看默认的分隔符separator. 必须一致. 如果不一致可能导致sqlite字段分割错误. 查看分隔符使用命令 .show , 如果不一致可直接修改, 比如: sqlite>.separator "," 将分隔符转为逗号. 举例1: 将文件a.csv中的数据导入表 tab_xx. (a.csv中字段以逗号分割) sqlite> .separator "," sqlite> .import a.csv tab_xx sqlite> 导入结束. 导出 实现方式: 将输出重定向至文件. 命令: .output sqlite> .output a.txt 然后输入sql语句, 查询出要导的数据. 查询后,数据不会显示在屏幕上,而直接写入文件. 结束后,输入 sqlite> .output stdout 将输出重定向至屏幕. 举例2: 将 tab_xx 中的数据导出到文件a.txt sqlite> .output a.txt sqlite> select * from tab_xx; sqlite> .output stdout 导出完毕.(1)创建数据库
在命令行中切换到sqlite.exe所在的文件夹 在命令中键入sqlite3 test.db;即可创建了一个名为test.db的数据库 由于此时的数据库中没有任何表及数据存在,这时候是看不到test.db的,必须往里面插入一张表即可看到数据库(2)创建表
create table Test(Id Integer primary key, value text); 此时即可完成表的创建,当把主键设为Integer时,则该主键为自动增长,插入数据时,可直接使用如下语句: insert into Test values(null,'Acuzio');(3)获取最后一次插入的主键: select last_insert_rowid();
(4)sqlite>.mode col
sqlite>.headers on 在数据库查询的时候,显示行数和头!(5)在DOS中,键入Ctrl+C,退出数据库,Unix中,使用Ctrl+D
(6)SQLite Master Table Schema
-----------------------------------------------------------------Name Description-----------------------------------------------------------------type The object’s type (table, index, view, trigger)name The object’s nametbl_name The table the object is associated withrootpage The object’s root page index in the database (where it begins)sql The object’s SQL definition (DDL)eg.
sqlite> .mode colsqlite> .headers onsqlite> select type, name, tbl_name, sql from sqlite_master order by type;这样就能看到所有数据库中的信息,表、索引、视图等等(7)导出数据
.output [filename],导出到文件中,如果该文件不存在,则自动创建.dump 导出数据命令.output stdout 返回输出到屏幕(进行其他操作)eg.
sqlite>.output Acuzio.sqlsqlite>.dumpsqlite>.output stdout这样就可以把数据导入到Acuzio.sql中(8)导入数据
导入数据使用.read命令eg.如导入(7)中的数据sqlite>.read Acuio.sql(9)备份数据库
在切换到Sqlite文件夹sqlite3 test.db .dump > test.sql如果在数据库中sqlite> .output file.sqlsqlite> .dumpsqlite> .exit(10)导入数据库
在切换到Sqlite文件夹sqlite3 test.db < test.sql(11)备份二进制格式数据库,vacuum:释放掉已经被删除的空间(数据和表等被删除,不会被清空空间)
sqlite3 test.db VACUUMcp test.db test.backup(12)获取数据库信息
如果想获得物理数据库结构的信息,可以去SQLite网站上下载SQLite Analyzer工具使用: sqlite3_analyzer test.db(13)其他的SQLite工具
SQLite Database Browser (http://sqlitebrowser.sourceforge.net)SQLite Control Center (http://bobmanc.home.comcast.net/sqlitecc.html)SQLiteManager (www.sqlabs.net/sqlitemanager.php)(13)SQLite 与其他数据库不同,它是以(;)来执行语句,而不是(go).
(14)SQLite注释(--)或(/* */)
eg.-- This is a comment on one line/* This is a comment spanningtwo lines */(15)创建表结构
CREATE [TEMP|TEMPORARY] TABLE table_name (column_definitions [, constraints]);
关键字TEMP、TEMPORARY表示创建的是临时表
(16)在SQLite中有5种基本类型:
Integer/Real/Text/Blob/Null(17)确保唯一性可以用关键字UNIQUE
eg.CREATE TABLE contacts ( id INTEGER PRIMARY KEY,name TEXT NOT NULL COLLATE NOCASE,phone TEXT NOT NULL DEFAULT 'UNKNOWN',UNIQUE (name,phone) );(18)修改表
ALTER TABLE table { RENAME TO name | ADD COLUMN column_def }eg.sqlite> ALTER TABLE contactsADD COLUMN email TEXT NOT NULL DEFAULT '' COLLATE NOCASE;sqlite> .schema contactsCREATE TABLE contacts ( id INTEGER PRIMARY KEY,name TEXT NOT NULL COLLATE NOCASE,phone TEXT NOT NULL DEFAULT 'UNKNOWN',email TEXT NOT NULL DEFAULT '' COLLATE NOCASE,UNIQUE (name,phone) );(19)查询
SELECT DISTINCT heading FROM tables WHERE predicateGROUP BY columns HAVING predicateORDER BY columns LIMIT count,offset;(20)Limit和Offset关键字
Limit 指返回记录的最大行数Offset 指跳过多少行数据