MYSQL – ALTER, DROP, RENAME, MODIFY

ALTER 命令是什么?

俗话说,改变是唯一不变的

随着时间的推移,业务需求也在变化。随着业务需求的变化,数据库设计也需要随之改变。

MySQL 提供了 ALTER 函数,帮助我们在现有的数据库设计中加入更改

alter 命令用于修改现有数据库、表、视图或其他在数据库生命周期中可能需要更改的数据库对象。

假设我们已经完成了数据库设计并已实施。我们的数据库用户正在使用它,然后他们意识到设计阶段遗漏了一些关键信息。他们不想丢失现有数据,只想加入新信息。在这些情况下,alter 命令非常有用。我们可以使用 alter 命令更改字段的数据类型,例如从字符串更改为数字,将字段名更改为新名称,甚至在表中添加新列。

ALTER – 语法

向现有表添加列的基本语法如下所示

ALTER TABLE `table_name` ADD COLUMN `column_name` `data_type`;

HERE

  • “ALTER TABLE `table_name`” 是告诉 MySQL 服务器修改名为 `table_name` 的表的命令。
  • “ADD COLUMN `column_name` `data_type`” 是告诉 MySQL 服务器添加一个名为 `column_name`、数据类型为 `data_type` 的新列的命令。

假设 Myflix 推出了在线账单和支付功能。为此,我们被要求在我们的会员表中添加一个信用卡号字段。我们可以使用 ALTER 命令来实现这一点。在进行任何修改之前,我们先看一下会员表的结构。下面的脚本可以帮助我们做到这一点。

SHOW COLUMNS FROM `members`;
Field Type Null Key Default Extra
membership_number int(11) NO PRI NULL auto_increment
full_names varchar(350) NO NULL
gender varchar(6) YES NULL
date_of_birth date YES NULL
physical_address varchar(255) YES NULL
postal_address varchar(255) YES NULL
contact_number varchar(75) YES NULL
email varchar(255) YES NULL

我们可以使用下面的脚本向会员表添加一个新字段。

ALTER TABLE `members` ADD COLUMN `credit_card_number` VARCHAR(25);

在 MySQL 中针对 Myflixdb 执行上述脚本,将一个名为 credit card number 的新列添加到会员表中,数据类型为 VARCHAR。执行 show columns 脚本会得到以下结果。

SHOW COLUMNS FROM `members`;
Field Type Null Key Default Extra
membership_number int(11) NO PRI NULL auto_increment
full_names varchar(350) NO NULL
gender varchar(6) YES NULL
date_of_birth date YES NULL
physical_address varchar(255) YES NULL
postal_address varchar(255) YES NULL
contact_number varchar(75) YES NULL
email varchar(255) YES NULL
credit_card_number varchar(25) YES

从返回的结果中可以看到,credit card number 已添加到会员表中。会员数据的内容不受新列添加的影响。

DROP 命令是什么?

DROP 命令用于

  1. 从 MySQL 服务器删除数据库
  2. 从数据库中删除对象(如表、列)。

现在让我们来看一些使用 DROP 命令的实际示例。

在我们之前关于 Alter 命令的示例中,我们向会员表添加了一个名为 credit card number 的列。

假设在线计费功能还需要一些时间,我们想 DROP 信用卡列

我们可以使用以下脚本

ALTER TABLE `members` DROP COLUMN `credit_card_number`;

执行上述脚本会从会员表中删除名为 credit_card_number 的列

现在让我们看一下会员表中的列,以确认我们的列是否已被删除。

SHOW COLUMNS FROM `members`;

在 MySQL Workbench 中针对 myflixdb 执行上述脚本会得到以下结果。

Field Type Null Key Default Extra
membership_number int(11) NO PRI NULL auto_increment
full_names varchar(350) NO NULL
gender varchar(6) YES NULL
date_of_birth date YES NULL
physical_address varchar(255) YES NULL
postal_address varchar(255) YES NULL
contact_number varchar(75) YES NULL
email varchar(255) YES NULL

请注意,credit card number 已从字段列表中删除。

DROP TABLE

从数据库中 DROP 表的语法如下 –

DROP TABLE `sample_table`;

我们来看一个例子

DROP TABLE `categories_archive`;

执行上述脚本会从我们的数据库中删除名为 `categories_archive` 的表。

RENAME 命令是什么?

rename 命令用于将现有数据库对象(如表、列)的名称更改为新名称

