1. 事务和索引
事务ACID原则
| 特性 | 英文 | 通俗解释 |
|---|---|---|
| 原子性 | Atomicity | 事务是最小单位,不可分割。要么全成功,要么全失败 |
| 一致性 | Consistency | 执行前后数据总量不变(转账:A 扣钱 + B 加钱 = 总金额不变) |
| 隔离性 | Isolation | 多个事务同时执行,互不干扰 |
| 持久性 | Durability | 事务提交后,数据永久修改,断电 / 崩溃也不会丢失 |
三大读
| 问题 | 解释 |
|---|---|
| 脏读 | 一个事务读到了另一个事务未提交的数据(对方回滚后,数据无效)。= 读了未提交数据 |
| 不可重复读 | 同一个事务内,两次查询同一行数据,结果不一样(被其他事务修改了)。= 数据被修改 |
| 幻读 | 同一个事务内,两次查询的总条数不一样(被其他事务新增 / 删除了数据)。= 数据条数变了 |
事务及索引举例
-- mysql 是默认开启事务自动提交的SETautocommit=0-- 关闭SETautocommit=1-- 开启-- 手动处理事务SETautocommit=0-- 关闭自动提交(一般不用,保持默认)-- 事务开启(这步会临时改变事务提交状态)STARTTRANSACTION-- 标记一组事务的开始,从这之后的 sql 都在同一组事务内-- 提交: 持久化(成功!)COMMIT-- 回滚: 回到原来的样子(失败!)ROLLBACK-- 事务结束SETautocommit=1-- 开启自动提交(一般不用,保持默认)/* 索引分类: 1. 主键索引(唯一+非空) | primary key 2. 唯一索引(字段值唯一) | unique index 3. 常规索引(加速查询) | index 4. 全文索引(长文本模糊查询搜索)| fulltext index */-- create index 索引名 on 表(字段)CREATEINDEXid_user_nameON`user`(`name`)-- 使用select查找对应字段的数据速度更快CREATEUNIQUEINDEXid_user_nameON`user`(`name`)-- alter table 表 add index 索引名(字段)ALTERTABLE`user`ADDINDEXid_user_name(`name`)ALTERTABLE`user`ADDUNIQUEINDEXid_user_name(`name`)ALTERTABLE`user`ADDPRIMARYKEYid_user_name(`name`)ALTERTABLE`user`ADDFULLTEXTINDEXid_user_name(`name`)-- explain 分析查询的方式EXPLAINSELECT*FROM`user`WHERE`name`='小青'EXPLAINSELECT*FROM`user`WHEREid=4DROPINDEXid_user_nameON`user`-- 删除索引(除了主键)SHOWINDEXFROM`user`-- 展示表的全部索引2. 数据库管理和设计
2.1.数据备份
在终端/cmd上执行的命令
# 1. 备份单个数据库mysqldump-uroot-p密码 数据库名>保存路径/文件名.sql# 示例:备份 test_db 库mysqldump-uroot-pRoot@wen test_db>D:/mysql_back/test_db_20260328.sql# 2. 备份单张表mysqldump-uroot-p密码 库名 表名>路径/表备份.sql# 3. 备份所有数据库mysqldump-uroot-p密码 --all-databases>D:/all_back.sql2.2.数据导入
在终端/cmd上执行的命令
mysql-uroot-p密码 数据库名<保存路径/文件名.sql mysql-uroot-p密码 库名 表名<路径/表备份.sql或
在MySQL命令行中执行的命令
-- 先清空库/新建库USEtest_db;SOURCE D:/mysql_back/test_db_20260328.sql;2.3.修改密码
USEmysql-- 先切换库SETPASSWORD='newRoot@wen'-- 修改自己的密码ALTERUSER'root'@'localhost'IDENTIFIEDBY'Root@wen'-- 修改其他用户密码2.4.三大范式
-- 数据规范化/* 第一范式(1NF) 原子性: 保证每一列不可再分 第二范式(2NF) 前提: 满足第一范式 每张表只描述一件事情 第三范式(3NF) 前提: 满足第一和第二范式 确保数据表中的每一列数据都和主键直接相关,而不能间接相关 */-- 规范性 和 性能的问题/* 一般关联查询的表不得超过三张表; 考虑成本和用户体验,性能更加重要; 因此优先注重性能后,再适当考虑规范性! 具体表现为故意增加一些冗余字段,可变为单表查询. */