第八章 事务与并发控制
8.1 事务特性(ACID)
8.2 事务操作
-- 开始事务
START TRANSACTION;
-- 执行操作
UPDATE accounts SET balance = balance - 100 WHERE user_id = 1;
UPDATE accounts SET balance = balance + 100 WHERE user_id = 2;
-- 提交事务(确认更改)
COMMIT;
-- 或回滚事务(撤销更改)
ROLLBACK;
第九章 安全管理
9.1 用户管理
-- 创建用户
CREATE USER 'app_user'@'localhost' IDENTIFIED BY '密码';
-- 授予权限
GRANT SELECT, INSERT, UPDATE ON mydb.* TO 'app_user'@'localhost';
-- 查看权限
SHOW GRANTS FOR 'app_user'@'localhost';
-- 撤销权限
REVOKE DELETE ON mydb.* FROM 'app_user'@'localhost';
-- 删除用户
DROP USER 'app_user'@'localhost';
9.2 备份与恢复
备份
mysqldump -u root -p 数据库名 > backup.sql
恢复
mysql -u root -p 数据库名 < backup.sql
第十章 完整案例实战:订单系统
下面综合运用所学知识,创建一个完整的订单系统。
-- 创建数据库
CREATE DATABASE IF NOT EXISTS shop
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
USE shop;
-- 用户表
CREATE TABLE IF NOT EXISTS users (
id INT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '用户ID',
username VARCHAR(50) NOT NULL UNIQUE COMMENT '用户名',
phone VARCHAR(20) NOT NULL COMMENT '手机号',
status TINYINT(1) DEFAULT 1 COMMENT '状态:1启用0禁用',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '注册时间',
PRIMARY KEY (id),
INDEX idx_phone (phone)
) ENGINE=InnoDB COMMENT='用户表';
-- 商品表
CREATE TABLE IF NOT EXISTS products (
id INT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '商品ID',
name VARCHAR(200) NOT NULL COMMENT '商品名称',
price DECIMAL(10,2) UNSIGNED NOT NULL COMMENT '价格',
stock INT UNSIGNED DEFAULT 0 COMMENT '库存',
status TINYINT(1) DEFAULT 1 COMMENT '上架状态',
PRIMARY KEY (id),
INDEX idx_name (name)
) ENGINE=InnoDB COMMENT='商品表';
-- 订单表
CREATE TABLE IF NOT EXISTS orders (
id INT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '订单ID',
user_id INT UNSIGNED NOT NULL COMMENT '用户ID',
total_amount DECIMAL(10,2) UNSIGNED NOT NULL COMMENT '订单金额',
status ENUM('pending','paid','shipped','completed','cancelled')
DEFAULT 'pending' COMMENT '订单状态',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
paid_at TIMESTAMP NULL COMMENT '支付时间',
PRIMARY KEY (id),
INDEX idx_user (user_id),
INDEX idx_status (status),
FOREIGN KEY (user_id) REFERENCES users(id)
) ENGINE=InnoDB COMMENT='订单表';
-- 插入测试数据
INSERT INTO users(username, phone) VALUES
('张三', '13800138001'),
('李四', '13800138002'),
('王五', '13800138003');
INSERT INTO products(name, price, stock) VALUES
('笔记本电脑', 5999.00, 10),
('无线鼠标', 89.90, 100),
('机械键盘', 299.00, 50);
-- 复杂查询示例:查询每个用户的订单总额
SELECT
u.username,
COUNT(o.id) AS 订单数,
IFNULL(SUM(o.total_amount), 0) AS 消费总额
FROM users u
LEFT JOIN orders o ON u.id = o.user_id
GROUP BY u.id
ORDER BY 消费总额 DESC;
附录:SQL语句速查表
结语
MySQL作为全球最受欢迎的开源数据库,入门简单但内涵丰富。本文从零开始,系统介绍了数据库基础、安装配置、表操作、数据查询、索引优化、事务管理、安全控制等核心知识,并通过完整案例演示了实际应用。
正如课程简介所言:“你指尖跳跃的信息,与云端的数据洪流,你思想的火花,与万物互联的智慧,仅仅一线相隔。”掌握MySQL,你就掌握了连接现实世界与数据世界的那把钥匙。
来源:
https://app-a6nw7st4g741.appmiaoda.com/