【MySQL进阶之路丨第十三篇】一文带你精通MySQL之ALTER命令及序列使用

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 【MySQL进阶之路丨第十三篇】一文带你精通MySQL之ALTER命令及序列使用



MySQL ALTER命令

MySQL ALTER 命令用于修改已存在的数据库表结构,包括添加、修改或删除列,修改表名以及修改其他表属性。使用 ALTER 命令,可以根据需要动态地修改数据库模式。

以下是 ALTER 命令的一些常见用法:

1.添加列:

ALTER TABLE table_name ADD column_name datatype;

2.修改列的数据类型:

ALTER TABLE table_name MODIFY column_name new_datatype;

3.修改列名:

ALTER TABLE table_name RENAME COLUMN old_column_name TO new_column_name;

4.修改列的默认值:

ALTER TABLE table_name ALTER COLUMN column_name SET DEFAULT default_value;

5.删除列:

ALTER TABLE table_name DROP COLUMN column_name;

6.修改表名:

ALTER TABLE table_name RENAME TO new_table_name;

7.添加主键约束:

ALTER TABLE table_name ADD PRIMARY KEY (column_name);

8.添加外键约束:

ALTER TABLE table_name ADD CONSTRAINT constraint_name FOREIGN KEY (column_name) REFERENCES referenced_table(ref_column);

9.添加唯一约束:

ALTER TABLE table_name ADD CONSTRAINT constraint_name UNIQUE (column_name);

10.修改表的存储引擎:

ALTER TABLE table_name ENGINE = engine_name;

11.创建普通索引:

ALTER TABLE table_name
ADD INDEX index_name (column1 [ASC|DESC], column2 [ASC|DESC], ...);

12.创建唯一索引:

ALTER TABLE table_name
ADD UNIQUE INDEX index_name (column1 [ASC|DESC], column2 [ASC|DESC], ...);

13.删除索引:

ALTER TABLE table_name
DROP INDEX index_name;

删除添加字段

举个例子:

现有一表结构如下:

我们可以使用 ALTER 命令及 DROP 子句来删除以上创建表的 i 字段:

ALTER TABLE testalter_tbl  DROP i;

结果如下所示:

注意:如果数据表中只剩余一个字段则无法使用DROP来删除字段。

我们可以使用 ADD 子句来向数据表中添加列,如下实例在表 testalter_tbl 中添加 i 字段,并定义数据类型:

ALTER TABLE testalter_tbl ADD i INT;

结果如图所示:

执行以上命令后,i 字段会自动添加到数据表字段的末尾。

如果你需要指定新增字段的位置,可以使用MySQL提供的关键字 FIRST (设定位第一列), AFTER 字段名(设定位于某个字段之后)。

举个例子:

ALTER TABLE testalter_tbl ADD Y INT FIRST;

这样就能使Y字段添加到数据表字段的开头:

修改字段类型及名称

如果需要修改字段类型及名称, 我们可以在ALTER命令中使用 MODIFY 或 CHANGE 子句 。

使用 MODIFY 子句,把字段 c 的类型从 CHAR(1) 改为 CHAR(10),可以执行以下命令:

ALTER TABLE testalter_tbl MODIFY c CHAR(10);

结果如下所示:

使用 CHANGE 子句,语法有很大的不同。 在 CHANGE 关键字之后,紧跟着的是你要修改的字段名,然后指定新字段名及类型。

ALTER TABLE testalter_tbl CHANGE i j BIGINT;
-- 这将修改i字段为j字段,并指定类型为bigint

结果如下所示:

我们也可以使用 CHANGE 子句达到不修改字段名、仅修改类型的目的:

ALTER TABLE testalter_tbl CHANGE c c INT;

执行结果如下所示:

修改表名

如果需要修改数据表的名称,可以在 ALTER TABLE 语句中使用 RENAME 子句来实现。

ALTER TABLE testalter_tbl RENAME TO qiushuo_tbl;

将数据表 testalter_tbl 重命名为 qiushuo_tbl:

MySQL 序列使用

MySQL中没有内置的序列(Sequence)功能,不像某些其他数据库管理系统(如Oracle)提供了序列生成器。然而,我们可以通过使用自增主键列(Auto Increment Primary Key)来实现类似的功能。

在MySQL中,可以在创建表时为某一列设置自增属性,使该列成为自增主键。每次插入新记录时,系统会自动为这一列生成一个唯一的递增值。

以下是创建带有自增主键列的示例表的SQL语句:

CREATE TABLE 表名 (
    id INT AUTO_INCREMENT PRIMARY KEY,
    列1 数据类型,
    列2 数据类型,
    ...
);

