PostgreSQL ALTER TABLE怎么用?怎么修改数据库表结构?SQL语句实战怎么写?

文章导读
ALTER TABLE 是 PostgreSQL 中用于修改现有表结构的命令。它可以添加、删除或修改列、更改表名、重命名列、添加约束等。基本语法:ALTER TABLE table_name action; 常见操作包括 ADD COLUMN 添加列、DROP COLUMN 删除列、ALTER COLUMN 修改列类型或默认值、RENAME TO 重命名等。下面是实战SQL语句示例:ALTER T
📋 目录
  1. 添加列
  2. 删除列
  3. 修改列类型
  4. 添加主键或约束
  5. 重命名表或列
  6. 设置默认值
  7. 实战完整示例
A A

ALTER TABLE 是 PostgreSQL 中用于修改现有表结构的命令。它可以添加、删除或修改列、更改表名、重命名列、添加约束等。基本语法:ALTER TABLE table_name action; 常见操作包括 ADD COLUMN 添加列、DROP COLUMN 删除列、ALTER COLUMN 修改列类型或默认值、RENAME TO 重命名等。下面是实战SQL语句示例:ALTER TABLE users ADD COLUMN email VARCHAR(255); ALTER TABLE users DROP COLUMN phone; ALTER TABLE users ALTER COLUMN age TYPE INTEGER; ALTER TABLE users RENAME TO user_accounts; ALTER TABLE users ADD CONSTRAINT unique_email UNIQUE (email);

添加列

要给表添加新列,使用 ALTER TABLE table_name ADD COLUMN column_name data_type; 例如:ALTER TABLE products ADD COLUMN price DECIMAL(10,2); 这会添加一个名为 price 的十进制列,默认值 NULL。

删除列

删除列使用 ALTER TABLE table_name DROP COLUMN column_name; 如 ALTER TABLE employees DROP COLUMN salary; 注意:这会永久删除列及其数据,无法直接恢复。

修改列类型

更改列的数据类型:ALTER TABLE orders ALTER COLUMN order_date TYPE DATE USING order_date::DATE; USING 子句指定转换方式,避免类型不兼容错误。

添加主键或约束

添加主键:ALTER TABLE books ADD PRIMARY KEY (id); 添加外键:ALTER TABLE orders ADD CONSTRAINT fk_customer FOREIGN KEY (customer_id) REFERENCES customers(id); 添加唯一约束:ALTER TABLE users ADD UNIQUE (username);

PostgreSQL ALTER TABLE怎么用?怎么修改数据库表结构?SQL语句实战怎么写?

重命名表或列

重命名表:ALTER TABLE old_name RENAME TO new_name; 重命名列:ALTER TABLE users RENAME COLUMN name TO full_name;

设置默认值

ALTER TABLE products ALTER COLUMN status SET DEFAULT 'active'; 这会为新插入的行设置默认状态。

实战完整示例

假设有一个表 employees,我们来修改它:-- 添加列 ALTER TABLE employees ADD COLUMN department VARCHAR(50); -- 修改列类型 ALTER TABLE employees ALTER COLUMN salary TYPE DECIMAL(10,2); -- 添加约束 ALTER TABLE employees ADD CONSTRAINT check_salary CHECK (salary > 0); -- 删除列 ALTER TABLE employees DROP COLUMN old_field;

FAQ
Q: ALTER TABLE 可以同时执行多个操作吗?
A: 是的,使用多个 ALTER TABLE 语句,或在某些版本用 ALTER TABLE table ADD COLUMN col1 type, ADD COLUMN col2 type;
Q: 删除列后数据能恢复吗?
A: 不能直接恢复,建议先备份表或使用事务测试。
Q: 如何修改列的 NOT NULL 约束?
A: ALTER TABLE table ALTER COLUMN col SET NOT NULL; 或 DROP NOT NULL;
Q: ALTER TABLE 会锁表吗?
A: 是的,会获取 ACCESS EXCLUSIVE 锁,长时间操作可能阻塞其他查询。