Mysql所有知识总结(自己的话解释的)

本文详细介绍了数据库设计中的三大范式,包括第一范式(1NF)、第二范式(2NF)和第三范式(3NF),并解释了它们的作用及如何避免数据冗余。此外,还介绍了数据库定义语言(DDL)的基本命令,如创建、修改和删除数据库及表等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

2018.1.28

1.数据库三大范式:讲的是涉及数据库表的三个原则。

首先强调3NF在2NF基础上,2NF在1NF基础上。

1NF是列不可再分,比如联系人这种可以再分的。这个是最简单的,重点说2NF和3NF。

2NF说的是每个非主键列必须依赖主键,不能部分依赖主键。(因为主键有时候不是一列)    ps:主键不是必须的,但是一般要有,因为有了主键才能唯一确定一条记录。

3NF说的是非主键列之间不能有传递依赖,比如学号,姓名,性别,所在班级,班主任。尼玛班主任跟学号有啥关系。没有直接依赖的你放在一个表里,到时候班级表又有班主任这一项,这就会有大量数据冗余。2NF也是大量数据冗余。


DDL/DML/DQL这些你不需要记,你用多了自然就记住了。


DDL:

create database;

use database; 你必须use选中才能操作某个数据库。

数据类型: tinyint  1字节  有符号数  -2^7--2^7-1   无符号数 0-2^8-1

  int 4字节 -2^31--2^31-1

 float和double只需要记住精度:float是7位有效数字,double是16位有效数字就可以了,取值范围记不住。

unsigned和zerofill写在数据类型后:如果是zerofill,则自动变为unsigned,自动填满位数。
char(4) varchar(4) 以实际长度存 对比:char有索引机制,读取效率高。 varchar节约存储空间。

三种主要时间类型:data存储年月日 datatime存储年月日时分秒 timestamp时间戳(年月日时分秒全存一起)

属性加约束:not null 非空
 default 设置默认值
 unique key 唯一约束 允许空值 一个表可以多个UK
 primary key主键约束 不允许空值 一个表只能一个PK
foreign key外键约束 在两表间建立关联,需要指定外键字段 作用是可以防止另一个表中的关联字段被删除
auto_increment 自增 一般用于数值列(主键) 默认自增1

添加外键约束语法:
单个外键:

MySQL:

CREATE TABLE Orders
(
Id_O int NOT NULL,
OrderNo int NOT NULL,
Id_P int,
PRIMARY KEY (Id_O),
FOREIGN KEY (Id_P) REFERENCES Persons(Id_P)
)

SQL Server / Oracle / MS Access:

CREATE TABLE Orders
(
Id_O int NOT NULL PRIMARY KEY,
OrderNo int NOT NULL,
Id_P int FOREIGN KEY REFERENCES Persons(Id_P)
)