在上述示例中,"id"列被定义为自增主键列,并且设置为INT数据类型。每次插入新记录时,MySQL会自动为"id"列生成唯一的递增值。

我们可以使用INSERT INTO语句向包含自增主键列的表中插入新记录,例如:

INSERT INTO 表名 (列1, 列2, ...)
VALUES (值1, 值2, ...);

在执行INSERT INTO语句时,不需要为自增主键列指定值,MySQL会自动为其生成递增的唯一值。

什么意思呢?举个例子,下图是一张users表,其中id列被定义为自增主键列,id最大为15。

如果我们在一个user表中插入username和password,而不插入id,也就是:

INSERT INTO USERS (username, password)
VALUES
    ('qiu', '1'),
    ('user2', 'pass2'),
    ('user3', 'pass3');

执行语句后,qiu、user2、user3自动补到了id为15的用户后面:

一般情况下序列的开始值为1,但如果你需要指定一个开始值3,可以通过以下语句来实现:

CREATE TABLE 表名
    (
    id INT UNSIGNED NOT NULL AUTO_INCREMENT,
    PRIMARY KEY (id),
    name VARCHAR(30)
)auto_increment=3

如下图所示:

总结

以上为 【MySQL进阶之路丨第十三篇】,带领读者掌握 MySQL ALTER命令及序列使用,通过具体实操实现对MySQL数据库的深度理解。

MySQL系列将持续更新,欢迎订阅收藏。


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
3月前
|
存储 关系型数据库 MySQL
初步了解MySQL数据库的基本命令
初步了解MySQL数据库的基本命令
39 0
|
4月前
|
存储 SQL 关系型数据库
MySQL语句详解:从基础到进阶的全面指南
MySQL语句详解:从基础到进阶的全面指南
|
1月前
|
tengine 关系型数据库 MySQL
Tengine、Nginx安装MySQL数据库命令教程
本指南详细介绍了在Linux系统上安装与配置MySQL数据库的步骤。首先通过下载并安装MySQL社区版本,接着启动MySQL服务,使用`systemctl start mysqld.service`命令。若启动失败,可尝试使用`sudo /etc/init.d/mysqld start`。利用`systemctl status mysqld.service`检查MySQL的服务状态,确保其处于运行中。通过日志文件获取初始密码,使用该密码登录数据库,并按要求更改初始密码以增强安全性。随后创建一个名为`tengine`的数据库,最后验证数据库创建是否成功以及完成整个设置流程。
|
2月前
|
存储 关系型数据库 MySQL
MySQL基础命令及使用示例
这些基础命令构成了与MySQL数据库交互的核心,理解并掌握它们对于进行有效的数据库操作至关重要。在实际使用中,建议结合实际案例和需求来练习这些命令,以加深理解和提高效率。
27 3
|
2月前
|
存储 关系型数据库 MySQL
MySQL基础命令及使用示例
这些基础命令构成了与MySQL数据库交互的核心,理解并掌握它们对于进行有效的数据库操作至关重要。在实际使用中,建议结合实际案例和需求来练习这些命令,以加深理解和提高效率。
57 4
|
1月前
|
关系型数据库 MySQL 数据库
Mysql 常用命令
Mysql 常用命令
22 0
|
4月前
|
存储 关系型数据库 MySQL
(十五)MySQL命令大全:以后再也不用担心忘记SQL该怎么写啦~
相信大家在编写SQL时一定有一个困扰,就是明明记得数据库中有个命令/函数,可以实现自己需要的功能,但偏偏不记得哪个命令该怎么写了,这时只能靠盲目的去百度,以此来寻找自己需要的命令。
152 28
|
4月前
|
SQL 关系型数据库 MySQL
MySQL删除表数据、清空表命令(truncate、drop、delete 区别)
MySQL删除表数据、清空表命令(truncate、drop、delete区别) 使用原则总结如下: 当你不需要该表时(删除数据和结构),用drop; 当你仍要保留该表、仅删除所有数据表内容时,用truncate; 当你要删除部分记录、且希望能回滚的话,用delete;
|
4月前
|
存储 关系型数据库 MySQL
MySQL数据库开发进阶:精通数据库表的创建与管理22
【7月更文挑战第22天】数据库的创建与删除,数据表的创建与管理
48 1
|
4月前
|
SQL 关系型数据库 MySQL
mysql性能调优:EXPLAIN命令21
【7月更文挑战第21天】掌握SQL性能调优:深入解析EXPLAIN命令的神奇用法!
58 1