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 | ||
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 | ||
varchar(255) | YES | NULL | |||
credit_card_number | varchar(25) | YES |
从返回的结果中可以看到,credit card number 已添加到会员表中。会员数据的内容不受新列添加的影响。
DROP 命令是什么?
DROP 命令用于
- 从 MySQL 服务器删除数据库
- 从数据库中删除对象(如表、列)。
现在让我们来看一些使用 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 | ||
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 关键字允许您
- 更改列名
- 更改列数据类型
- 更改列约束
让我们看一个例子。会员表中的 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 | ||
varchar(255) | YES | NULL |
假设我们想
- 将字段名从“full_names”更改为“fullname”
- 将其更改为 char 数据类型,宽度为 250
- 添加 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 | ||
varchar(255) | YES | NULL |
MODIFY 关键字
MODIFY 关键字允许您
- 修改列数据类型
- 修改列约束
在上面的 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 | ||
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 | ||
varchar(255) | YES | NULL |
摘要
- 当我们想修改数据库或数据库中包含的任何对象时,就会使用 alter 命令。
- drop 命令用于从 MySQL 服务器删除数据库或数据库内的对象。
- rename 命令用于将表名更改为新表名。
- Change 关键字允许您更改列名、数据类型和约束。
- Modify 关键字允许您修改列数据类型和约束。
- After 关键字用于指定列在表中的位置。