Skip to content

MySQL基础入门

在Web开发和数据管理领域,MySQL是最受欢迎的开源关系型数据库管理系统之一。它以其高性能、稳定性和易用性而闻名,被广泛应用于各种规模的应用程序中。

数据库与MySQL概述

数据库基础概念

在深入学习MySQL之前,我们首先需要了解一些数据库的基本概念:

  • 数据(Data):描述事物的符号记录,可以是数字、文字、图像、声音等。
  • 数据库(DB):长期存储在计算机内、有组织的、可共享的大量数据的集合。
  • 数据库管理系统(DBMS):位于用户与操作系统之间的一层数据管理软件,用于建立、使用和维护数据库。

关系型数据库(RDBMS)原理

关系型数据库是基于关系模型的数据库,数据以表格的形式存储,表格之间可以通过关联字段建立关系。

  • 表(Table):数据库中存储数据的基本结构,由行和列组成。
  • 行(Row):表中的记录,也称为元组。
  • 列(Column):表中的字段,也称为属性。
  • 主键(Primary Key):唯一标识表中每一行记录的字段或字段组合。
  • 外键(Foreign Key):用于建立和加强两个表数据之间的链接的一列或多列。

MySQL简介

MySQL是一个开源的关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司。

特点与优势

  1. 开源免费:MySQL是开源软件,可以免费使用,降低了开发成本。
  2. 跨平台支持:支持多种操作系统,包括Windows、Linux、macOS等。
  3. 高性能:通过优化的存储引擎和查询优化器,提供快速的数据访问。
  4. 可靠性高:支持事务处理、崩溃恢复等特性,确保数据安全。
  5. 易于使用:提供了丰富的SQL语言支持和多种客户端工具。

应用场景

  • Web应用:作为LAMP(Linux、Apache、MySQL、PHP)技术栈的核心组件,广泛应用于Web开发。
  • 企业级数据存储:适用于各种规模的企业应用,从小型网站到大型企业系统。
  • 数据仓库:可用于构建数据仓库和商业智能应用。
  • 嵌入式系统:MySQL也适用于嵌入式系统和移动应用。

版本选择

MySQL有多个版本,包括社区版(免费)和企业版(付费)。对于学习和开发,推荐使用MySQL 8.0版本,它支持许多新特性:

  • 窗口函数:提供更强大的数据分析能力。
  • 公用表表达式(CTE):简化复杂查询的编写。
  • JSON支持:增强对半结构化数据的处理能力。
  • 改进的性能模式:提供更详细的性能监控信息。

环境搭建与基本操作

安装与配置

Windows系统安装

在Windows系统上,有两种主要的安装方式:

  1. MySQL Installer

    • 从MySQL官网下载MySQL Installer
    • 运行安装程序,选择适当的安装类型(Developer Default、Server only等)
    • 按照向导完成安装,设置root用户密码
  2. 压缩包安装

    • 下载MySQL的ZIP压缩包
    • 解压到指定目录
    • 配置环境变量,添加MySQL的bin目录到PATH
    • 初始化数据库:mysqld --initialize --console
    • 启动服务:net start mysql

Linux系统安装

在Linux系统上,可以通过包管理器安装MySQL:

bash
# Ubuntu/Debian系统
sudo apt-get update
sudo apt-get install mysql-server

# CentOS/RHEL系统
sudo yum install mysql-server
# 或者在较新版本中
sudo dnf install mysql-server

macOS系统安装

在macOS系统上,可以通过Homebrew安装MySQL:

bash
# 安装Homebrew(如果尚未安装)
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

# 安装MySQL
brew install mysql

# 启动MySQL服务
brew services start mysql

服务管理

安装完成后,需要管理MySQL服务的启动和停止:

bash
# Windows系统
net start mysql     # 启动MySQL服务
net stop mysql      # 停止MySQL服务

# Linux系统
sudo systemctl start mysql    # 启动MySQL服务
sudo systemctl stop mysql     # 停止MySQL服务
sudo systemctl restart mysql  # 重启MySQL服务
sudo systemctl status mysql   # 查看MySQL服务状态

# macOS系统(使用Homebrew)
brew services start mysql     # 启动MySQL服务
brew services stop mysql      # 停止MySQL服务

客户端工具

MySQL提供了多种客户端工具来连接和管理数据库:

命令行客户端

