- SQL 教程
- SQL - 首页
- SQL - 概述
- SQL - RDBMS 概念
- SQL - 数据库
- SQL - 语法
- SQL - 数据类型
- SQL - 运算符
- SQL - 表达式
- SQL 数据库
- SQL - 创建数据库
- SQL - 删除数据库
- SQL - 选择数据库
- SQL - 重命名数据库
- SQL - 显示数据库
- SQL - 备份数据库
- SQL 表
- SQL - 创建表
- SQL - 显示表
- SQL - 重命名表
- SQL - 截断表
- SQL - 克隆表
- SQL - 临时表
- SQL - 修改表
- SQL - 删除表
- SQL - 删除表
- SQL - 约束
- SQL 查询
- SQL - INSERT 查询
- SQL - SELECT 查询
- SQL - SELECT INTO
- SQL - INSERT INTO SELECT
- SQL - UPDATE 查询
- SQL - DELETE 查询
- SQL - 排序结果
- SQL 视图
- SQL - 创建视图
- SQL - 更新视图
- SQL - 删除视图
- SQL - 重命名视图
- SQL 运算符和子句
- SQL - WHERE 子句
- SQL - TOP 子句
- SQL - DISTINCT 子句
- SQL - ORDER BY 子句
- SQL - GROUP BY 子句
- SQL - HAVING 子句
- SQL - AND & OR
- SQL - BOOLEAN (BIT) 运算符
- SQL - LIKE 运算符
- SQL - IN 运算符
- SQL - ANY, ALL 运算符
- SQL - EXISTS 运算符
- SQL - CASE
- SQL - NOT 运算符
- SQL - 不等于
- SQL - IS NULL
- SQL - IS NOT NULL
- SQL - NOT NULL
- SQL - BETWEEN 运算符
- SQL - UNION 运算符
- SQL - UNION vs UNION ALL
- SQL - INTERSECT 运算符
- SQL - EXCEPT 运算符
- SQL - 别名
- SQL 连接
- SQL - 使用连接
- SQL - INNER JOIN
- SQL - LEFT JOIN
- SQL - RIGHT JOIN
- SQL - CROSS JOIN
- SQL - FULL JOIN
- SQL - 自连接
- SQL - DELETE JOIN
- SQL - UPDATE JOIN
- SQL - LEFT JOIN vs RIGHT JOIN
- SQL - UNION vs JOIN
- SQL 键
- SQL - UNIQUE KEY
- SQL - PRIMARY KEY
- SQL - FOREIGN KEY
- SQL - 组合键
- SQL - 备选键
- SQL 索引
- SQL - 索引
- SQL - 创建索引
- SQL - 删除索引
- SQL - 显示索引
- SQL - UNIQUE 索引
- SQL - 聚集索引
- SQL - 非聚集索引
- 高级 SQL
- SQL - 通配符
- SQL - 注释
- SQL - 注入
- SQL - 托管
- SQL - MIN & MAX
- SQL - NULL 函数
- SQL - CHECK 约束
- SQL - DEFAULT 约束
- SQL - 存储过程
- SQL - NULL 值
- SQL - 事务
- SQL - 子查询
- SQL - 处理重复项
- SQL - 使用序列
- SQL - 自动递增
- SQL - 日期和时间
- SQL - 游标
- SQL - 公共表表达式
- SQL - GROUP BY vs ORDER BY
- SQL - IN vs EXISTS
- SQL - 数据库调优
- SQL 函数参考
- SQL - 日期函数
- SQL - 字符串函数
- SQL - 聚合函数
- SQL - 数值函数
- SQL - 文本和图像函数
- SQL - 统计函数
- SQL - 逻辑函数
- SQL - 游标函数
- SQL - JSON 函数
- SQL - 转换函数
- SQL - 数据类型函数
- SQL 有用资源
- SQL - 问答
- SQL - 快速指南
- SQL - 有用函数
- SQL - 有用资源
- SQL - 讨论
SQL - ALTER TABLE
SQL − ALTER TABLE 语句
SQL 的ALTER TABLE 命令是数据定义语言 (DDL) 的一部分,用于修改表结构。ALTER TABLE 命令可以添加或删除列、创建或删除索引、更改现有列的类型,或重命名列或表本身。
ALTER TABLE 命令还可以更改表的特性,例如表使用的存储引擎。在我们的示例中,我们将使用下表:
ID | 姓名 | 年龄 | 地址 | 薪水 |
---|---|---|---|---|
1 | Ramesh | 32 | Ahmedabad | 2000.00 |
2 | Khilan | 25 | Delhi | 1500.00 |
3 | Kaushik | 23 | Kota | 2000.00 |
4 | Chaitali | 25 | Mumbai | 6500.00 |
5 | Hardik | 27 | Bhopal | 8500.00 |
6 | Komal | 22 | Hyderabad | 4500.00 |
7 | Muffy | 24 | Indore | 10000.00 |
语法
以下是 ALTER TABLE 命令的基本语法:
ALTER TABLE table_name [alter_option ...];
其中,alter_option 取决于要对表执行的操作类型。本文将逐一讨论这些重要操作。
ALTER TABLE − 添加列
如果需要向表中添加新列,应将ADD COLUMN 选项与 ALTER TABLE 语句一起使用,如下所示:
ALTER TABLE table_name ADD column_name datatype;
示例
以下是向现有表中添加新列的示例:
ALTER TABLE CUSTOMERS ADD SEX char(1);
输出
执行上述查询将产生以下输出:
Query OK, 0 rows affected (0.09 sec) Records: 0 Duplicates: 0 Warnings: 0
验证
要验证是否通过添加新列 SEX 来更改 CUSTOMERS 表,请使用 SELECT 语句检索表的记录:
SELECT * FROM CUSTOMERS;
现在,CUSTOMERS 表将显示如下:
ID | 姓名 | 年龄 | 地址 | 薪水 | 性别 |
---|---|---|---|---|---|
1 | Ramesh | 32 | Ahmedabad | 2000.00 | NULL |
2 | Khilan | 25 | Delhi | 1500.00 | NULL |
3 | Kaushik | 23 | Kota | 2000.00 | NULL |
4 | Chaitali | 25 | Mumbai | 6500.00 | NULL |
5 | Hardik | 27 | Bhopal | 8500.00 | NULL |
6 | Komal | 22 | Hyderabad | 4500.00 | NULL |
7 | Muffy | 24 | Indore | 10000.00 | NULL |
ALTER TABLE − 删除列
如果需要从表中删除现有列,应将 DROP COLUMN 选项与 ALTER TABLE 语句一起使用,如下所示。
ALTER TABLE table_name DROP COLUMN column_name;
示例
以下是从现有表中删除 sex 列的示例。
ALTER TABLE CUSTOMERS DROP COLUMN SEX;
输出
执行上述查询将产生以下输出:
Query OK, 0 rows affected (0.07 sec) Records: 0 Duplicates: 0 Warnings: 0
验证
要验证是否通过删除现有列 SEX 来更改 CUSTOMERS 表,请使用 SELECT 语句检索表的记录:
SELECT * FROM CUSTOMERS;
现在,CUSTOMERS 表已更改,SELECT 语句的输出如下。
ID | 姓名 | 年龄 | 地址 | 薪水 |
---|---|---|---|---|
1 | Ramesh | 32 | Ahmedabad | 2000.00 |
2 | Khilan | 25 | Delhi | 1500.00 |
3 | Kaushik | 23 | Kota | 2000.00 |
4 | Chaitali | 25 | Mumbai | 6500.00 |
5 | Hardik | 27 | Bhopal | 8500.00 |
6 | Komal | 22 | Hyderabad | 4500.00 |
7 | Muffy | 24 | Indore | 10000.00 |
ALTER TABLE − 添加索引
可以使用 ADD INDEX 语句以及 ALTER 语句向表的现有列添加索引:
ALTER TABLE table_name ADD INDEX index_name [index_type]
示例
以下查询在 CUSTOMERS 表的 NAME 列上添加索引:
ALTER TABLE CUSTOMERS ADD INDEX name_index (NAME);
输出
输出将显示为:
Query OK, 0 rows affected (0.003 sec) Records: 0 Duplicates: 0 Warnings: 0
ALTER TABLE − 删除索引
可以使用 DROP INDEX 语句以及 ALTER 语句从表中删除现有索引:
ALTER TABLE table_name DROP INDEX index_name;
示例
以下查询在 CUSTOMERS 表的 NAME 列上添加索引:
ALTER TABLE CUSTOMERS DROP INDEX name_index;
输出
输出将显示为:
Query OK, 0 rows affected (0.003 sec) Records: 0 Duplicates: 0 Warnings: 0
ALTER TABLE − 添加主键
以下是向数据库现有表中添加主键的语法:
ALTER TABLE table_name ADD CONSTRAINT constraint_name PRIMARY KEY (column1, column2...);
示例
在向现有表添加主键之前,让我们先创建一个名为 EMPLOYEES 的新表,如下所示
CREATE TABLE EMPLOYEES( ID INT NOT NULL, NAME VARCHAR (20) NOT NULL, AGE INT NOT NULL, ADDRESS CHAR (25), SALARY DECIMAL (18, 2) );
以下查询在 EMPLOYEES 表的 ID 列上添加主键约束:
ALTER TABLE EMPLOYEES ADD CONSTRAINT MyPrimaryKey PRIMARY KEY(ID);
这将产生以下输出:
Query OK, 0 rows affected, 1 warning (0.003 sec) Records: 0 Duplicates: 0 Warnings: 1
验证
要验证上述查询,如果使用 DESC EMPLOYEES 命令描述表:
DESC EMPLOYEES;
这将显示所创建表的结构:列名、它们各自的数据类型、约束(如果有)等。
字段 | 类型 | 空值 | 键 | 默认值 | 额外 |
---|---|---|---|---|---|
ID | int(11) | 否 | PRI | NULL | |
姓名 | varchar(20) | 否 | NULL | ||
年龄 | int(11) | 否 | NULL | ||
地址 | char(25) | 是 | NULL | ||
薪水 | decimal(18,2) | 是 | NULL |
ALTER TABLE − 删除主键
以下是从数据库现有表中删除主键的语法:
ALTER TABLE table_name DROP PRIMARY KEY;
示例
以下查询从 EMPLOYEES 表的 ID 列中删除主键约束:
ALTER TABLE EMPLOYEES DROP PRIMARY KEY;
这将产生以下输出:
Query OK, 0 rows affected, 1 warning (0.003 sec) Records: 0 Duplicates: 0 Warnings: 1
ALTER TABLE − 添加约束
以下是向现有表列添加唯一约束的语法:
ALTER TABLE table_name ADD CONSTRAINT constraint_name UNIQUE(column1, column2...);
示例
以下查询向 CUSTOMERS 表添加 UNIQUE 约束:
ALTER TABLE EMPLOYEES ADD CONSTRAINT CONST UNIQUE(NAME);
这将产生以下输出:
Query OK, 0 rows affected (0.003 sec) Records: 0 Duplicates: 0 Warnings: 0
ALTER TABLE − 删除约束
以下是删除现有表唯一约束的语法:
ALTER TABLE table_name DROP CONSTRAINT constraint_name;
示例
以下查询向 CUSTOMERS 表添加 UNIQUE 约束:
ALTER TABLE EMPLOYEES DROP CONSTRAINT CONST;
这将产生以下输出:
Query OK, 0 rows affected (0.003 sec) Records: 0 Duplicates: 0 Warnings: 0
ALTER TABLE − 重命名列
以下是重命名现有表列名的语法:
ALTER TABLE table_name RENAME COLUMN old_column_name to new_column_name;
示例
以下查询重命名 CUSTOMERS 表中的 NAME 列:
ALTER TABLE CUSTOMERS RENAME COLUMN name to full_name;
这将产生以下输出:
Query OK, 0 rows affected (0.002 sec) Records: 0 Duplicates: 0 Warnings: 0
ALTER TABLE − 修改数据类型
以下是更改 MySQL、MS Server 和 Oracle 中任何列的数据类型的语法。
SQL Server/MS Access 语法
ALTER TABLE table_name ALTER COLUMN column_name datatype;
MySQL 语法
ALTER TABLE table_name MODIFY COLUMN column_name datatype;
Oracle 语法
ALTER TABLE table_name MODIFY COLUMN column_name datatype;
示例
以下查询修改 MySQL CUSTOMERS 表中 SALARY 列的数据类型:
ALTER TABLE CUSTOMERS MODIFY COLUMN ID DECIMAL(18, 4);
这将产生以下输出:
Query OK, 0 rows affected (0.003 sec) Records: 0 Duplicates: 0 Warnings: 0