迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 数据库 > MySQL >

在 MySQL 中更改列数据类型或属性

作者:迹忆客 最近更新:2023/03/13 浏览次数:

数据库设计通常是迭代的,随着需求的变化和初始设计的重新调整。MySQL 是一个强大的 RDBMS,它允许使用 ALTER TABLE 关键字修改现有/声明的表列。

本文说明了使用 ALTER TABLE 关键字来修改 MySQL 数据库中现有列的数据类型、约束或属性。

在 MySQL 中更改列数据类型或属性

ALTER TABLE 关键字可以与其他关键字组合以实现必要的修改。在 MySQL 中,CHANGE 关键字是标准 SQL 的主要扩展。

但是,为了与 Oracle 兼容,MODIFY 关键字是一个可用的扩展。

CHANGEMODIFY 关键字实现了相同的结果,但在语法便利性和稳健性方面略有权衡。为了说明这些概念,让我们创建一个带有名为 Details 的表的 programming_languages 数据库。

/* Here goes the definition of the database */
CREATE DATABASE programming_languages;
USE programming_languages;

-- Creating a details table
CREATE TABLE Details(
	id INT NOT NULL AUTO_INCREMENT,
    name VARCHAR(25) UNIQUE,
    year_released VARCHAR (5),
    PRIMARY KEY(id)
    );
-- Populating Details with information
INSERT INTO Details (name, year_released) VALUES ('python', 1991),('c++', 1985),('Java', 1995);
SELECT * FROM Details ORDER BY id;

DESCRIBE Details year_released;  -- Checking the column information

输出:

id	name	year_released
1	python	1991
2	c++		1985
3	Java	1995
-----------------------------------------------------------------------------------------
Field			Type		Null	Key	Default	Extra
year_released	varchar(5)	YES			NULL

让我们修改 year_released 列以实现 YEAR 数据类型而不是 VARCHAR

使用 ALTER TABLE CHANGE 关键字修改 MySQL 数据库表中单个列的数据类型、约束或属性

CHANGE 关键字一次可以对列进行三种类型的修改。

 -- changing the datatype of year_released from VARCHAR to YEAR
 ALTER TABLE Details
 CHANGE year_released year_released YEAR;

 DESCRIBE Details year_released;  -- Running again, to confirm changes

输出:

Field			Type	Null	Key	Default	Extra
year_released	year	YES			NULL

请注意目标列的名称是如何包含两次的。这是使用 CHANGE 的语法不便之处,因为它希望指定修改列的名称。

我们将名称重新指定为 year_released 以保留原始列名称。但是,当需要同时修改属性和列名时,这种假定的不便变得有效。

然后,可以在同一行中执行这样的操作。

例如,让我们将列名更改为 year_of_release 并包含 NOT NULLDEFAULT 约束。

-- Altering YET AGAIN
ALTER TABLE Details
CHANGE year_released year_of_release YEAR NOT NULL DEFAULT '1990';

DESCRIBE Details year_of_release;

输出:

Field			Type	Null	Key	Default	Extra
year_of_release	year	NO			1990

虽然这可行,但更改列名的推荐方法是使用 RENAME COLUMN 关键字。RENAME 只需要列的当前/旧名称和新名称。

ALTER TABLE Details
RENAME COLUMN year_of_release TO year_released;

DESCRIBE Details year_released;  -- Viewing changes

输出:

Field			Type	Null	Key	Default	Extra
year_released	year	NO			1990

有关 CHANGE 关键字用法的更多详细信息,请查看此官方文档

使用 ALTER TABLE MODIFY 关键字修改 MySQL 数据库表中单个列的数据类型、约束或属性

替代的 MODIFY 关键字提供与 CHANGE 关键字相同的功能,但它不支持在其表达式中重命名列。要重命名列,请将 MODIFY 关键字与 RENAME COLUMN 关键字结合起来,如前所述。

这一次,让我们重新定义 name 列以接受具有 NOT NULL 约束的三十 (30) 个字符的 VARCHAR

-- Altering with MODIFY
ALTER TABLE Details
MODIFY name VARCHAR(30) NOT NULL DEFAULT 'None';

DESCRIBE Details name;

输出:

