CREATE TABLE IF NOT EXISTS employees (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
age INTEGER CHECK (age >= 18),
department_id INTEGER,
FOREIGN KEY (department_id) REFERENCES departments(id)
);
关键说明:
数据类型:支持 INTEGER、TEXT、REAL(浮点数)、BLOB(二进制)等。
约束:
PRIMARY KEY:主键(支持 AUTOINCREMENT 自增)。
NOT NULL:禁止空值。
UNIQUE:列值唯一。
CHECK:自定义条件(如 age >= 18)。
FOREIGN KEY:外键关联。
(2)修改表(ALTER TABLE)
SQLite 的 ALTER TABLE 功能有限,仅支持以下操作:
sql复制代码
-- 重命名表
ALTER TABLE 旧表名 RENAME TO 新表名;
-- 示例:ALTER TABLE employees RENAME TO staff;
-- 添加列
ALTER TABLE 表名 ADD COLUMN 列名 数据类型 [约束];
-- 示例:ALTER TABLE staff ADD COLUMN email TEXT UNIQUE;
(3)删除表(DROP TABLE)
注意:删除表会连带删除所有数据和索引,操作需谨慎。
sql复制代码
DROP TABLE [IF EXISTS] 表名;
-- 示例:DROP TABLE IF EXISTS temp_data;
(4)限制与解决方案
问题:如何实现"删除列"或"修改列"?
由于 SQLite 不支持直接删除列,需通过以下步骤间接实现:
创建新表(含目标列结构)。
将旧表数据导入新表。
删除旧表并重命名新表。
示例(删除 staff 表的 age 列):
sql复制代码
-- 步骤1:创建新表(不含 age 列)
CREATE TABLE new_staff (
id INTEGER PRIMARY KEY,
name TEXT NOT NULL,
email TEXT UNIQUE
);
-- 步骤2:复制数据
INSERT INTO new_staff (id, name, email)
SELECT id, name, email FROM staff;
-- 步骤3:替换表
DROP TABLE staff;
ALTER TABLE new_staff RENAME TO staff;