✅ 一、建表模板(带审计字段 + 索引)
sql
CREATE TABLE `hot_campaign` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键',
`campaign_name` VARCHAR(64) NOT NULL COMMENT '活动名称',
`site` VARCHAR(32) NOT NULL COMMENT '站点',
`status` TINYINT NOT NULL DEFAULT 1 COMMENT '状态:1启用 0停用',
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`created_by` VARCHAR(16) DEFAULT NULL COMMENT '创建人工号',
`updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`updated_by` VARCHAR(16) DEFAULT NULL COMMENT '更新人工号',
PRIMARY KEY (`id`),
KEY `idx_site` (`site`),
KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='营销活动表';
✅ 二、修改表结构(ADD / DROP / CHANGE / MODIFY)
1)新增字段
sql
ALTER TABLE `hot_campaign`
ADD COLUMN `last_updated_staff` VARCHAR(16) DEFAULT NULL COMMENT '最后更新人工号';
2)删除字段
sql
ALTER TABLE `hot_campaign`
DROP COLUMN `last_updated_staff`;
3)修改字段类型(MODIFY)
仅修改类型,不改字段名
sql
ALTER TABLE `hot_campaign`
MODIFY COLUMN `campaign_name` VARCHAR(128) NOT NULL COMMENT '活动名称';
4)修改字段名 + 字段类型(CHANGE)
sql
ALTER TABLE `hot_campaign`
CHANGE COLUMN `status` `campaign_status` TINYINT NOT NULL DEFAULT 1 COMMENT '活动状态';
5)修改字段默认值
sql
ALTER TABLE `hot_campaign`
ALTER COLUMN `status` SET DEFAULT 1;
✅ 三、索引相关(INDEX / UNIQUE / DROP)
1)新增普通索引
sql
ALTER TABLE `hot_campaign`
ADD INDEX `idx_name` (`campaign_name`);
2)新增联合索引
sql
ALTER TABLE `hot_campaign`
ADD INDEX `idx_site_status` (`site`, `status`);
3)新增唯一索引
sql
ALTER TABLE `hot_campaign`
ADD UNIQUE INDEX `uk_site_name` (`site`, `campaign_name`);
4)删除索引
sql
ALTER TABLE `hot_campaign`
DROP INDEX `idx_site_status`;
✅ 四、外键(FOREIGN KEY)
1)新增外键约束
sql
ALTER TABLE `coupon`
ADD CONSTRAINT `fk_coupon_campaign`
FOREIGN KEY (`campaign_id`)
REFERENCES `hot_campaign` (`id`)
ON DELETE CASCADE
ON UPDATE CASCADE;
2)删除外键
sql
ALTER TABLE `coupon`
DROP FOREIGN KEY `fk_coupon_campaign`;
✅ 五、表结构变更
1)重命名表
sql
RENAME TABLE `hot_campaign` TO `hot_campaign_v2`;
2)设置表的字符集
sql
ALTER TABLE `hot_campaign`
CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
✅ 六、删除表(DROP)
sql
DROP TABLE IF EXISTS `hot_campaign`;