前面我们已经学习了如何查询数据 (SELECT
)、筛选数据 (WHERE
)等操作。现在我们要进入数据库的另一个重要领域 ------ 表结构管理与分区设计。
本文带你快速认识以下关键字:
- ✅
ALTER
- ✅
MODIFY
- ✅
CHANGE
- ✅
DEFAULT
- ✅
VALUES
- ✅
LESS THAN
- ✅
RANGE
一、ALTER:修改表结构的核心命令
基本作用
用于修改已有表的结构,比如添加字段、删除字段、重命名表等。
示例:
sql
-- 添加新列
ALTER TABLE users ADD COLUMN birth_date DATE;
-- 删除列
ALTER TABLE users DROP COLUMN phone;
-- 重命名表
ALTER TABLE users RENAME TO user_accounts;
二、MODIFY:修改列的定义
基本作用
用于更改某个字段的数据类型或属性,但不能重命名字段名。
示例:
sql
-- 修改 email 字段为 VARCHAR(150),并设置非空
ALTER TABLE users MODIFY email VARCHAR(150) NOT NULL;
三、CHANGE:修改列名和定义
基本作用
与 MODIFY
类似,但它还可以重命名字段名。
示例:
sql
-- 将字段 old_name 改名为 new_name,并改变类型
ALTER TABLE users CHANGE old_name new_name VARCHAR(100);
四、DEFAULT:设定默认值
基本作用
为字段设置一个默认值,当插入数据时未指定该字段值时,自动使用默认值。
示例:
sql
-- 创建表时设置默认值
CREATE TABLE orders (
id INT AUTO_INCREMENT PRIMARY KEY,
status VARCHAR(20) DEFAULT 'pending'
);
-- 修改现有字段的默认值
ALTER TABLE orders MODIFY status VARCHAR(20) DEFAULT 'completed';
五、VALUES:插入数据的核心语法
基本作用
用于 INSERT INTO
语句中,指定要插入的具体值。
示例:
sql
-- 插入一行数据
INSERT INTO users (name, email) VALUES ('张三', '[email protected]');
-- 插入多行数据
INSERT INTO users (name, email) VALUES
('李四', '[email protected]'),
('王五', '[email protected]');
六、LESS THAN:常用于范围分区
基本作用
用于定义分区规则中的"小于某值"的边界条件,常见于 RANGE
分区。
示例:
sql
CREATE TABLE sales (
id INT,
amount DECIMAL(10,2)
) PARTITION BY RANGE (amount) (
PARTITION p0 VALUES LESS THAN (1000),
PARTITION p1 VALUES LESS THAN (5000),
PARTITION p2 VALUES LESS THAN MAXVALUE
);
在这个例子中,销售金额小于1000的数据会存储在 p0
分区中,以此类推。
七、RANGE:按范围进行分区
基本作用
用于创建按某一字段值的范围进行分区的逻辑,提升大数据量下的查询效率。
示例:
sql
CREATE TABLE employees (
id INT,
salary INT
) PARTITION BY RANGE (salary) (
PARTITION low_salary VALUES LESS THAN (3000),
PARTITION mid_salary VALUES LESS THAN (8000),
PARTITION high_salary VALUES LESS THAN MAXVALUE
);
这样,工资不同范围的员工会被分配到不同的分区中,便于管理与查询优化。
八、总结对比表
关键字 | 用途 | 是否影响数据 | 示例 |
---|---|---|---|
ALTER |
修改表结构 | 否 | ALTER TABLE users ADD COLUMN... |
MODIFY |
修改字段定义(不改名) | 否 | MODIFY email VARCHAR(150) |
CHANGE |
修改字段定义 + 可以重命名字段名 | 否 | CHANGE old_name new_name ... |
DEFAULT |
设置字段默认值 | 否 | VARCHAR(100) DEFAULT 'abc' |
VALUES |
插入具体数据 | 是 | VALUES ('A', 'B') |
LESS THAN |
定义分区的范围边界 | 否 | VALUES LESS THAN (1000) |
RANGE |
按字段值范围划分分区 | 否 | PARTITION BY RANGE (salary) |