聊聊对Mysql的理解

目录

1、Sql介绍

1.1、SQL的分类

1.2、数据库的三大范式

1.3、数据表的约束

1.4、约束的添加与删除

2、核心特性

3、主要组件

4、数据结构原理

5、索引失效

6、常用问题

7、优势与局限


前言

MySQL是一个开源的关系型数据库管理系统(RDBMS),由瑞典MySQL AB公司开发,现属于Oracle旗下产品。


1、Sql介绍

Structure Query Language(结构化查询语言)简称SQL。

1.1、SQL的分类

1、DDL(Data Definition Language) 数据定义语言

用来操作数据库、表、列等; 常用语句:CREATE、 ALTER、DROP。

2、DML(Data Manipulation Language) 数据操作语言

用来操作数据库中表里的数据;常用语句:INSERT、 UPDATE、 DELETE。

3、DCL(Data Control Language) 数据控制语言

用来操作访问权限和安全级别; 常用语句:GRANT、DENY。

4、DQL(Data Query Language) 数据查询语言

用来查询数据 常用语句:SELECT。''

1.2、数据库的三大范式

1、第一范式(1NF)

数据库表的每一列都是不可分割的基本数据线(每列的值具有原子性,不可再分割)。

2、第二范式(2NF)

在第一范式(1NF)的基础上,如果表是单主键,那么主键以外的列必须完全依赖于主键;如果表是复合主键,那么主键以外的列必须完全依赖于主键,不能仅依赖主键的一部分。

3、第三范式(3NF)

在第二范式的基础上建立起来的,即满足第三范式必须要先满足第二范式。第三范式(3NF)要求:表中的非主键列必须和主键直接相关而不能间接相关;(非主键列之间不能相关依赖)。

1.3、数据表的约束

  1. 主键约束 (PRIMARY KEY)
  • 唯一标识表中的每一行记录

  • 不允许 NULL 值

  • 一个表只能有一个主键

sql 复制代码
CREATE TABLE users (
    id INT PRIMARY KEY,
    username VARCHAR(50)
);

-- 复合主键
CREATE TABLE order_items (
    order_id INT,
    product_id INT,
    quantity INT,
    PRIMARY KEY (order_id, product_id)
);
  1. 外键约束 (FOREIGN KEY)
  • 建立表与表之间的关系

  • 确保引用完整性

  • 被引用的列必须是主键或唯一键

sql 复制代码
CREATE TABLE orders (
    order_id INT PRIMARY KEY,
    user_id INT,
    order_date DATE,
    FOREIGN KEY (user_id) REFERENCES users(id)
);
  1. 唯一约束 (UNIQUE)
  • 确保列中的所有值都是唯一的

  • 允许 NULL 值(但只能有一个 NULL)

  • 一个表可以有多个 UNIQUE 约束

sql 复制代码
CREATE TABLE employees (
    id INT PRIMARY KEY,
    email VARCHAR(100) UNIQUE,
    phone VARCHAR(20) UNIQUE
);
  1. 非空约束 (NOT NULL)
  • 强制列不接受 NULL 值

  • 必须包含值

sql 复制代码
CREATE TABLE products (
    id INT PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    price DECIMAL(10,2) NOT NULL
);
  1. 默认约束 (DEFAULT)
  • 当插入数据时,如果没有提供值,则使用默认值
sql 复制代码
CREATE TABLE orders (
    id INT PRIMARY KEY,
    order_date DATE DEFAULT CURRENT_DATE,
    status VARCHAR(20) DEFAULT 'pending'
);
  1. 检查约束 (CHECK) - MySQL 8.0+
  • 限制列中值的范围

  • 确保数据满足特定条件

sql 复制代码
CREATE TABLE employees (
    id INT PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    age INT CHECK (age >= 18),
    salary DECIMAL(10,2) CHECK (salary > 0)
);

1.4、约束的添加与删除

1.添加约束

sql 复制代码
-- 添加主键
ALTER TABLE students ADD PRIMARY KEY (id);

-- 添加外键
ALTER TABLE orders ADD CONSTRAINT fk_user
FOREIGN KEY (user_id) REFERENCES users(id);

