目录
一、数据库相关概念
1.1 什么是数据库
数据库是统一管理的、长期储存在计算机内的、有组织的相关数据的集合。数据库的基本特征包括:数据按 一定的数据模型组织、描述和储存;数据间联系密切、冗余度较小;数据独立性较高;易扩展;可为各种用户共享。
1.2数据库的实际应用
-
数据存储:数据库能够存储和管理大量的数据,将数据以一定的结构存储计算机中,使得数据的存储、管理、检索更加高效和便捷。
-
数据管理:数据库可以对数据进行增加、删除、修改、查询等操作,并且可以对数据进行权限控制,保证数据的安全性和完整性。
-
数据分析:数据库可以连接各种数据源,对数据进行提取、转换、加载等操作,从而将数据转换成有用的信息,为决策提供 支持
1.3 最常用的数据库模式
-
关系型数据库
-
特点:数据像表格一样存储(表、行、列),通过 “关系” 连接不同表(比如学生表和课程表通过学号关联)。
-
代表:MySQL(免费开源,网站开发常用)、Oracle(企业级,安全性强)、SQL Server(微软出品,和 Windows 集成好)。
-
适用场景:数据结构固定、需要复杂查询(如订单统计、财务报表)。
-
-
非关系型数据库
-
特点:不依赖表格,数据存储灵活(比如键值对、文档型、图结构)。
-
代表:Redis(内存数据库,读写速度极快,常用来缓存数据)、MongoDB(文档型,适合存 JSON 格式数据,如社交媒体内容)。
-
适用场景:数据量大、结构多变(如日志记录、实时推荐系统)
-
1.4 数据库相关名词
-
表(Table):数据库里的数据表格,比如 “用户表”“商品表”。
-
字段(Column):表中的一列,定义数据类型(如姓名 - 文本、年龄 - 数字)。
-
记录(Row):表中的一行,代表一条完整数据(如某个用户的所有信息)。
-
主键(Primary Key):表中唯一标识每一行的字段(如用户 ID、订单号),不能重复。
-
外键(Foreign Key):用于连接不同表的字段,建立表与表的关系(如订单表的 “用户 ID” 关联用户表)。
-
SQL(结构化查询语言):操作数据库的 “命令语言”,用来查询、插入、修改、删除数据(如
SELECT * FROM users
)。 -
事务(Transaction):一组必须全部成功或全部失败的操作(如转账时,扣款和入账必须同时完成)。
-
索引(Index):给字段加 “快速查找标签”,加快查询速度(类似书的目录)。
二、 Mysql数据库
2.1 Mysql数据库介绍
基础概念
Mysql数据库是一个开源的关系型数据库管理系统(RDBMS),由瑞典的MySQL AB公司开发,现属于Oracle旗下产品。它是目前最流行的关系型数据库之一,特别在WEB应用方面表现出色 开源性、高性能、简单易用、安全性、可扩展性、支持多种编程语言
特点
-
开源免费:成本低,任何人都可以自由使用、修改和分发,适合各种规模的项目。
-
性能高效:具备良好的并发处理能力和查询优化机制,能快速处理大量数据的读写操作。
-
使用便捷:简单易学,有丰富的文档和工具支持,易于安装和管理。
-
跨平台性:可在多种操作系统上运行,如 Windows、Linux、Mac OS 等,具有很强的适应性。
应用场景
-
Web 应用程序:常用于与各种 Web 框架结合,存储用户信息、文章内容、评论等数据,如 WordPress 等内容管理系统就常使用 MySQL 数据库。
-
电子商务系统:可用于存储商品信息、订单数据、用户购物车等,支持高并发的交易处理。
-
企业信息管理系统:如员工信息管理、库存管理、客户关系管理等系统,能满足企业对数据存储和管理的需求。
2.2 Mysql服务端架构(从内到外)
-
数据库管理系统(DBMS) - 最外层 “大管家” 相当于数据库的 “总控中心”,负责管理整个服务器端的运行。它能处理用户请求、控制数据安全(比如设置权限)、优化查询效率,还能协调多个数据库同时工作。常见的 DBMS 有 MySQL、Oracle、SQL Server 等。
-
数据库(Database) - 第二层 “数据仓库” 是 DBMS 管理下的大型数据集合,像一个独立的仓库,里面可以存放不同类型的数据。一个 DBMS 能管理多个数据库,比如电商系统可能有 “用户库”“商品库”“订单库”,各管各的业务数据。
-
二维数据表(Table) - 第三层 “数据表格” 数据库里的数据按表分类存放,每个表就像 Excel 表格,有行和列。比如 “用户表” 存用户信息,“商品表” 存商品详情。表和表之间能通过关联(外键)建立关系,方便查询复杂数据。
-
字段(Field) - 第四层 “最小存储单元” 表中的 “列” 就是字段,规定了数据类型(文本、数字等)。比如 “用户表” 里的 “姓名” 字段存文字,“年龄” 字段存数字,是实际存储数据的最小单位,一行数据的完整信息由多个字段共同组成。
2.3 数据库管理工具
2.3.1 命令行窗口
打开我们的phpstudy,启动mysql服务,找到网站根目录
进入到命令行后,输入
myaql -u root -p
用户名和密码都是:root
2.3.2 Navicat
Navicat 是一款功能强大的数据库管理工具,能连接 MySQL 服务器。
-
数据库操作:可进行数据库的创建、修改和删除。
-
数据表操作:支持创建、修改、删除数据表,以及对数据的增删改查。
-
可视化工具:提供可视化查询构建工具,让查询操作更直观便捷 ,降低操作难度,提高工作效率。
这里给大家一个Navicat官网:Navicat图形界面 | 功能全面的数据库管理工具
2.4 Mysql默认的三个库
MySQL 默认的三个库分别是information_schema
、mysql
和performance_schema
,以下是对它们的详细介绍:
-
information_schema
-
这是一个存储了 MySQL 服务器元数据的数据库,它包含了关于数据库、表、列、索引、用户权限等各种数据库对象的信息。例如,通过查询
information_schema.tables
表可以获取数据库中所有表的基本信息,包括表名、所属数据库、创建时间等;查询information_schema.columns
表可以获取列的详细信息,如列名、数据类型、是否为主键等。这些信息对于数据库管理员和开发人员来说非常有用,有助于了解数据库的结构和状态,进行数据库的管理、优化和开发工作。
-
-
mysql
-
该库是 MySQL 数据库系统的核心库,存储了 MySQL 服务器运行所需的各种系统信息和配置数据。比如,
mysql.user
表存储了数据库用户的账号信息、权限设置等;mysql.db
表定义了数据库级别的权限;mysql.tables_priv
和mysql.columns_priv
表分别存储了表级和列级的权限信息。此外,它还包含一些与存储引擎、字符集等相关的系统表,这些表对于 MySQL 服务器的正常运行和管理至关重要。
-
-
performance_schema
-
主要用于收集 MySQL 服务器性能相关的信息。它可以帮助数据库管理员和开发人员深入了解数据库的性能瓶颈,进行性能分析和优化。例如,通过该库可以查看查询执行的时间、等待事件、锁信息、内存使用情况等详细的性能指标。可以通过查询
performance_schema.events_statements_summary_by_digest
表来获取不同查询语句的执行统计信息,包括执行次数、总执行时间、平均执行时间等,从而找出执行效率较低的查询进行优化。
-
这三个默认库在 MySQL 数据库系统中各自发挥着重要的作用,是管理和优化 MySQL 数据库的重要依据。
2.5 数据库数据类型
MySQL 数据类型用于定义表中列可存储的数据类别,每种类型都有特定用途和存储限制,合理使用能提升数据库性能和数据准确性。
一、数值类型
1. 整数类型
类型 | 存储字节 | 有符号取值范围 | 无符号取值范围 | 应用场景 |
---|---|---|---|---|
TINYINT | 1 | -128 ~ 127 | 0 ~ 255 | 存储小范围计数、状态标志 |
SMALLINT | 2 | -32768 ~ 32767 | 0 ~ 65535 | 短整型数据 |
MEDIUMINT | 3 | -8388608 ~ 8388607 | 0 ~ 16777215 | 中等范围整数 |
INT | 4 | -2147483648 ~ 2147483647 | 0 ~ 4294967295 | 常规整数存储 |
BIGINT | 8 | -2^63 ~ 2^63-1 | 0 ~ 2^64-1 | 超大整数(如银行流水号) |
2. 浮点数类型
-
FLOAT:占用 4 字节,单精度浮点数,适合对精度要求不高的计算(如商品折扣率)
-
DOUBLE:占用 8 字节,双精度浮点数,精度更高,适合科学计算或金融计算
-
DECIMAL(M,D):可自定义精度(M 总位数,D 小数位数),常用于银行账户金额存储,确保数值准确无误差
二、日期和时间类型
类型 | 存储字节 | 取值范围 | 格式 | 典型用途 |
---|---|---|---|---|
DATE | 3 | 1000-01-01 ~ 9999-12-31 | YYYY-MM-DD | 仅存储日期(如订单日期) |
TIME | 3 | -838:59:59 ~ 838:59:59 | HH:MM:SS | 时间值或持续时间 |
YEAR | 1 | 1901 ~ 2155 | YYYY | 年份记录 |
DATETIME | 8 | 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59 | YYYY-MM-DD HH:MM:SS | 完整日期时间(如日志时间) |
TIMESTAMP | 4 | 1970-01-01 00:00:01 UTC ~ 2038-01-19 03:14:07 | YYYY-MM-DD HH:MM:SS | 自动记录数据修改时间戳 |
注意:TIMESTAMP 受时区影响,DATETIME 存储的是绝对时间
三、 字符串类型
类型 | 最大长度 | 存储性质 | 典型用途 |
---|---|---|---|
CHAR | 0 - 255 bytes | 定长字符串 | 固定长度编号、短标识 |
VARCHAR | 0 - 65535 bytes | 变长字符串 | 用户名、商品描述 |
TINYBLOB | 0 - 255 bytes | 二进制数据 | 小图标、短二进制片段 |
TINYTEXT | 0 - 255 bytes | 文本数据 | 短评论、标签 |
BLOB | 0 - 65,535 bytes | 二进制数据 | 图片、音频片段 |
TEXT | 0 - 65,535 bytes | 文本数据 | 文章内容、长评论 |
MEDIUMBLOB | 0 - 16,777,215 bytes | 二进制数据 | 高清图片、短视频 |
MEDIUMTEXT | 0 - 16,777,215 bytes | 文本数据 | 小说章节、中型文档 |
LONGBLOB | 0 - 4,294,967,295 bytes | 二进制数据 | 大型文件、完整视频 |
LONGTEXT | 0 - 4,294,967,295 bytes | 文本数据 | 整本书籍、超长篇报告 |
2.6 主键和外键
一、主键(Primary Key)
-
定义:用于唯一标识表中每一行数据的一列或多列组合
-
核心约束
:
-
唯一性:主键列中的每个值必须唯一,不允许重复
-
非空性:主键列不允许存储 NULL 值
-
-
作用
:
-
快速定位与检索数据(提升查询效率)
-
确保表中数据的完整性和准确性
-
-
示例:用户表中的
user_id
、订单表中的order_id
二、外键(Foreign Key)
-
定义:用于建立表与表之间关联关系的约束,保证数据一致性
-
工作机制
:
-
子表(从表)中的外键列,其值必须在父表(主表)的主键或唯一键列中存在
-
例如:
订单表
中的user_id
作为外键,必须对应用户表
中已存在的user_id
-
-
作用
:
-
防止子表出现孤立数据(无对应主表记录的数据)
-
维护表间数据逻辑关系,保证数据完整性
-
-
级联操作
(可选):
-
CASCADE
:父表数据删除 / 更新时,子表相关数据自动同步删除 / 更新 -
SET NULL
:父表数据删除 / 更新时,子表外键列自动设为 NULL(需允许 NULL 值)
-
三、使用场景总结
-
主键:每个表建议设置主键,作为数据的唯一标识
-
外键:当存在表间关联关系(如一对多、多对一)时,通过外键约束确保数据一致性