开发者学堂课程【嵌入式之 RFID 开发与应用2020版:SQLite 补操作复制表以及修改表结构】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/665/detail/11227
SQLite 补操作复制表以及修改表结构
内容介绍:
复制表以及修改表结构
补充介绍组合操作,首先查看表的内容:
sqlite> .schema
CREATE TABLEtbl(id interger ,name text, addr text);
CREATE TABLE tbl2(id interger primary key,name text , addr text) ;
sqlite> select*from tbl;
id
name
a
ddr
---- -------- -------
101
zs
bj
102
ls
tj
103
ww
sh
104
zs
cd
104
xw
cq
sqlite> select*from tbl2;
sqlite>
有两张表,tbl 内容如上,tbl2 内容为空。
Tbl2 的 id 类型已经设置成主键,如果要将 tbl 内容复制到 tbl2 中是不可能的,只有重新创建 tbl2,在创建的同时复制 tbl 内容。
第一种情况,复制表:
/删除 tbl2,创建新表 tbl2,内容来源于 tbl
sqlite> drop table tbl2;
sqlite> .schema
CREATE TABLE tbl(id interger,name textJaddr text);
sqlite- create table tbl2 as select *from tbl;
注:as 是指定复制来源
sqlite> .schema
CREATE TABLE tbl(id interger,name text , addr text) ;
CREATE TABLE tbl2(id INT, name TEXT , addr TEXT);
/再次查看,此时 tbl2 和 tbl 内容一致
sqlite> select*from tbl2;
id
name
addr
---- -------- -------
101
zs
bj
102
ls
tj
103
ww
sh
104
zs
cd
104
xw
cq
如果是复制一部分内容:
sqlite> .schema
CREATE TABLE tbl(id interger,name text, addr text) ;
sqlite> create table tbl2 as select *from tbl where id=104;
sqlite> select*from tbl2;
id
name
addr
---- -------- -------
104
zs
cd
104
xw
cq
sqlite>
第二种情况,修改表结构
/创建新的表,指定信息
sqlite>create table ntbl(id interger primary key , name text ,addr text);.
sqlite> .schema
CREATE TABLE tbl(id interger,name text, addr text);
CREATETABLE tbl2(id INT, name TEXT , addr TEXT);
CREATE TABLE ntbl(id interger primary key,name text, addr text) ;
/导入数据
sqlite> insert into ntbl(id ,name , addr) select id ,name , addr from tbl;
Error: UNIQUE constraint failed: ntbl.id
sqlite>
注意:主键要求不能重复,但是 tbl 中有两个 104
如果有重复,可以不复制重复的内容或者将其删除。
sqlite>delete from tbl where addr='cq';
sqlite> insert into ntbl(id, name , addr) select id,name , addr from tbl;
sqlite> select* from ntbl;
id
name
addr
---- -------- -------
101
zs
bj
102
ls
tj
103
ww
sh
104
zs
cd
/修改表名
之前的 tbl 是没有主键的,现在要加上主键要将tbl删除
sqlite> drop table tbl;
sqlite> .schema
CREATETABLE tbl2(id INT,nameTEXT , addr TEXT);
CREATE TABLE ntbl(id interger primary key,name text , addr text);
sqlite>
sqlite> alter table ntbl rename to tbl;
sqlite> .schema
CREATE TABLE tbl2(id INT, name TEXT , addr TEXT);
CREATE TABLE IF NOT EXISTS"tbl"(id interger primary key ,name text,addr text;
sqlite>select * from tbl;
id
name
addr
---- -------- -------
101
zs
bj
102
ls
tj
103
ww
sh
104
zs
cd
此时,tbl 的 id 就带有主键。
插入数据,执行全值插入:
sqlite> insert into tbl values(105,'xw','cq');
sqlite> select * from tbl;
id
name
addr
---- -------- -------
101
zs
bj
102
ls
tj
103
ww
sh
104
zs
cd
105
sw
cq
现在要求系统自动生成主键,如果只输入内容,不输入主键,可以在主键位置输入( null 大小写都可),之后系统会自动生成:
sqlite> irsert into tbl values (NULL, 'xl' , 'hb' );sqlite> select*from tbl;
id
name
addr
---- -------- -------
101
zs
bj
102
ls
tj
103
ww
sh
104
zs
cd
105
sw
cq
xl
hb
理论上输入 null,作为主键的一列会在已有基础上递增的,但不同平台的效果不一样,这个平台不能递增,需要手动修改。
sqlite> update tbl set id=106 where name='xl';
sqlite> select*from tbl;
id
name
addr
---- -------- -------
101
zs
bj
102
ls
tj
103
ww
sh
104
zs
cd
105
sw
cq
106
xl
hb
正常情况下,主键会自动修改。
以上就是本节课需要补充的内容。
笔记:
1、复制一张表:
create table tbl2 as select * from tbl;
2、复制一张表的部分内容:
create table tbl2 as select * from tbl where id=104;
3、修改表的结构:
第一步,创建新表:
create table ntbl(id interger primary key,name text,addr text);
第二步,导入数据(如果有主键,要注意数据不要重复):
insert into ntbl(id, name , addr) select id,name , addr from tbl
第三步,修改表名:
drop table tbl;
alter table ntbl rename to tbl;