-- 创建数据库,指定字符集+排序规则(杜绝乱码)
CREATE DATABASE IF NOT EXISTS db_trade
DEFAULT CHARACTER SET utf8mb4
DEFAULT COLLATE utf8mb4_unicode_ci;
-- 删除库(生产严禁随意执行)
DROP DATABASE IF EXISTS db_temp;
-- 1.加字段+指定类型+约束+注释
ALTER TABLE t_user_account
ADD COLUMN real_name VARCHAR(64) NOT NULL DEFAULT '' COMMENT '真实姓名' AFTER phone;
-- 2.修改字段数据类型+约束
ALTER TABLE t_user_account
MODIFY COLUMN email VARCHAR(192) DEFAULT '' NOT NULL COMMENT '扩容邮箱长度,加固非空';
-- 3.添加唯一约束
ALTER TABLE t_user_account
ADD UNIQUE KEY uk_email (email);
-- 4.添加普通索引
ALTER TABLE t_user_account
ADD INDEX idx_gender (gender);
-- 5.删除索引
ALTER TABLE t_user_account
DROP INDEX idx_gender;
-- 6.删除字段(高危!生产必须评审)
ALTER TABLE t_user_account
DROP COLUMN encrypt_data;
1.4 视图/索引进阶DDL
sql复制代码
-- 创建视图(封装复杂关联查询)
CREATE VIEW v_user_balance AS
SELECT id,phone,account_balance,freeze_amount,register_time
FROM t_user_account
WHERE user_level > 1;
-- 删除视图
DROP VIEW IF EXISTS v_user_balance;
-- 更新金额+状态+自动触发update_time
UPDATE t_user_account
SET account_balance = account_balance + 50.0000,
user_level = 6
WHERE user_code = 'USER2026001';
-- JSON字段局部更新(MySQL5.7+支持)
UPDATE t_user_account
SET extend_info = JSON_SET(extend_info,'$.avatar','https://new.png')
WHERE id = 10000;
2.3 DELETE 删除(逻辑删除优先,物理删除谨慎)
sql复制代码
-- 物理删除(仅归档/清理冷数据用)
DELETE FROM t_user_account
WHERE register_time < '2020-01-01';
-- 企业规范:优先逻辑删除(加del_flag字段)
ALTER TABLE t_user_account ADD COLUMN del_flag TINYINT NOT NULL DEFAULT 0 COMMENT '0正常1删除';
-- 逻辑删除更新
UPDATE t_user_account SET del_flag = 1 WHERE user_code = 'USER2026003';
三、DQL 数据查询语言(高阶+多函数+关联+分组)
3.1 基础查询+字段过滤+枚举翻译
sql复制代码
SELECT
id,
phone,
user_level,
-- case when翻译枚举/数字状态
CASE gender
WHEN 'male' THEN '男'
WHEN 'female' THEN '女'
ELSE '未知'
END AS gender_name,
account_balance,
DATE(register_time) AS reg_date --日期函数截取
FROM t_user_account
WHERE del_flag = 0 --屏蔽逻辑删除数据
AND user_level >= 3
AND account_balance > 100;
3.2 分组聚合查询(配合数值类型统计)
sql复制代码
-- 按会员等级统计人数、总余额、平均余额
SELECT
user_level,
COUNT(*) AS user_count,
SUM(account_balance) AS total_balance,
AVG(account_balance) AS avg_balance,
MAX(account_balance) AS max_balance
FROM t_user_account
WHERE del_flag = 0
GROUP BY user_level
HAVING SUM(account_balance) > 1000; --分组后过滤
3.3 多表JOIN关联查询
sql复制代码
-- 关联用户表+订单表(LEFT JOIN保留所有用户)
SELECT
u.id,u.phone,o.order_no,o.order_amount
FROM t_user_account u
LEFT JOIN t_order o ON u.id = o.user_id
WHERE u.del_flag = 0
ORDER BY u.id DESC;
3.4 JSON字段解析查询
sql复制代码
-- 提取JSON里的头像地址
SELECT
id,
phone,
JSON_UNQUOTE(JSON_EXTRACT(extend_info,'$.avatar')) AS avatar_url
FROM t_user_account
WHERE extend_info->'$.wx_bind' = true;
3.5 去重+分页
sql复制代码
-- 去重查询所有会员等级
SELECT DISTINCT user_level FROM t_user_account WHERE del_flag=0;
-- 分页查询(第1页10条)
SELECT * FROM t_user_account WHERE del_flag=0 ORDER BY id DESC LIMIT 0,10;
四、TCL 事务控制语言(金融/账户必备,保障原子性)
sql复制代码
-- 转账业务:扣A余额,加B余额,要么全成要么全回滚
START TRANSACTION;
-- 扣减付款方
UPDATE t_user_account
SET account_balance = account_balance - 200.0000
WHERE user_code = 'USER2026001' AND account_balance >= 200;
-- 增加收款方
UPDATE t_user_account
SET account_balance = account_balance + 200.0000
WHERE user_code = 'USER2026002';
-- 无异常提交
COMMIT;
-- 出现异常执行:ROLLBACK;
五、DCL 权限控制语言(运维/开发赋权)
sql复制代码
-- 创建专属数据库开发账号
CREATE USER 'db_dev_ops'@'%' IDENTIFIED BY 'Dev@MySql2026!';
-- 赋权:查询+增改,禁止删表删库
GRANT SELECT,INSERT,UPDATE ON db_trade.* TO 'db_dev_ops'@'%';
-- 回收敏感权限
REVOKE DELETE,DROP,ALTER ON db_trade.* FROM 'db_dev_ops'@'%';
-- 刷新权限生效
FLUSH PRIVILEGES;