多个外键:
CONSTRAINT名 {PRIMARY KEY | UNIQUE | NOT NULL |
REFERENCES 外部表 [(外部字段1,外部字段2)]
如:
CONSTRAINT fk_PerOrders FOREIGN KEY (Id_P)
REFERENCES Persons(Id_P)


为了让数据库不乱码,dos窗口默认gbk编码,数据库我们一般用的utf-8,为了让表中不出现乱码。mysql命令行中添加 set names gbk;


还可以给字段添加注释  sid int(10) comment '学生id'  但是这个comment好像没啥吊用 在表数据里不会显示 你只有看表的信息时才会显示字段的注释和数据类型


常见其他DDL命令:

use myschool; 选中数据库 

show tables; 查看有哪些表

describe(desc) student; 查看学生表结构

drop student if exists student;删除学生表


mysql用法帮助(mysql yog里也可以用):

help contents;查看用法(所有列表)

help datatypes;所有数据类型用法

help int; 教你int怎么用

help create table; 教你怎么创建数据库表


修改表:

先show tables确定有这个表。

alter table 旧表名 rename [to] 新表名

alter table 表名 add 字段名 数据类型 【字段属性(约束)】

alter table 表名 change 原字段名 新字段名 数据类型 【字段属性(也就是约束)】

alter table 表名 drop 字段名

※ 添加主键字段 alter table 表名 add constraint 主键名 primary key 表名(主键字段) 意思就是添加约束,然后起个主键名,然后说明是表的哪个字段作为主键。


DDL的部分到此为止,证明2018/01/28 学习了,这就够了。这些东西还不百分之百的熟悉。你需要每天敲一敲才行。





<think>好的,我现在需要介绍MySQL知识体系。首先,我应该从基础开始,然后逐步深入。用户可能希望了解整体结构,所以需要分模块讲解。 基础概念部分,要包括数据库和DBMS的定义,以及MySQL的特点。记得用中文,还有行内公式用$符号,比如ACID特性可能需要用数学符号表示。比如事务的原子性可以用$A$表示?不过可能不需要太复杂的公式,这里可能用文字更合适。 接下来是SQL语言,分为DDL、DML、DQL、DCL和TCL。每个部分需要简要说明,并给出例子。比如DML有INSERT,UPDATE等。这里可能不需要公式,但要注意行内代码用反引号还是LaTeX?用户要求数学表达式用$...$,但代码部分可能需要用其他方式,不过用户没有特别说明,可能保持中文描述即可。 然后是数据存储引擎,InnoDB和MyISAM的区别是关键点,比如事务支持、锁粒度、外键等。这部分需要对比清楚。 索引与查询优化部分很重要。索引类型如B+树、哈希索引,要解释B+树的结构,可能需要用数学表达式,比如B+树的高度和查找效率的关系,可以用$O(\log n)$。还有索引优化原则,比如最左匹配,可能需要例子说明。 事务与锁机制,ACID需要详细解释,隔离级别的问题如脏读、幻读。锁的类型,行锁、表锁,还有MVCC。这部分可能需要更深入的解释,特别是MVCC的工作原理,比如版本号控制,用隐藏列和Read View。这里可能需要用一些数学符号,比如版本号用$t_1, t_2$,或者事务ID用$txn_id$,但用户要求的是行内数学表达式,所以可能需要适当使用。 高可用与备份恢复,主从复制、读写分离、备份工具如mysqldump,以及binlog和redo log的作用。这部分需要简明扼要,说明各个组件的作用。 性能调优方面,执行计划EXPLAIN是关键,需要说明各字段含义。参数调优如缓冲池大小、连接数配置。慢查询日志的使用方法。 最后是安全与权限管理,用户权限和SSL加密连接。这部分相对简单,但需要提到常见的安全措施。 整体结构需要分点,每个大标题下有小标题,用清晰的列表或段落。注意使用$$...$$格式的独立公式,如果有的。例如,在解释B+树的高度时,可能需要一个公式,但不确定是否有必要。可能暂时用文字描述更合适,避免复杂公式影响理解。 另外,检查是否有遗漏的重要知识点,比如存储过程、触发器、视图等高级功能是否需要提及?可能在SQL语言部分提到,或者在进阶内容中。用户的问题是要介绍知识体系,所以应该全面但不过于深入。可能将存储过程和触发器放在SQL语言的进阶部分。 需要确保各部分逻辑连贯,从基础到高级,由浅入深。同时,按照用户的系统级指令,正确使用LaTeX格式,特别是数学表达式。例如,在讲解索引的复杂度时,用$O(\log n)$。在事务隔离级别中,可能涉及到并发问题,可以用行内公式列举问题类型,比如脏读、不可重复读、幻读等。 最后,总结MySQL的学习路径,帮助用户建立体系化的认识。确保回答结构清晰,分点明确,使用中文,符合用户的要求。</think>MySQL知识体系可划分为以下核心模块,按照**从基础到进阶**的学习路径整理如下: --- ### 一、基础概念 1. **数据库与DBMS** - 数据库:存储结构化数据的集合,例如:`学生表($id$, 姓名, 成绩)`。 - DBMS:数据库管理系统,MySQL是关系型DBMS的代表。 2. **MySQL架构** - 连接池 → SQL接口 → 解析器 → 优化器 → 存储引擎(如InnoDB)。 3. **数据类型** - 数值:`INT`, `DECIMAL($m$,$d$)` - 字符串:`VARCHAR($n$)` - 时间:`DATETIME`, `TIMESTAMP` --- ### 二、SQL语言 1. **DDL(数据定义语言)** - 创建/修改表结构: ```sql CREATE TABLE users ( id INT PRIMARY KEY, name VARCHAR(50) ); ``` 2. **DML(数据操作语言)** - 增删改:`INSERT`, `DELETE`, `UPDATE` 3. **DQL(数据查询语言)** - 基本查询:`SELECT ... FROM ... WHERE` - 聚合函数:`COUNT($\star$)`, `SUM(x)` - 多表连接:`JOIN ... ON`,子查询 4. **DCL(数据控制语言)** - 权限管理:`GRANT`, `REVOKE` 5. **TCL(事务控制语言)** - `COMMIT`, `ROLLBACK`, `SAVEPOINT` --- ### 三、数据存储引擎 | 特性 | InnoDB | MyISAM | |--------------|----------------------|-----------------| | **事务** | 支持ACID | 不支持 | | **锁粒度** | 行级锁 | 表级锁 | | **外键** | 支持 | 不支持 | | **应用场景** | 高并发写、事务 | 只读/大量读 | --- ### 四、索引与查询优化 1. **索引类型** - **B+树索引**:默认结构,时间复杂度$O(\log n)$,支持范围查询。 - **哈希索引**:仅MEMORY引擎支持,等值查询$O(1)$。 2. **索引优化原则** - 最左匹配原则:联合索引$(a,b,c)$中,查询需按顺序使用字段。 - 避免冗余索引:如已有$(a,b)$,再建$a$单独索引则冗余。 3. **执行计划`EXPLAIN`** - 关键字段:`type`(访问类型), `key`(使用索引), `rows`(扫描行数)。 --- ### 五、事务与锁机制 1. **ACID特性** - 原子性(Atomicity):事务内操作全成功或全失败。 - 隔离性(Isolation):通过锁和MVCC实现,避免脏读、幻读。 2. **隔离级别** | 级别 | 脏读 | 不可重复读 | 幻读 | |------------------|------|------------|------| | READ UNCOMMITTED | ✔️ | ✔️ | ✔️ | | READ COMMITTED | ✖️ | ✔️ | ✔️ | | REPEATABLE READ | ✖️ | ✖️ | ✔️ | | SERIALIZABLE | ✖️ | ✖️ | ✖️ | 3. **MVCC(多版本并发控制)** - 通过隐藏的`DB_TRX_ID`(事务ID)和`DB_ROLL_PTR`(回滚指针)实现快照读。 --- ### 六、高可用与备份恢复 1. **主从复制** - 原理:Master写Binlog → Slave通过IO线程拉取 → SQL线程重放。 2. **备份工具** - 逻辑备份:`mysqldump`导出SQL语句。 - 物理备份:直接复制数据文件(如`.ibd`)。 --- ### 七、性能调优 1. **参数调优** - `innodb_buffer_pool_size`:缓存池大小,建议设为物理内存的70%~80%。 - `max_connections`:控制并发连接数。 2. **慢查询日志** - 开启方式:`slow_query_log=1`, `long_query_time=2`(单位:秒)。 --- ### 八、安全与权限管理 1. **用户权限** - 最小权限原则:按需分配`SELECT`, `INSERT`等权限。 - 示例:`GRANT SELECT ON db.table TO 'user'@'host';` 2. **SSL加密连接** - 配置:生成CA证书,设置`require_secure_transport=ON`。 --- ### 总结:MySQL学习路径 1. 掌握SQL语法 → 2. 理解存储引擎 → 3. 索引优化 → 4. 事务与锁 → 5. 高可用架构 → 6. 深度调优。 建议结合《高性能MySQL》等书籍与官方文档实践。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值