命令行客户端是最基本的MySQL客户端工具,通过命令行界面与数据库交互:

bash
# 连接到MySQL服务器
mysql -u root -p

# 连接到指定数据库
mysql -u root -p database_name

# 执行SQL脚本文件
mysql -u root -p database_name < script.sql

图形化工具

对于更直观的操作,可以使用图形化工具:

  1. Navicat:功能强大的数据库管理工具,支持多种数据库系统。
  2. DBeaver:开源的通用数据库工具,支持MySQL等多种数据库。
  3. MySQL Workbench:官方提供的数据库设计和管理工具。

SQL基础与数据库操作

SQL语言分类

SQL(Structured Query Language)是用于管理关系型数据库的标准语言,主要分为以下几类:

  • DDL(数据定义语言):用于定义和管理数据库对象,如CREATE、ALTER、DROP。
  • DML(数据操纵语言):用于操作数据库中的数据,如INSERT、UPDATE、DELETE。
  • DQL(数据查询语言):用于查询数据库中的数据,主要是SELECT语句。
  • DCL(数据控制语言):用于控制数据库的访问权限,如GRANT、REVOKE。

数据库操作

创建数据库

创建数据库是使用MySQL的第一步,语法如下:

sql
CREATE DATABASE [IF NOT EXISTS] database_name
[CHARACTER SET charset_name]
[COLLATE collation_name];

示例:

sql
-- 创建一个名为school的数据库
CREATE DATABASE school;

-- 创建数据库并指定字符集
CREATE DATABASE company CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- 如果数据库不存在则创建
CREATE DATABASE IF NOT EXISTS testdb;

查看数据库

可以查看系统中所有的数据库或者特定数据库的详细信息:

sql
-- 查看所有数据库
SHOW DATABASES;

-- 查看数据库创建语句
SHOW CREATE DATABASE school;

选择数据库

在执行数据库操作之前,需要选择要操作的数据库:

sql
USE database_name;

示例:

sql
-- 选择school数据库
USE school;

删除数据库

删除数据库会永久删除数据库及其包含的所有数据,请谨慎操作:

sql
DROP DATABASE [IF EXISTS] database_name;

示例:

sql
-- 删除testdb数据库
DROP DATABASE testdb;

-- 如果数据库存在则删除
DROP DATABASE IF EXISTS tempdb;

编码设置

为了支持多语言字符(包括中文和emoji),建议使用utf8mb4字符集:

sql
-- 创建数据库时指定字符集
CREATE DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- 修改现有数据库的字符集
ALTER DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

表结构设计与操作

数据类型

在创建表时,需要为每个字段选择合适的数据类型:

数值型

  • 整数类型

    • TINYINT:1字节,范围-128到127(有符号)或0到255(无符号)
    • SMALLINT:2字节,范围-32,768到32,767(有符号)或0到65,535(无符号)
    • MEDIUMINT:3字节
    • INTINTEGER:4字节
    • BIGINT:8字节
  • 浮点数类型

    • FLOAT:4字节单精度浮点数
    • DOUBLE:8字节双精度浮点数
    • DECIMAL(M,D):高精度小数,M是总位数,D是小数点后的位数

字符串型

  • CHAR(n):固定长度字符串,最大255个字符
  • VARCHAR(n):可变长度字符串,最大65,535个字符
  • TEXT:长文本数据,最大65,535个字符
  • MEDIUMTEXT:中等长度文本,最大16,777,215个字符
  • LONGTEXT:超长文本,最大4,294,967,295个字符

日期时间型

  • DATE:日期格式'YYYY-MM-DD'
  • TIME:时间格式'HH:MM:SS'
  • DATETIME:日期时间格式'YYYY-MM-DD HH:MM:SS'
  • TIMESTAMP:时间戳,范围从1970年到2038年
  • YEAR:年份,格式YYYY

表操作

创建表

创建表是数据库设计的重要环节,需要仔细考虑字段类型、约束和索引:

sql
CREATE TABLE [IF NOT EXISTS] table_name (
    column_name data_type [constraints],
    ...
    [table_constraints]
) [table_options];

示例:

sql
-- 创建学生表
CREATE TABLE students (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(50) NOT NULL,
    age INT,
    email VARCHAR(100) UNIQUE,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- 创建课程表
CREATE TABLE courses (
    id INT AUTO_INCREMENT PRIMARY KEY,
    course_name VARCHAR(100) NOT NULL,
    credits INT DEFAULT 3,
    teacher VARCHAR(50)
);

查看表结构

可以使用多种方式查看表的结构信息:

sql
-- 查看表结构
DESCRIBE table_name;
-- 或者简写为
DESC table_name;

-- 查看创建表的语句
SHOW CREATE TABLE table_name;

-- 查看所有表
SHOW TABLES;

修改表

随着业务需求的变化,可能需要修改表结构:

sql
-- 添加列
ALTER TABLE table_name ADD COLUMN column_name data_type [constraints];

-- 修改列
ALTER TABLE table_name MODIFY COLUMN column_name new_data_type [constraints];

-- 删除列
ALTER TABLE table_name DROP COLUMN column_name;

-- 重命名表
ALTER TABLE old_table_name RENAME TO new_table_name;

-- 添加约束
ALTER TABLE table_name ADD CONSTRAINT constraint_name constraint_definition;

示例:

sql
-- 为students表添加手机号字段
ALTER TABLE students ADD COLUMN phone VARCHAR(20);

-- 修改email字段长度
ALTER TABLE students MODIFY COLUMN email VARCHAR(150);

-- 删除age字段
ALTER TABLE students DROP COLUMN age;

-- 为students表添加外键约束
ALTER TABLE students ADD CONSTRAINT fk_course 
FOREIGN KEY (course_id) REFERENCES courses(id);

删除表

删除表会永久删除表及其所有数据,请谨慎操作:

sql
DROP TABLE [IF EXISTS] table_name;

示例:

sql
-- 删除临时表
DROP TABLE temp_data;

-- 如果表存在则删除
DROP TABLE IF EXISTS backup_table;

实践练习

为了巩固所学知识,建议进行以下实践练习:

创建学生管理数据库

  1. 创建一个名为school的数据库
  2. 在school数据库中创建students表和courses表
  3. 为表添加适当的字段和约束
sql
-- 创建数据库
CREATE DATABASE school CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
USE school;

-- 创建学生表
CREATE TABLE students (
    id INT AUTO_INCREMENT PRIMARY KEY,
    student_id VARCHAR(20) UNIQUE NOT NULL,
    name VARCHAR(50) NOT NULL,
    gender ENUM('男', '女'),
    birth_date DATE,
    phone VARCHAR(20),
    email VARCHAR(100),
    enrollment_date DATE DEFAULT (CURRENT_DATE),
    status ENUM('在读', '毕业', '休学') DEFAULT '在读'
);

-- 创建课程表
CREATE TABLE courses (
    id INT AUTO_INCREMENT PRIMARY KEY,
    course_code VARCHAR(20) UNIQUE NOT NULL,
    course_name VARCHAR(100) NOT NULL,
    credits INT DEFAULT 3,
    teacher VARCHAR(50),
    description TEXT
);

-- 创建选课表
CREATE TABLE enrollments (
    id INT AUTO_INCREMENT PRIMARY KEY,
    student_id INT,
    course_id INT,
    enrollment_date DATE DEFAULT (CURRENT_DATE),
    grade DECIMAL(5,2),
    FOREIGN KEY (student_id) REFERENCES students(id),
    FOREIGN KEY (course_id) REFERENCES courses(id)
);

设计表结构

在设计表结构时,需要考虑以下因素:

  1. 合理选择数据类型:根据数据的特点选择合适的数据类型,以节省存储空间和提高查询效率。
  2. 定义适当的约束:使用主键、外键、唯一性约束等保证数据的完整性和一致性。
  3. 考虑索引设计:为经常查询的字段创建索引以提高查询性能。

练习表的创建、修改和删除操作

通过实际操作加深对表管理命令的理解:

sql
-- 练习创建表
CREATE TABLE departments (
    id INT AUTO_INCREMENT PRIMARY KEY,
    dept_name VARCHAR(50) NOT NULL,
    manager VARCHAR(50),
    location VARCHAR(100)
);

-- 练习修改表结构
ALTER TABLE departments ADD COLUMN budget DECIMAL(15,2);
ALTER TABLE departments MODIFY COLUMN manager VARCHAR(100);
ALTER TABLE departments DROP COLUMN location;

-- 练习删除表
DROP TABLE departments;

通过以上练习,您将掌握MySQL基础入门的核心知识,为后续学习更高级的数据库操作打下坚实的基础。