重命名表不会丢失其中包含的任何数据。

语法:-

rename 命令具有以下基本语法。

RENAME TABLE `current_table_name` TO `new_table_name`;

假设我们想将 movierentals 表重命名为 movie_rentals,我们可以使用下面的脚本来实现。

RENAME TABLE `movierentals` TO `movie_rentals`;

执行上述脚本会将 `movierentals` 表重命名为 `movie_rentals`。

我们将把 movie_rentals 表重命名回其原始名称。

RENAME TABLE `movie_rentals` TO `movierentals`;

CHANGE 关键字

Change 关键字允许您

  1. 更改列名
  2. 更改列数据类型
  3. 更改列约束

让我们看一个例子。会员表中的 full names 字段是 varchar 数据类型,宽度为 150。

SHOW COLUMNS FROM `members`;

在 MySQL Workbench 中针对 myflixdb 执行上述脚本会得到以下结果。

Field Type Null Key Default Extra
membership_number int(11) NO PRI NULL auto_increment
full_names varchar(150) NO NULL
gender varchar(6) YES NULL
date_of_birth date YES NULL
physical_address varchar(255) YES NULL
postal_address varchar(255) YES NULL
contact_number varchar(75) YES NULL
email varchar(255) YES NULL

假设我们想

  1. 将字段名从“full_names”更改为“fullname”
  2. 将其更改为 char 数据类型,宽度为 250
  3. 添加 NOT NULL 约束

我们可以使用 change 命令来完成此操作,如下所示 –

ALTER TABLE `members` CHANGE COLUMN `full_names` `fullname` char(250) NOT NULL;

在 MySQL Workbench 中针对 myflixdb 执行上述脚本,然后执行上面给出的 show columns 脚本,得到以下结果。

Field Type Null Key Default Extra
membership_number int(11) NO PRI NULL auto_increment
fullnames char(250) NO NULL
gender varchar(6) YES NULL
date_of_birth date YES NULL
physical_address varchar(255) YES NULL
postal_address varchar(255) YES NULL
contact_number varchar(75) YES NULL
email varchar(255) YES NULL

MODIFY 关键字

MODIFY 关键字允许您

  1. 修改列数据类型
  2. 修改列约束

在上面的 CHANGE 示例中,我们必须更改字段名以及其他详细信息。在 CHANGE 语句中省略字段名将导致错误。假设我们只希望更改字段的数据类型和约束而不影响字段名,我们可以使用 MODIFY 关键字来实现。

下面的脚本将“fullname”字段的宽度从 250 更改为 50。

ALTER TABLE `members`MODIFY `fullname` char(50) NOT NULL;

在 MySQL Workbench 中针对 myflixdb 执行上述脚本,然后执行上面给出的 show columns 脚本,得到以下结果。

Field Type Null Key Default Extra
membership_number int(11) NO PRI NULL auto_increment
fullnames char(50) NO NULL
gender varchar(6) YES NULL
date_of_birth date YES NULL
physical_address varchar(255) YES NULL
postal_address varchar(255) YES NULL
contact_number varchar(75) YES NULL
email varchar(255) YES NULL

AFTER 关键字

假设我们想在表中特定位置添加一个新列。

我们可以使用 alter 命令以及 AFTER 关键字。

下面的脚本在会员表的 date of birth 字段之后添加了“date_of_registration”。

ALTER TABLE  `members` ADD  `date_of_registration` date NULL AFTER  `date_of_birth`;

在 MySQL Workbench 中针对 myflixdb 执行上述脚本,然后执行上面给出的 show columns 脚本,得到以下结果。

Field Type Null Key Default Extra
membership_number int(11) NO PRI NULL auto_increment
fullnames char(50) NO NULL
gender varchar(6) YES NULL
date_of_birth date YES NULL
date_of_registration date YES NULL
physical_address varchar(255) YES NULL
postal_address varchar(255) YES NULL
contact_number varchar(75) YES NULL
email varchar(255) YES NULL
Note: The Hilighted row is added after date_of_birth cloumn

摘要

  • 当我们想修改数据库或数据库中包含的任何对象时,就会使用 alter 命令。
  • drop 命令用于从 MySQL 服务器删除数据库或数据库内的对象。
  • rename 命令用于将表名更改为新表名。
  • Change 关键字允许您更改列名、数据类型和约束。
  • Modify 关键字允许您修改列数据类型和约束。
  • After 关键字用于指定列在表中的位置。