Skip to content

sql-alter-table-command

ALTER TABLE 命令是一个 DDL (数据定义语言) 语句,用于修改现有表的结构。这包括添加、删除或修改列,以及添加和删除约束。

ALTER TABLE 的具体语法在不同的 RDBMS (关系型数据库管理系统) 之间可能差异很大,但其核心操作是相似的。

我们假设有一个 Products 表需要修改。

向表中添加新列:

-- 向 Products 表添加一个名为 'StockQuantity' 的列
ALTER TABLE Products
ADD COLUMN StockQuantity INT NOT NULL DEFAULT 0;

从表中删除列(请谨慎使用,因为这是破坏性操作):

-- 删除我们刚刚添加的 'StockQuantity' 列
ALTER TABLE Products
DROP COLUMN StockQuantity;

更改现有列的数据类型。如果现有数据无法转换为新类型,此操作可能会失败。

-- PostgreSQL / 标准语法
ALTER TABLE Products
ALTER COLUMN ProductName TYPE VARCHAR(150);
-- MySQL 语法
ALTER TABLE Products
MODIFY COLUMN ProductName VARCHAR(150);

更改列的名称:

ALTER TABLE Products
RENAME COLUMN ProductName TO ItemName;

更改整个表的名称:

ALTER TABLE Products
RENAME TO Items;

ALTER TABLE 也用于在表创建后管理约束。

为约束命名是一个好习惯,可以使其在日后更易于管理。

-- 添加 FOREIGN KEY (外键) 约束
ALTER TABLE Products
ADD CONSTRAINT fk_products_supplier
FOREIGN KEY (SupplierID) REFERENCES Suppliers(SupplierID);
-- 添加 CHECK (检查) 约束
ALTER TABLE Products
ADD CONSTRAINT chk_price_positive CHECK (Price > 0);

要删除约束,需要通过其名称来引用它。

-- 删除我们刚刚添加的 CHECK 约束
ALTER TABLE Products
DROP CONSTRAINT chk_price_positive;

修改大型表可能是一个缓慢且资源密集型的操作。在某些数据库系统中,ALTER TABLE 命令可能会锁定整个表,使其在操作期间对用户不可用。始终应谨慎规划和测试此类更改,尤其是在生产环境中。现代数据库和在线模式更改工具通常可以以最小的停机时间执行这些操作。