MySQL笔记---对表的操作
1. 创建表
CREATE TABLE [IF NOT EXISTS] 表名 (列名1 数据类型 [约束条件],列名2 数据类型 [约束条件],...[表级约束条件] -- 如主键、外键等
) [表选项]; -- 如引擎、字符集等
关键要素说明:
- IF NOT EXISTS:可选,避免表已存在时出错(如果表不存在则创建,存在则忽略)。
- 列定义:
- 数据类型:指定列存储的数据类型(如 INT 整数、VARCHAR(50) 字符串、DATE 日期等)。
- 约束条件:限制列的取值规则(如 NOT NULL 非空、UNIQUE 唯一、DEFAULT 默认值等)。
- 表级约束:对多个列生效的约束(如 PRIMARY KEY 主键、FOREIGN KEY 外键等)。
- 表选项:
- ENGINE:指定存储引擎(默认 InnoDB,支持事务、外键;MyISAM 不支持事务,性能较好但安全性低)。
- DEFAULT CHARSET:指定表的字符集(推荐 utf8mb4,支持中文和 emoji)。
关于数据类型、约束条件等,我们在之后的文章当中再进行讨论。本篇文章我们只大致了解一下如何对表进行操作。
2. 查看表结构
DESC 表名称;
3. 修改表
ALTER TABLE 表名操作1 [参数],操作2 [参数],...;
可以同时执行多个修改操作(用逗号分隔),但建议复杂修改分步骤执行,避免出错。
3.1 添加列(ADD)
向现有表中新增列。
ALTER TABLE 表名ADD [COLUMN] 列名 数据类型 [约束] [FIRST | AFTER 已有列名];
- FIRST:新增列放在表的第一列
- AFTER 已有列名:新增列放在指定列之后(默认放在最后)
3.2 修改列(MODIFY / CHANGE)
修改列的数据类型、约束或位置。
(1)MODIFY:仅修改列的类型或约束(不改变列名)
ALTER TABLE 表名MODIFY [COLUMN] 列名 新数据类型 [新约束] [FIRST | AFTER 已有列名];
(2)CHANGE:可同时修改列名和类型 / 约束
ALTER TABLE 表名CHANGE [COLUMN] 旧列名 新列名 新数据类型 [新约束] [FIRST | AFTER 已有列名];
3.3 删除列(DROP)
删除表中的列(注意:删除列会丢失该列的所有数据)。
ALTER TABLE 表名DROP [COLUMN] 列名 [IF EXISTS]; -- IF EXISTS:列不存在时不报错(MySQL 8.0+ 支持)
3.4 修改约束
这个现在还不好理解,放到之后再说。
3.5 重命名表(RENAME TO)
ALTER TABLE 旧表名称 RENAME TO 新表名称;
" TO "可省略。
3.6 修改表的其他属性
(1)修改表的其他属性
ALTER TABLE 表名称 ENGINE = 新存储引擎;
(2)修改字符集
ALTER TABLE 表名称 DEFAULT CHARSET = 新字符集;
3.7 注意事项
- 数据安全:修改列类型或删除列可能导致数据丢失(如将 VARCHAR 改为 INT 可能截断数据),操作前务必备份。
- 锁表影响:修改表结构会对表加锁,大表操作可能阻塞业务,建议在低峰期执行。
- 约束依赖:删除外键前,需确保没有其他依赖;删除主键前,需先删除依赖它的外键。
- 版本差异:部分语法(如 DROP COLUMN ... IF EXISTS)仅支持 MySQL 8.0+,低版本需先判断列是否存在。
4. 删除表
在 MySQL 中,删除表使用 DROP TABLE 语句,该操作会彻底删除表的结构及所有数据(无法直接恢复),因此需格外谨慎。
DROP TABLE [IF EXISTS] 表名1 [, 表名2, ...];
- IF EXISTS:可选,若表不存在则不报错(避免 “表不存在” 的错误提示)。
- 可同时删除多个表,用逗号分隔表名。