MySQL基础

掌握数据库基本概念和MySQL入门

什么是数据库?

数据库是按照数据结构来组织、存储和管理数据的仓库。数据库管理系统(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基础概念后,您可以继续学习: