Sqlite嵌入式数据库的安装、建库、建表、更新表结构以及数据导入导出等等详细过程记录(三)

2014-11-24 14:47:41 · 作者: · 浏览: 3
on test(addr,username);

创建唯一键索引

sqlite> create unique indexidx_unaddr on test(addr);

测试是不是真的唯一约束,添加addr字段值都为’a1’,第一次成功,第二次失败,查看执行结果,如下:

sqlite> insert into testselect 4,'a','a1';

sqlite> insert into testselect 5,'a','a1';

Error: UNIQUE constraint failed:test.addr

sqlite>

报错了,验证了,唯一约束idx_undaddr已经生效。

PS: Sqlite不支持聚集索引,android默认需要一个_id字段,这保证了你插入的数据会按“_id”的整数顺序插入,这个integer类型的主键就会扮演和聚集索引一样的角色。所以不要再在对于声明为:INTEGER PRIMARY KEY的主键上创建索引。

4.4,自增主键

CREATE TABLE test_auto_incre(idINT AUTO_INCREMENT,msg_to VARCHAR(20), TYPE CHAR(1), create_date DATE,PRIMARYKEY (id) );

4.5 查看所有表结构

方法一:

sqlite> .schema

CREATE TABLE "test"(idinteger primary key, username text default ‘’, addr varchar(60) not null default'');

CREATE INDEX idx_username ontest(username);

CREATE INDEX idx_addr ontest(addr,username);

CREATE UNIQUE INDEX idx_unaddron test(addr);

CREATE TABLE test_auto_incre(idINT AUTO_INCREMENT,msg_to VARCHAR(20), TYPE CHAR(1), create_date DATE,PRIMARYKEY (id) );

sqlite>

方法二:

sqlite> .header on –加上显示的表头列名

sqlite> select * fromsqlite_master;

type|name|tbl_name|rootpage|sql

table|test|test|4|CREATE TABLE"test"(id integer primary key, username text default ‘’, addrvarchar(60) not null default '')

index|idx_username|test|2|CREATEINDEX idx_username on test(username)

index|idx_addr|test|5|CREATEINDEX idx_addr on test(addr,username)

index|idx_unaddr|test|6|CREATEUNIQUE INDEX idx_unaddr on test(addr)

table|test_auto_incre|test_auto_incre|7|CREATETABLE test_auto_incre(id INT AUTO_INCREMENT,msg_to VARCHAR(20), TYPE CHAR(1),create_date DATE,PRIMARY KEY (id) )

index|sqlite_autoindex_test_auto_incre_1|test_auto_incre|8|

sqlite>

4.6 查看当前库下所有的表名字

sqlite> .table

test test_auto_incre

sqlite> .tables

test test_auto_incre

4.7 查看某一张表的结构,比如test_auto_incre表:

方法一:查询系统表

select * from sqlite_masterwhere name="test_auto_incre";

sqlite> .header on –加上显示的表头列名

sqlite> select * fromsqlite_master where name="test_auto_incre";

type|name|tbl_name|rootpage|sql

table|test_auto_incre|test_auto_incre|7|CREATETABLE test_auto_incre(id INT AUTO_INCREMENT,msg_to VARCHAR(20), TYPE CHAR(1),create_date DATE,PRIMARY KEY (id) )

sqlite>

方法二:使用.schema命令

sqlite> .schematest_auto_incre

CREATE TABLE test_auto_incre(idINT AUTO_INCREMENT,msg_to VARCHAR(20), TYPE CHAR(1), create_date DATE,PRIMARYKEY (id) );

sqlite>

sqlite> .schema test

CREATE TABLE "test"(idinteger primary key, username text default ‘’, addr varchar(60) not nulldefault '');

CREATE INDEX idx_username ontest(username);

CREATE INDEX idx_addr ontest(addr,username);

CREATE UNIQUE INDEX idx_unaddron test(addr);

sqlite>

4.8 创建虚拟表

CREATE VIRTUAL TABLEfts_message_table_0_tmp USING fts3(usernameid INTEGER DEFAULT 0, MesLocalIDINTEGER, CreateTime INTEGER DEFAULT 0, Message TEXT, reservedInt INTEGERDEFAULT 0, reservedText TEXT, PRIMARYKEY(usernameid,MesLocalID,CreateTime));

4.9 创建视图

CREATE TABLE test(id INTAUTO_INCREMENT,msg_to VARCHAR(20), TYPE CHAR(1), create_date DATE,PRIMARY KEY(id) );

INSERT INTOtest(msg_to,TYPE,create_date) SELECT 'm1','a','2014-08-18 12:12:23';

INSERT INTOtest(msg_to,TYPE,create_date) SELECT 'm1','b','2014-08-18 13:12:23';

INSERT INTOtest(msg_to,TYPE,create_date) SELECT 'm1','c','2014-08-18 10:12:23';

INSERT INTOtest(msg_to,TYPE,create_d