什么是数据库?
数据库是按照数据结构来组织、存储和管理数据的仓库。数据库管理系统(DBMS)是用于管理数据库的软件系统。
数据库类型
- 关系型数据库(MySQL, PostgreSQL, Oracle) - 使用表格结构存储数据
- 非关系型数据库(MongoDB, Redis) - 使用键值对、文档等形式存储数据
MySQL简介
MySQL是最流行的开源关系型数据库管理系统之一,由Oracle公司开发和支持。
特点:开源免费、性能高、可靠性强、易于使用、支持标准SQL
MySQL基本概念
- 数据库(Database) - 数据存储的容器
- 表(Table) - 数据的二维结构,由行和列组成
- 列(Column) - 表的字段,定义数据类型
- 行(Row) - 表中的记录
- 主键(Primary Key) - 唯一标识表中每行的字段
基本SQL操作
创建数据库
SQL示例
CREATE DATABASE my_database;
选择数据库
SQL示例
USE my_database;
创建表
SQL示例
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL,
email VARCHAR(100) UNIQUE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
插入数据
SQL示例
INSERT INTO users (username, email)
VALUES ('john_doe', 'john@example.com');
查询数据
SQL示例
SELECT * FROM users;
更新数据
SQL示例
UPDATE users
SET email = 'john.doe@example.com'
WHERE username = 'john_doe';
删除数据
SQL示例
DELETE FROM users
WHERE username = 'john_doe';
连接与断开MySQL服务器
命令行连接
# 本地连接
mysql -u root -p
# 远程连接
mysql -h 192.168.1.100 -u username -p
# 指定端口连接
mysql -h localhost -P 3307 -u root -p
# 执行单条SQL后退出
mysql -u root -p -e "SHOW DATABASES;"
# 退出MySQL客户端
EXIT; 或 QUIT;
MySQL服务管理命令
系统服务管理
# Linux (systemd)
systemctl start mysql
systemctl stop mysql
systemctl restart mysql
systemctl status mysql
# Windows
net start MySQL
net stop MySQL
# 检查MySQL是否运行
mysqladmin -u root -p ping
使用MySQL帮助文档
HELP命令示例
-- 查看所有帮助主题
HELP;
-- 查看特定内容帮助
HELP SELECT;
HELP CREATE TABLE;
HELP数据类型;
HELP函数;
-- 查看MySQL版本和状态
SELECT VERSION();
STATUS;
SHOW VARIABLES;
information_schema系统数据库
information_schema是MySQL自带的系统数据库,存储了数据库元数据信息:
常用查询示例
-- 查看所有数据库
SELECT SCHEMA_NAME FROM information_schema.SCHEMATA;
-- 查看指定数据库的所有表
SELECT TABLE_NAME FROM information_schema.TABLES WHERE TABLE_SCHEMA = 'mydb';
-- 查看表结构信息
SELECT COLUMN_NAME, DATA_TYPE, IS_NULLABLE, COLUMN_DEFAULT
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = 'mydb' AND TABLE_NAME = 'users';
-- 查看数据库大小
SELECT TABLE_SCHEMA,
ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) AS 'Size_MB'
FROM information_schema.TABLES
GROUP BY TABLE_SCHEMA;
常见SQL错误及处理
| 错误代码 | 错误信息 | 常见原因 | 解决方法 |
|---|---|---|---|
| 1064 | 语法错误 | SQL拼写错误、缺少引号 | 检查SQL语法,使用IDE高亮 |
| 1045 | 访问被拒绝 | 用户名或密码错误 | 确认用户名/密码,检查主机限制 |
| 1049 | 数据库不存在 | USE的数据库名错误 | SHOW DATABASES;确认数据库存在 |
| 1054 | 未知列名 | 列名拼写错误 | DESC table_name;查看正确列名 |
| 1062 | 重复条目 | 违反唯一约束 | 检查数据或使用INSERT IGNORE |
| 1146 | 表不存在 | 表名拼写错误 | SHOW TABLES;确认表存在 |
| 1215 | 外键约束失败 | 外键引用无效 | 检查引用表的主键值是否存在 |
MySQL客户端工具
MySQL提供了多种客户端工具来管理和操作数据库:
| 工具 | 描述 | 特点 |
|---|---|---|
| MySQL命令行客户端 | 官方命令行工具 | 轻量、快速、功能完整 |
| MySQL Workbench | 官方图形化工具 | 可视化操作、建模、管理 |
| phpMyAdmin | Web版管理工具 | 基于浏览器、易于部署 |
| Navicat | 第三方图形化工具 | 功能强大、界面友好 |
MySQL体系结构
MySQL采用客户端/服务器架构,主要包含以下组件:
- 连接池 - 管理客户端连接
- SQL接口 - 接收SQL命令并返回结果
- 解析器 - 解析SQL语句
- 优化器 - 优化查询执行计划
- 存储引擎 - 负责数据的存储和检索
MySQL存储引擎
MySQL支持多种存储引擎,每种都有其特点和适用场景:
| 存储引擎 | 特点 | 适用场景 |
|---|---|---|
| InnoDB | 支持事务、外键、行级锁 | 事务处理、高并发应用 |
| MyISAM | 不支持事务、表级锁 | 读密集型应用、数据仓库 |
| MEMORY | 数据存储在内存中 | 临时表、高速缓存 |
| ARCHIVE | 高压缩比、只支持插入和查询 | 归档数据、日志存储 |
SQL语言分类
SQL语言按照功能可以分为以下几类:
- 数据定义语言(DDL) - 用于定义数据库对象,如CREATE、ALTER、DROP
- 数据操作语言(DML) - 用于操作数据,如INSERT、UPDATE、DELETE
- 数据查询语言(DQL) - 用于查询数据,主要是SELECT语句
- 数据控制语言(DCL) - 用于控制数据库访问权限,如GRANT、REVOKE
- 事务控制语言(TCL) - 用于管理事务,如COMMIT、ROLLBACK
数据库设计基础
良好的数据库设计是构建高效应用的基础:
规范化
规范化是数据库设计的过程,旨在减少数据冗余和提高数据一致性:
- 第一范式(1NF) - 每个列都是原子性的,不可再分
- 第二范式(2NF) - 满足1NF,且非主键列完全依赖于主键
- 第三范式(3NF) - 满足2NF,且非主键列之间没有传递依赖
实体关系模型
实体关系模型是数据库设计的重要工具:
- 实体 - 现实世界中可区分的对象
- 属性 - 实体的特征
- 关系 - 实体之间的联系
学习建议:初学者建议从MySQL命令行开始学习,可以更好地理解SQL语法和数据库操作原理。
MySQL应用场景
MySQL广泛应用于各种场景:
- Web应用 - 作为后端数据库存储用户数据、内容等
- 电子商务 - 存储产品信息、订单数据、客户信息
- 日志系统 - 存储应用日志、系统日志
- 数据分析 - 作为数据仓库的基础
- 内容管理系统 - 存储文章、页面、媒体信息
MySQL版本发展
MySQL自1995年发布以来,经历了多个重要版本:
- MySQL 3.x - 早期版本,功能基础
- MySQL 4.x - 引入InnoDB存储引擎
- MySQL 5.x - 功能大幅增强,包括存储过程、触发器、视图等
- MySQL 8.x - 当前主流版本,性能和安全大幅提升
SQL注释风格
注释示例
-- 单行注释(两个连字符加空格)
# 单行注释(井号,MySQL特有)
/* 多行注释
可以跨越多行
常用于代码块说明 */
-- 可执行注释(MySQL特有,其他数据库忽略)
/*!50001 SELECT * FROM users */ -- 版本大于等于5.0.01时执行
MySQL命令行实用技巧
\c- 取消当前正在输入的语句\G- 垂直显示查询结果(适合宽表)\s- 显示服务器状态信息\h- 显示帮助信息\u dbname- 切换数据库(等同于USE dbname)\T filename- 将输出记录到文件\t- 关闭输出记录pager less- 使用分页器查看结果system ls- 执行系统命令(Linux/Unix)
MySQL系统数据库
- mysql - 核心系统表,存储用户、权限、插件等
- information_schema - 元数据视图,只读
- performance_schema - 性能监控数据
- sys - 性能视图集合(MySQL 5.7+)
下一步学习
掌握了MySQL基础概念后,您可以继续学习: