Android SQLite alter列以删除约束
我有一个具有NOTNULL约束的列。我需要修改数据库以删除约束。但当我尝试时,我从android获得了一个重复的列异常Android SQLite alter列以删除约束,android,sqlite,android-sqlite,Android,Sqlite,Android Sqlite,我有一个具有NOTNULL约束的列。我需要修改数据库以删除约束。但当我尝试时,我从android获得了一个重复的列异常 db.execSQL("ALTER TABLE " + AnimalContract.DogEntry.TABLE_NAME + " ADD COLUMN " + AnimalContract.DogEntry.COLUMN_NAME+" TEXT DEFAULT NULL"); 我也没有默认地尝试过 约束是UNIQUE NOT NULL在SQLite中没有直接方法更改列 我
db.execSQL("ALTER TABLE " + AnimalContract.DogEntry.TABLE_NAME
+ " ADD COLUMN " + AnimalContract.DogEntry.COLUMN_NAME+" TEXT DEFAULT NULL");
我也没有默认地尝试过
约束是
UNIQUE NOT NULL
在SQLite中没有直接方法更改列
我相信你唯一的选择是:
- 将表重命名为临时名称
- 创建没有NOTNULL约束的新表
- 将旧表的内容复制到新表
- 移走那张旧桌子
PRAGMA foreign_keys=off;
BEGIN TRANSACTION;
ALTER TABLE table1 RENAME TO _table1_old;
CREATE TABLE table1 (
( column1 datatype [ NULL | NOT NULL ],
column2 datatype [ NULL | NOT NULL ],
...
);
INSERT INTO table1 (column1, column2)
SELECT column1, column2
FROM _table1_old;
COMMIT;
PRAGMA foreign_keys=on;
CREATE TABLE employees
( employee_id INTEGER PRIMARY KEY AUTOINCREMENT,
last_name CHAR NOT NULL,
first_name VARCHAR,
hire_date DATE
);
PRAGMA foreign_keys=off;
BEGIN TRANSACTION;
ALTER TABLE employees RENAME TO _employees_old;
CREATE TABLE employees
( employee_id INTEGER PRIMARY KEY AUTOINCREMENT,
last_name VARCHAR NOT NULL,
first_name VARCHAR,
hire_date DATE
);
INSERT INTO employees (employee_id, last_name, first_name, hire_date)
SELECT employee_id, last_name, first_name, hire_date
FROM _employees_old;
COMMIT;
PRAGMA foreign_keys=on;