-- 添加唯一约束
ALTER TABLE products ADD UNIQUE (product_code);

2.删除约束

sql 复制代码
-- 删除主键
ALTER TABLE students DROP PRIMARY KEY;

-- 删除外键
ALTER TABLE orders DROP FOREIGN KEY fk_user;

-- 删除唯一约束
ALTER TABLE products DROP INDEX product_code;

合理使用约束可以确保数据库数据的完整性和一致性,是数据库设计中的重要环节。


2、核心特性

  1. 开源免费:社区版可免费使用,有活跃的开源社区支持

  2. 跨平台:支持Windows、Linux、macOS等多种操作系统

  3. 高性能:优化过的存储引擎(InnoDB等)提供良好的读写性能

  4. 可扩展性:支持主从复制、分片等扩展方案

  5. 关系型数据库:基于表结构存储数据,支持SQL(结构化查询语言)

3、主要组件

  • 存储引擎:InnoDB(默认)、MyISAM、Memory等,各有适用场景

  • 查询优化器:分析SQL语句并生成高效执行计划

  • 连接池:管理数据库连接,提高并发性能

  • 日志系统:包括二进制日志、错误日志、慢查询日志等

4、数据结构原理

5、索引失效

持续更新

6、常用问题

1、count(*)和count(1)和count(列)区别

  1. COUNT(*)COUNT(1)在实际结果上完全相同。

  2. 它们的执行计划也完全一致。

  3. 在复杂查询和性能测试中表现相同。

  4. COUNT(列名)有明显区别,count(列)会忽略NULL值。

2、Delete和Truncate区别

TRUNCATE和DETELE都能实现删除表中的所有数据的功能。

但两者也是有区别的:

1、DELETE语句后可跟WHERE子句,可通过指定WHERE子句中的条件表达式只删除满足条件的部分记录;但是,TRUNCATE语句只能用于删除表中的所有记录。

2、使用TRUNCATE语句删除表中的数据后,再次向表中添加记录时自动增加字段的默认初始值重新由1开始;使用DELETE语句删除表中所有记录后,再次向表中添加记录时自动增加字段的值为删除时该字段的最大值加1。

3、DELETE语句是DML语句,TRUNCATE语句通常被认为是DDL语句。

7、优势与局限

优势

  • 成熟稳定,社区支持完善

  • 易于安装和使用

  • 良好的兼容性和工具生态

  • 支持事务处理(ACID特性)

局限

  • 在大数据量(如PB级)场景下不如NoSQL高效

  • 水平扩展能力相对有限

  • 复杂查询性能可能不如专用分析型数据库

参考文章:

1、MySQL 有这一篇就够(呕心狂敲37k字,只为博君一点赞!!!)_mysql有这一篇幅就够了-CSDN博客

相关推荐
都叫我大帅哥12 分钟前
MySQL慢查询定位与执行计划分析:从踩坑到起飞
java·mysql
巴里巴气16 分钟前
MongoDB数据基本介绍
数据库·mongodb
mini小新43 分钟前
PostgreSQL如何进行跨服务器迁移数据
服务器·数据库·postgresql·数据迁移
学不动CV了1 小时前
深入理解C语言内存空间、函数指针(三)(重点是函数指针)
c语言·arm开发·数据库·stm32·单片机·嵌入式硬件·c#
Another Iso10 小时前
CentOs 7 MySql8.0.23之前的版本主从复制
linux·mysql·centos
若兰幽竹12 小时前
【从零开始编写数据库:基于Python语言实现数据库ToyDB的ACID特性】
数据库·python
宇钶宇夕12 小时前
S7-200 SMART CPU 密码清除全指南:从已知密码到忘记密码的解决方法
运维·服务器·数据库·程序人生·自动化
周杰伦的稻香12 小时前
MySQL密码管理器“mysql_config_editor“
数据库·mysql
云朵大王13 小时前
SQL 视图与事务知识点详解及练习题
java·大数据·数据库
czhc114007566313 小时前
LINUX712 MYSQL;磁盘分区;NFS
数据库·mysql·adb