
在 MySQL 中,ALTER TABLE
命令的基本语法如下:
ALTER TABLE table_name action;
其中:
table_name
是要修改的表的名称。action
是具体的修改操作,例如:ADD column_name data_type [NULL | NOT NULL] [DEFAULT default_value] [AFTER existing_column]
:用于添加新列。DROP COLUMN column_name
:用于删除列。MODIFY column_name data_type [NULL | NOT NULL] [DEFAULT default_value]
:用于修改列的数据类型和其他属性。CHANGE old_column_name new_column_name data_type [NULL | NOT NULL] [DEFAULT default_value]
:用于修改列的名称和其他属性。ALTER COLUMN column_name SET DEFAULT default_value
:用于修改列的默认值。ALTER COLUMN column_name DROP DEFAULT
:用于删除列的默认值。
一、ALTER
命令概述
ALTER
命令用于修改已经存在的表的结构。可以执行添加、删除列,修改列的数据类型、名称,设置或更改默认值、NULL
值约束等操作。
二、创建表实例演示
CREATE TABLE employees (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50),
age INT,
salary DECIMAL(10, 2)
);
上述示例创建了一个名为 employees
的表,包含 id
(自增主键)、name
(长度为 50 的字符串)、age
(整数)和 salary
(精度为 10,小数位为 2 的十进制数)这几个列。
1、删除表字段
ALTER TABLE employees DROP COLUMN age;
此语句将从 employees
表中删除 age
列。
2、添加表字段
ALTER TABLE employees ADD department VARCHAR(50);
上述语句向 employees
表添加一个名为 department
且数据类型为长度为 50 的字符串的列。
3、修改字段类型
ALTER TABLE employees MODIFY salary FLOAT;
此命令将 salary
列的数据类型从 DECIMAL(10, 2)
修改为 FLOAT
。
4、修改字段名称
ALTER TABLE employees CHANGE name full_name VARCHAR(100);
该语句将 name
列重命名为 full_name
,并将数据类型修改为长度为 100 的字符串。
三、ALTER TABLE
对 NULL
值和默认值的影响
当添加一个新列时,如果没有明确指定
NULL
或NOT NULL
,默认情况下新列允许为NULL
。修改列的
NULL
属性时,要注意已有数据的兼容性。如果将一个不允许为NULL
的列修改为允许为NULL
,并且该列中存在不允许为NULL
的数据,可能会导致错误。修改默认值时,新插入的数据将使用新的默认值,而原有数据不受影响。
四、ALTER TABLE
修改字段默认值
ALTER TABLE employees ALTER COLUMN salary SET DEFAULT 5000.00;
此语句将 salary
列的默认值修改为 5000.00
。
在 MySQL 中使用 ALTER TABLE
命令时,需要注意以下几点:
执行
ALTER TABLE
操作可能会导致表被锁定,尤其是对于大型表或复杂的修改操作,这可能会影响到正在进行的并发访问。在生产环境中执行重要的修改操作前,需要仔细评估其对系统性能和可用性的影响。对于涉及数据类型更改的操作,如果新的数据类型无法容纳现有数据,可能会导致数据截断或转换错误。例如,将一个存储较大整数的列更改为较小的整数类型时,可能会丢失数据。
修改列的
NULL
约束时要谨慎。如果将不允许为NULL
的列更改为允许为NULL
,且表中存在不允许为NULL
的数据,可能会导致错误。反之,如果将允许为NULL
的列更改为不允许为NULL
,则必须确保表中该列的现有数据都不为NULL
,否则也会出错。重命名列时,要确保新的列名符合命名规则,并且不会与其他列名冲突。
添加或删除列可能会影响到基于该表的视图、存储过程、触发器等对象的正常运行,需要对相关对象进行相应的更新和测试。
对于大型表,某些修改操作可能会消耗大量的时间和系统资源。在执行此类操作之前,建议在测试环境中进行充分的测试和评估。
如果表中存在大量数据,某些修改操作(如更改主键或添加索引)可能会导致性能下降,需要谨慎选择操作的时机。
在执行重要的修改操作之前,一定要备份数据,以防万一出现问题可以进行数据恢复。






