在使用sql语句修改命名错误的字段名称时,指令报错。
一、解决
网上搜索,博主说SQLite 仅仅支持 ALTER TABLE 语句的一部分功能,可以向表中增加一个字段(列),但是不能删除一个已经存在的字段,或者更改一个已经存在的字段的名称、数据类型等。
另外在使用外键时需要开启:
PRAGMA foreign_keys = ON;
所以若要修改某段结构时,只能重命名,再新建一份,然后导入数据:
//运行
./sqlite3
//打开数据库
.open demodb.db3
//查看已有数据表
sqlite> .tables
//查看所有表信息
sqlite> .schema
//查看表结构
sqlite> pragma table_info(studInfo);
//重命名表
sqlite> alter table majors rename to _majors_old;
//新建表
sqlite> create table majors(
majorID int primary key not null,
major varchar(40) not null,departID int ,
foreign key(departID) references departments(departID)
);
//将旧表导入数据
sqlite> insert into majors(majorID,major,departID) select "majorsID","major","departID" from _majors_old
二、测试
sqlite> create table majors(majorID int primary key not null,major varchar(40) not null,departID int ,foreign key(departID) references departments(departID));
sqlite> .tables
_majors_old departments employee majors studInfo
sqlite> insert into majors(majorID,major,departID) select "majorsID","major","departID" from _majors_old
...> ;
sqlite> .schema
CREATE TABLE departments(departID int PRIMARY KEY NOT NULL,department VARCHAR(40) NOT NULL);
CREATE TABLE employee(
empNo int primary key not null,
Name varchar(20) not null,
Gender varchar(4) default('男'),
Birthday date,
Province varchar(20),
Department varchar(30),
Salary float deufalt(5000),
Photo blob,
Memo memo);
CREATE TABLE IF NOT EXISTS "_majors_old"(majorsID int primary key not null,major varchar(40) not null,departID int ,foreign key(departID) references departments(departID));
CREATE TABLE studInfo(studID int primary key not null,name varchar(10) not null,gender varchar(4),departID int,majorID int,foreign key(departID) references departments(departID),foreign key(majorID) references "_majors_old"(majorsID));
CREATE TABLE majors(majorID int primary key not null,major varchar(40) not null,departID int ,foreign key(departID) references departments(departID));
三、结果
新表数据:
旧表数据:
参考