- MySQL 基础
- MySQL - 首页
- MySQL - 简介
- MySQL - 特性
- MySQL - 版本
- MySQL - 变量
- MySQL - 安装
- MySQL - 管理
- MySQL - PHP 语法
- MySQL - Node.js 语法
- MySQL - Java 语法
- MySQL - Python 语法
- MySQL - 连接
- MySQL - Workbench
- MySQL 数据库
- MySQL - 创建数据库
- MySQL - 删除数据库
- MySQL - 选择数据库
- MySQL - 显示数据库
- MySQL - 复制数据库
- MySQL - 数据库导出
- MySQL - 数据库导入
- MySQL - 数据库信息
- MySQL 用户
- MySQL - 创建用户
- MySQL - 删除用户
- MySQL - 显示用户
- MySQL - 修改密码
- MySQL - 授予权限
- MySQL - 显示权限
- MySQL - 收回权限
- MySQL - 锁定用户账户
- MySQL - 解锁用户账户
- MySQL 表
- MySQL - 创建表
- MySQL - 显示表
- MySQL - 修改表
- MySQL - 重命名表
- MySQL - 克隆表
- MySQL - 截断表
- MySQL - 临时表
- MySQL - 修复表
- MySQL - 描述表
- MySQL - 添加/删除列
- MySQL - 显示列
- MySQL - 重命名列
- MySQL - 表锁定
- MySQL - 删除表
- MySQL - 派生表
- MySQL 查询
- MySQL - 查询
- MySQL - 约束
- MySQL - INSERT 查询
- MySQL - SELECT 查询
- MySQL - UPDATE 查询
- MySQL - DELETE 查询
- MySQL - REPLACE 查询
- MySQL - INSERT IGNORE
- MySQL - INSERT ON DUPLICATE KEY UPDATE
- MySQL - INSERT INTO SELECT
- MySQL 运算符和子句
- MySQL - WHERE 子句
- MySQL - LIMIT 子句
- MySQL - DISTINCT 子句
- MySQL - ORDER BY 子句
- MySQL - GROUP BY 子句
- MySQL - HAVING 子句
- MySQL - AND 运算符
- MySQL - OR 运算符
- MySQL - LIKE 运算符
- MySQL - IN 运算符
- MySQL - ANY 运算符
- MySQL - EXISTS 运算符
- MySQL - NOT 运算符
- MySQL - 不等于运算符
- MySQL - IS NULL 运算符
- MySQL - IS NOT NULL 运算符
- MySQL - BETWEEN 运算符
- MySQL - UNION 运算符
- MySQL - UNION 与 UNION ALL
- MySQL - MINUS 运算符
- MySQL - INTERSECT 运算符
- MySQL - INTERVAL 运算符
- MySQL 连接
- MySQL - 使用连接
- MySQL - INNER JOIN
- MySQL - LEFT JOIN
- MySQL - RIGHT JOIN
- MySQL - CROSS JOIN
- MySQL - FULL JOIN
- MySQL - 自连接
- MySQL - DELETE JOIN
- MySQL - UPDATE JOIN
- MySQL - UNION 与 JOIN
- MySQL 触发器
- MySQL - 触发器
- MySQL - 创建触发器
- MySQL - 显示触发器
- MySQL - 删除触发器
- MySQL - INSERT 之前触发器
- MySQL - INSERT 之后触发器
- MySQL - UPDATE 之前触发器
- MySQL - UPDATE 之后触发器
- MySQL - DELETE 之前触发器
- MySQL - DELETE 之后触发器
- MySQL 数据类型
- MySQL - 数据类型
- MySQL - VARCHAR
- MySQL - BOOLEAN
- MySQL - ENUM
- MySQL - DECIMAL
- MySQL - INT
- MySQL - FLOAT
- MySQL - BIT
- MySQL - TINYINT
- MySQL - BLOB
- MySQL - SET
- MySQL 正则表达式
- MySQL - 正则表达式
- MySQL - RLIKE 运算符
- MySQL - NOT LIKE 运算符
- MySQL - NOT REGEXP 运算符
- MySQL - regexp_instr() 函数
- MySQL - regexp_like() 函数
- MySQL - regexp_replace() 函数
- MySQL - regexp_substr() 函数
- MySQL 函数 & 运算符
- MySQL - 日期和时间函数
- MySQL - 算术运算符
- MySQL - 数值函数
- MySQL - 字符串函数
- MySQL - 聚合函数
- MySQL 其他概念
- MySQL - NULL 值
- MySQL - 事务
- MySQL - 使用序列
- MySQL - 处理重复数据
- MySQL - SQL 注入
- MySQL - 子查询
- MySQL - 注释
- MySQL - 检查约束
- MySQL - 存储引擎
- MySQL - 将表导出到 CSV 文件
- MySQL - 将 CSV 文件导入数据库
- MySQL - UUID
- MySQL - 公共表表达式
- MySQL - ON DELETE CASCADE
- MySQL - Upsert
- MySQL - 水平分区
- MySQL - 垂直分区
- MySQL - 游标
- MySQL - 存储函数
- MySQL - Signal
- MySQL - Resignal
- MySQL - 字符集
- MySQL - 校对规则
- MySQL - 通配符
- MySQL - 别名
- MySQL - ROLLUP
- MySQL - 当天日期
- MySQL - 字面量
- MySQL - 存储过程
- MySQL - Explain
- MySQL - JSON
- MySQL - 标准差
- MySQL - 查找重复记录
- MySQL - 删除重复记录
- MySQL - 选择随机记录
- MySQL - 显示 Processlist
- MySQL - 更改列类型
- MySQL - 重置自动递增
- MySQL - Coalesce() 函数
- MySQL 有用资源
- MySQL - 有用函数
- MySQL - 语句参考
- MySQL - 快速指南
- MySQL - 有用资源
- MySQL - 讨论
MySQL - ALTER 命令
MySQL ALTER 命令
MySQL 的ALTER命令用于修改现有表的结构。它允许您进行各种更改,例如添加、删除或修改表中的列。
此外,ALTER 命令还用于添加和删除与现有表关联的不同约束。
由于此命令修改了表的结构,因此它是 SQL 中数据定义语言的一部分。这也是 ALTER 命令与 UPDATE 命令的区别所在;ALTER 与表的结构交互以修改它,而 UPDATE 仅与表中存在的数据交互,而不会干扰其结构。
语法
以下是 MySQL 中 ALTER 命令的语法:
ALTER TABLE table_name [alter_option ...];
示例
让我们从创建一个名为CUSTOMERS的表开始。
CREATE TABLE CUSTOMERS ( ID INT, NAME VARCHAR(20) );
现在,执行以下查询以显示 CUSTOMERS 表中列的信息。
SHOW COLUMNS FROM CUSTOMERS;
输出
以下是 CUSTOMERS 表的列的详细信息:
字段 | 类型 | 空值 | 键 | 默认值 | 额外 |
---|---|---|---|---|---|
ID | int | YES | NULL | ||
NAME | varchar(20) | YES | NULL |
删除列
要在现有表中删除列,我们使用带有DROP子句的 ALTER TABLE 命令。
示例
在下面的示例中,我们从上面创建的 CUSTOMERS 表中删除一个名为ID的现有列:
ALTER TABLE CUSTOMERS DROP ID;
输出
执行上述查询将产生以下输出:
Query OK, 0 rows affected (0.03 sec) Records: 0 Duplicates: 0 Warnings: 0
验证
要验证 ID 列是否已从 CUSTOMERS 表中删除,请执行以下查询:
SHOW COLUMNS FROM CUSTOMERS;
从下面的输出中可以看到,没有 ID 列存在。因此它被删除了。
字段 | 类型 | 空值 | 键 | 默认值 | 额外 |
---|---|---|---|---|---|
NAME | varchar(20) | YES | NULL |
注意:如果列是表中剩下的唯一一列,则DROP子句将不起作用。
添加列
要向现有表中添加新列,我们使用 ALTER TABLE 命令中的ADD关键字。
示例
在以下查询中,我们向现有表 CUSTOMERS 中添加一个名为 ID 的列。
ALTER TABLE CUSTOMERS ADD ID INT;
输出
执行上述查询将产生以下输出:
Query OK, 0 rows affected (0.02 sec) Records: 0 Duplicates: 0 Warnings: 0
现在,CUSTOMERS 表将包含与您首次创建表时相同的两列。但新添加的 ID 列默认情况下将添加到表的末尾。在这种情况下,它将在 NAME 列之后添加。
验证
让我们使用以下查询进行验证:
SHOW COLUMNS FROM CUSTOMERS;
从下面的输出中可以看到,新添加的 ID 列已插入到表的末尾。
字段 | 类型 | 空值 | 键 | 默认值 | 额外 |
---|---|---|---|---|---|
NAME | varchar(20) | YES | NULL | ||
ID | int | YES | NULL |
重新定位列
如果我们希望列放置在表中的特定位置,我们可以使用FIRST将其设为第一列,或使用AFTER col_name指示新列应放置在col_name之后。
示例
考虑之前修改过的 CUSTOMERS 表,其中 NAME 是第一列,ID 是最后一列。
在以下查询中,我们从表中删除 ID 列,然后将其添加回来,使用FIRST关键字将其定位为表中的第一列:
ALTER TABLE CUSTOMERS DROP ID; ALTER TABLE CUSTOMERS ADD ID INT FIRST;
输出
执行上述查询将产生以下输出:
Query OK, 0 rows affected (0.02 sec) Records: 0 Duplicates: 0 Warnings: 0
验证
现在,让我们验证 CUSTOMERS 表中列的位置:
SHOW COLUMNS FROM CUSTOMERS;
从下面的输出中可以看到,ID 列位于第一位。
字段 | 类型 | 空值 | 键 | 默认值 | 额外 |
---|---|---|---|---|---|
ID | int | YES | NULL | ||
NAME | varchar(20) | YES | NULL |
示例
在这里,我们从表中删除 ID 列,然后将其添加回来,使用AFTER col_name关键字将其定位在 NAME 列之后。
ALTER TABLE CUSTOMERS DROP ID; ALTER TABLE CUSTOMERS ADD ID INT AFTER NAME;
输出
执行上述查询将产生以下输出:
Query OK, 0 rows affected (0.01 sec) Records: 0 Duplicates: 0 Warnings: 0
验证
现在,让我们验证 CUSTOMERS 表中列的位置:
SHOW COLUMNS FROM CUSTOMERS;
从下面的输出中可以看到,ID 列位于第一位。
字段 | 类型 | 空值 | 键 | 默认值 | 额外 |
---|---|---|---|---|---|
NAME | varchar(20) | YES | NULL | ||
ID | int | YES | NULL |
注意:FIRST 和 AFTER 说明符仅适用于 ADD 子句。这意味着,如果要重新定位表中现有的列,则必须先DROP它,然后在新的位置ADD它。
更改列定义或名称
在 MySQL 中,要更改列的定义,我们使用 ALTER 命令结合MODIFY或CHANGE子句。
示例
在下面的查询中,我们使用MODIFY子句将列NAME的定义从 varchar(20) 更改为 INT:
ALTER TABLE CUSTOMERS MODIFY NAME INT;
输出
执行上述查询将产生以下输出:
Query OK, 0 rows affected (0.04 sec) Records: 0 Duplicates: 0 Warnings: 0
验证
现在,让我们验证 CUSTOMERS 表中 NAME 列的定义:
SHOW COLUMNS FROM CUSTOMERS;
我们可以看到,NAME 列的定义已更改为 INT。
字段 | 类型 | 空值 | 键 | 默认值 | 额外 |
---|---|---|---|---|---|
NAME | int | YES | NULL | ||
ID | int | YES | NULL |
示例
我们也可以使用 CHANGE 更改列定义,但语法与 MODIFY 略有不同。在 CHANGE 关键字之后,我们指定要更改的列的名称(两次),然后指定新的定义。
在这里,我们使用CHANGE子句将列ID的定义从 INT 更改为 varchar(20):
ALTER TABLE CUSTOMERS MODIFY ID VARCHAR(20);
输出
执行上述查询将产生以下输出:
Query OK, 0 rows affected (0.04 sec) Records: 0 Duplicates: 0 Warnings: 0
验证
现在,让我们验证 CUSTOMERS 表中 NAME 列的定义:
SHOW COLUMNS FROM CUSTOMERS;
我们可以看到,NAME 列的定义已更改为 INT。
字段 | 类型 | 空值 | 键 | 默认值 | 额外 |
---|---|---|---|---|---|
NAME | int | YES | NULL | ||
ID | varchar(20) | YES | NULL |
更改列的默认值
在 MySQL 中,我们可以使用 **ALTER** 命令和 **DEFAULT** 约束来更改任何列的默认值。
示例
在以下示例中,我们正在 **更改** **NAME** 列的默认值。
ALTER TABLE CUSTOMERS ALTER NAME SET DEFAULT 1000;
输出
执行上述查询将产生以下输出:
Query OK, 0 rows affected (0.02 sec) Records: 0 Duplicates: 0 Warnings: 0
验证
现在,让我们验证 CUSTOMERS 表中 NAME 列的默认值 -
SHOW COLUMNS FROM CUSTOMERS;
我们可以看到,NAME 列的默认值已更改为 1000。
字段 | 类型 | 空值 | 键 | 默认值 | 额外 |
---|---|---|---|---|---|
NAME | int | YES | 1000 | ||
ID | varchar(20) | YES | NULL |
示例
我们可以使用 **ALTER** 命令和 **DROP** 子句从任何列中删除默认约束。
这里,我们正在删除 **NAME** 列的默认约束。
ALTER TABLE CUSTOMERS ALTER NAME DROP DEFAULT;
输出
执行上述查询将产生以下输出:
Query OK, 0 rows affected (0.01 sec) Records: 0 Duplicates: 0 Warnings: 0
验证
现在,让我们验证 CUSTOMERS 表中 NAME 列的默认值 -
SHOW COLUMNS FROM CUSTOMERS;
我们可以看到,NAME 列的默认值已更改为 NULL。
字段 | 类型 | 空值 | 键 | 默认值 | 额外 |
---|---|---|---|---|---|
NAME | int | YES | NULL | ||
ID | varchar(20) | YES | NULL |
更改(重命名)表
要重命名表,请使用 **ALTER TABLE** 语句的 **RENAME** 选项。
示例
以下查询将名为 CUSTOMERS 的表重命名为 BUYERS。
ALTER TABLE CUSTOMERS RENAME TO BUYERS;
输出
执行上述查询将产生以下输出:
Query OK, 0 rows affected (0.02 sec)
验证
现在,让我们验证 CUSTOMERS 表中 NAME 列的默认值 -
SHOW COLUMNS FROM BUYERS;
该表已重命名为 BUYERS,我们可以从其中的列中看到。
字段 | 类型 | 空值 | 键 | 默认值 | 额外 |
---|---|---|---|---|---|
NAME | int | YES | NULL | ||
ID | varchar(20) | YES | NULL |
使用客户端程序更改表
除了使用 MySQL 查询更改 MySQL 数据库中现有表之外,我们还可以使用客户端程序执行 ALTER TABLE 操作。
语法
以下是使用各种编程语言从 MySQL 数据库中更改表的语法 -
要通过 PHP 程序从 MySQL 数据库中更改表,我们需要使用 **mysqli** 函数 **query()** 执行 **Alter** 语句,如下所示 -
$sql = "ALTER TABLE table_name"; $mysqli->query($sql);
要通过 Node.js 程序从 MySQL 数据库中更改表,我们需要使用 **mysql2** 库的 **query()** 函数执行 **Alter** 语句,如下所示 -
sql = "ALTER TABLE table_name"; con.query(sql);
要通过 Java 程序从 MySQL 数据库中更改表,我们需要使用 **JDBC** 函数 **executeUpdate()** 执行 **Alter** 语句,如下所示 -
String sql = "ALTER TABLE table_name"; statement.execute(sql);
要通过 Python 程序从 MySQL 数据库中更改表,我们需要使用 MySQL **Connector/Python** 的 **execute()** 函数执行 **Alter** 语句,如下所示 -
sql = "ALTER TABLE table_name"; cursorObj.execute(sql);
示例
以下是程序 -
$dbhost = 'localhost'; $dbuser = 'root'; $dbpass = 'password'; $dbname = 'TUTORIALS'; $mysqli = new mysqli($dbhost, $dbuser, $dbpass, $dbname); if ($mysqli->connect_errno) { printf("Connect failed: %s
", $mysqli->connect_error); exit(); } // printf('Connected successfully.
'); $sql = "ALTER TABLE testalter_tbl DROP i"; if ($mysqli->query($sql)) { printf("table altered successfully.
"); } if ($mysqli->errno) { printf("table could not alter: %s
", $mysqli->error); } $mysqli->close();
输出
获得的输出如下 -
table altered successfully.
var mysql = require('mysql2'); var con = mysql.createConnection({ host: "localhost", user: "root", password: "Nr5a0204@123" }); //Connecting to MySQL con.connect(function (err){ if (err) throw err; console.log("Connected!"); console.log("--------------------------"); sql = "USE TUTORIALS" con.query(sql); //Altering a table sql = "ALTER TABLE testalter_tbl DROP i"; con.query(sql, function(err){ if (err) throw err console.log("Altered table successfully..."); }); });
输出
产生的输出如下 -
Connected! -------------------------- Altered table successfully...
import java.sql.*; public class AlterTable { public static void main(String[] args){ String url = "jdbc:mysql://127.0.0.1:3306/TUTORIALS"; String username = "root"; String password = "password"; try{ Class.forName("com.mysql.cj.jdbc.Driver"); Connection connection = DriverManager.getConnection(url, username, password); Statement statement = connection.createStatement(); System.out.println("Connected successfully...!"); //Alter table statement...! String sql = "ALTER TABLE testalter_tbl DROP i"; statement.executeUpdate(sql); System.out.println("Table altered successfully...!"); connection.close(); } catch(Exception e){ System.out.println(e); } } }
输出
获得的输出如下所示 -
Connected successfully...! Table altered successfully...!
import mysql.connector #establishing the connection connection = mysql.connector.connect( host='localhost', user='root', password='password', database='tut' ) table_name = 'testalter_tbl' # ALTER TABLE statement alter_statement = 'testalter_tbl DROP i' #Creating a cursor object cursorObj = connection.cursor() cursorObj.execute(f"ALTER TABLE {table_name} {alter_statement}") print(f"Table '{table_name}' is altered successfully.") cursorObj.close() connection.close()
输出
以下是上述代码的输出 -
Table 'testalter_tbl' is altered successfully.