ALTER TABLE语句是MySQL中用于修改现有表结构的重要命令,它允许您在不删除重建表的情况下调整表的各种属性。以下是修改数据表的全面指南:

 

基本语法结构

 

ALTER TABLE 
表名 [修改操作];


主要修改操作类型

 

1. 修改表名

 

ALTER TABLE 旧表名 RENAME TO 新表名;

示例:

ALTER TABLE student RENAME TO tb_students_info;


2. 修改字符集和校对规则

 

ALTER TABLE 表名 CHARACTER SET 字符集名 COLLATE 校对规则名;

示例:

ALTER TABLE tb_students_info 
CHARACTER SET gb2312 COLLATE gb2312_chinese_ci;


3. 添加列

 

ALTER TABLE 表名 ADD COLUMN 列名 数据类型 [约束条件] [FIRST|AFTER 现有列];

示例:

ALTER TABLE employees ADD COLUMN birth_date DATE AFTER last_name;


4. 删除列

 

ALTER TABLE 表名 DROP COLUMN 列名;

示例:

ALTER TABLE employees DROP COLUMN middle_name;


5. 修改列名和类型

 

ALTER TABLE 表名 CHANGE COLUMN 旧列名 新列名 新数据类型;

示例:

ALTER TABLE employees CHANGE COLUMN dept_id department_id INT(11);


6. 修改列数据类型

 

ALTER TABLE 表名 MODIFY COLUMN 列名 新数据类型;

示例:

ALTER TABLE employees MODIFY COLUMN salary DECIMAL(12,2);


7. 修改列默认值

 

ALTER TABLE 表名 ALTER COLUMN 列名 SET DEFAULT 默认值;

ALTER TABLE 表名 ALTER COLUMN 列名 DROP DEFAULT;

 示例:

ALTER TABLE employees ALTER COLUMN hire_date SET DEFAULT CURRENT_DATE;


8. 添加约束

 

添加主键

ALTER TABLE 表名 ADD PRIMARY KEY (列名);

 

添加外键

ALTER TABLE 表名 ADD CONSTRAINT 约束名 FOREIGN KEY (列名) REFERENCES 参考表(参考列);

 

示例:

ALTER TABLE employees ADD CONSTRAINT fk_dept 
FOREIGN KEY (department_id) REFERENCES departments(dept_id);

9. 删除约束

 

删除主键

ALTER TABLE 表名 DROP PRIMARY KEY;

 

删除外键

ALTER TABLE 表名 DROP FOREIGN KEY 约束名;

 

10. 修改表存储引擎

 

ALTER TABLE 表名 ENGINE = 存储引擎名;

示例:

ALTER TABLE employees ENGINE = InnoDB;

复合修改操作

 

可以一次执行多个修改操作,用逗号分隔:

 

ALTER TABLE employees
ADD COLUMN middle_name VARCHAR(50) AFTER first_name,
MODIFY COLUMN last_name VARCHAR(60) NOT NULL,
DROP COLUMN nickname;

注意事项

 

1. 数据安全:修改表结构前建议先备份数据

2. 性能影响:大表的ALTER操作可能耗时较长,考虑在低峰期执行

3. 数据类型兼容性:修改数据类型时要确保现有数据能转换为新类型

4. 外键约束:修改涉及外键的列时需特别小心

5. 字符集转换:修改字符集可能导致数据存储方式变化

 

查看修改结果

 

DESCRIBE 表名;  -- 查看表结构

SHOW CREATE TABLE 表名;  -- 查看完整建表语句

点赞(1)

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

Dotcpp在线编译      (登录可减少运行等待时间)