Field	Type		Null	Key	Default	Extra
name	varchar(30)	NO		UNI	None

请注意 UNIQUE 约束如何延续到更改后的列。PRIMARY KEYUNIQUE 等约束不需要重新指定。

现在,让我们将列重命名为 prog_language_name 并通过将 MODIFY 关键字与 RENAME COLUMN 结合使用来允许 NULL 值。

ALTER TABLE Details
-- Allowing Null values by not specifying NOT NULL
MODIFY name VARCHAR(30) DEFAULT 'None';

-- Renaming the column
ALTER TABLE Details
RENAME COLUMN name TO prog_language_name;

-- Viewing the changes
DESCRIBE Details prog_language_name;

输出:

Field				Type		Null	Key	Default	Extra
prog_language_name	varchar(30)	YES		UNI	None

使用 ALTER TABLE 关键字修改 MySQL 数据库表中多列的数据类型、约束或属性

前面说明的方法同样适用于多列。但是,MODIFYCHANGE 语句会根据要更改的列数重复。

有关这方面的更多详细信息,请参阅此参考

让我们为 year_of_releaseprog_language_name 列设置 NOT NULL 约束和默认值。

ALTER TABLE Details
MODIFY prog_language_name VARCHAR(30) NOT NULL DEFAULT 'No Data',
MODIFY year_released year NOT NULL DEFAULT '1950';

DESCRIBE Details

输出:

Field				Type		Null	Key		Default		Extra
id					int			NO		PRI		NULL		auto_increment
prog_language_name	varchar(30)	NO		UNI		No Data
year_released		year		NO				1950

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

使用 Mysqldump 备份 MySQL 中的数据

发布时间:2023/05/09 浏览次数:192 分类:MySQL

本篇文章将介绍如何使用 mysqldump 只备份数据。 在这里,我们将探讨 --no-create-info 、--compact 、--skip-triggers 和 --no-create-db 选项。

更新 MySQL 表中的主键

发布时间:2023/05/09 浏览次数:61 分类:MySQL

本篇文章介绍如何更新 MySQL 表中的主键。 我们将使用 ALTER 命令对主键进行任何更改。更新 MySQL 表中的主键 我们可以在多种情况下更新 MySQL 表中的主键。

在 MySQL 中获取命令历史记录

发布时间:2023/05/09 浏览次数:150 分类:MySQL

本文重点介绍了在 Windows 和 Linux 中获取我们已执行的 MySQL 命令历史记录的各种方法。MySQL命令历史

Oracle 的 decode 函数在 MySQL 中的等价物

发布时间:2023/05/09 浏览次数:115 分类:MySQL

本篇文章介绍了三种替代实现,我们可以将它们用作 MySQL 中 Oracle 的 decode() 函数的等价物。 为此,我们将使用 IF()、CASE 以及 FIELD() 和 ELT() 的组合。

在 Linux 中安装 MySQL 客户端

发布时间:2023/05/09 浏览次数:72 分类:MySQL

在 Linux 中安装 MySQL 客户端的命令。Linux 和 Unix 等环境作为命令行界面工作,仅在命令的帮助下运行。

在 MySQL 中转换为十进制

发布时间:2023/05/09 浏览次数:150 分类:MySQL

有时,我们可能需要将一种数据类型转换为另一种数据类型。 下面是我们如何使用带有 DECIMAL(M,D) 的 CAST() 和 CONVERT() 函数在 MySQL 中转换为十进制。

在 MySQL 中获取当前日期和时间

发布时间:2023/05/09 浏览次数:145 分类:MySQL

本篇文章我们将学习 NOW()、CURRENT_TIMESTAMP()(也写为 CURRENT_TIMESTAMP)和 SYSDATE() 来获取 MySQL 中的当前日期和时间。 我们还将看到这三个功能之间的比较。在 MySQL 中获取当前日期和时间

更改 MySQL 服务器中的 max_allowed_packet Size

发布时间:2023/05/09 浏览次数:142 分类:MySQL

本篇文章介绍如何更改 MySQL 服务器中的 max_allowed_packet 大小。 为了了解这一点,我们将使用两个操作系统,Windows 10 和 Linux (Ubuntu)。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便