MySQL基础入门
在Web开发和数据管理领域,MySQL是最受欢迎的开源关系型数据库管理系统之一。它以其高性能、稳定性和易用性而闻名,被广泛应用于各种规模的应用程序中。
数据库与MySQL概述
数据库基础概念
在深入学习MySQL之前,我们首先需要了解一些数据库的基本概念:
- 数据(Data):描述事物的符号记录,可以是数字、文字、图像、声音等。
- 数据库(DB):长期存储在计算机内、有组织的、可共享的大量数据的集合。
- 数据库管理系统(DBMS):位于用户与操作系统之间的一层数据管理软件,用于建立、使用和维护数据库。
关系型数据库(RDBMS)原理
关系型数据库是基于关系模型的数据库,数据以表格的形式存储,表格之间可以通过关联字段建立关系。
- 表(Table):数据库中存储数据的基本结构,由行和列组成。
- 行(Row):表中的记录,也称为元组。
- 列(Column):表中的字段,也称为属性。
- 主键(Primary Key):唯一标识表中每一行记录的字段或字段组合。
- 外键(Foreign Key):用于建立和加强两个表数据之间的链接的一列或多列。
MySQL简介
MySQL是一个开源的关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司。
特点与优势
- 开源免费:MySQL是开源软件,可以免费使用,降低了开发成本。
- 跨平台支持:支持多种操作系统,包括Windows、Linux、macOS等。
- 高性能:通过优化的存储引擎和查询优化器,提供快速的数据访问。
- 可靠性高:支持事务处理、崩溃恢复等特性,确保数据安全。
- 易于使用:提供了丰富的SQL语言支持和多种客户端工具。
应用场景
- Web应用:作为LAMP(Linux、Apache、MySQL、PHP)技术栈的核心组件,广泛应用于Web开发。
- 企业级数据存储:适用于各种规模的企业应用,从小型网站到大型企业系统。
- 数据仓库:可用于构建数据仓库和商业智能应用。
- 嵌入式系统:MySQL也适用于嵌入式系统和移动应用。
版本选择
MySQL有多个版本,包括社区版(免费)和企业版(付费)。对于学习和开发,推荐使用MySQL 8.0版本,它支持许多新特性:
- 窗口函数:提供更强大的数据分析能力。
- 公用表表达式(CTE):简化复杂查询的编写。
- JSON支持:增强对半结构化数据的处理能力。
- 改进的性能模式:提供更详细的性能监控信息。
环境搭建与基本操作
安装与配置
Windows系统安装
在Windows系统上,有两种主要的安装方式:
MySQL Installer:
- 从MySQL官网下载MySQL Installer
- 运行安装程序,选择适当的安装类型(Developer Default、Server only等)
- 按照向导完成安装,设置root用户密码
压缩包安装:
- 下载MySQL的ZIP压缩包
- 解压到指定目录
- 配置环境变量,添加MySQL的bin目录到PATH
- 初始化数据库:
mysqld --initialize --console - 启动服务:
net start mysql
Linux系统安装
在Linux系统上,可以通过包管理器安装MySQL:
# Ubuntu/Debian系统
sudo apt-get update
sudo apt-get install mysql-server
# CentOS/RHEL系统
sudo yum install mysql-server
# 或者在较新版本中
sudo dnf install mysql-servermacOS系统安装
在macOS系统上,可以通过Homebrew安装MySQL:
# 安装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服务的启动和停止:
# 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客户端工具,通过命令行界面与数据库交互:
# 连接到MySQL服务器
mysql -u root -p
# 连接到指定数据库
mysql -u root -p database_name
# 执行SQL脚本文件
mysql -u root -p database_name < script.sql图形化工具
对于更直观的操作,可以使用图形化工具:
- Navicat:功能强大的数据库管理工具,支持多种数据库系统。
- DBeaver:开源的通用数据库工具,支持MySQL等多种数据库。
- MySQL Workbench:官方提供的数据库设计和管理工具。
SQL基础与数据库操作
SQL语言分类
SQL(Structured Query Language)是用于管理关系型数据库的标准语言,主要分为以下几类:
- DDL(数据定义语言):用于定义和管理数据库对象,如CREATE、ALTER、DROP。
- DML(数据操纵语言):用于操作数据库中的数据,如INSERT、UPDATE、DELETE。
- DQL(数据查询语言):用于查询数据库中的数据,主要是SELECT语句。
- DCL(数据控制语言):用于控制数据库的访问权限,如GRANT、REVOKE。
数据库操作
创建数据库
创建数据库是使用MySQL的第一步,语法如下:
CREATE DATABASE [IF NOT EXISTS] database_name
[CHARACTER SET charset_name]
[COLLATE collation_name];示例:
-- 创建一个名为school的数据库
CREATE DATABASE school;
-- 创建数据库并指定字符集
CREATE DATABASE company CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- 如果数据库不存在则创建
CREATE DATABASE IF NOT EXISTS testdb;查看数据库
可以查看系统中所有的数据库或者特定数据库的详细信息:
-- 查看所有数据库
SHOW DATABASES;
-- 查看数据库创建语句
SHOW CREATE DATABASE school;选择数据库
在执行数据库操作之前,需要选择要操作的数据库:
USE database_name;示例:
-- 选择school数据库
USE school;删除数据库
删除数据库会永久删除数据库及其包含的所有数据,请谨慎操作:
DROP DATABASE [IF EXISTS] database_name;示例:
-- 删除testdb数据库
DROP DATABASE testdb;
-- 如果数据库存在则删除
DROP DATABASE IF EXISTS tempdb;编码设置
为了支持多语言字符(包括中文和emoji),建议使用utf8mb4字符集:
-- 创建数据库时指定字符集
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字节INT或INTEGER: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
表操作
创建表
创建表是数据库设计的重要环节,需要仔细考虑字段类型、约束和索引:
CREATE TABLE [IF NOT EXISTS] table_name (
column_name data_type [constraints],
...
[table_constraints]
) [table_options];示例:
-- 创建学生表
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)
);查看表结构
可以使用多种方式查看表的结构信息:
-- 查看表结构
DESCRIBE table_name;
-- 或者简写为
DESC table_name;
-- 查看创建表的语句
SHOW CREATE TABLE table_name;
-- 查看所有表
SHOW TABLES;修改表
随着业务需求的变化,可能需要修改表结构:
-- 添加列
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;示例:
-- 为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);删除表
删除表会永久删除表及其所有数据,请谨慎操作:
DROP TABLE [IF EXISTS] table_name;示例:
-- 删除临时表
DROP TABLE temp_data;
-- 如果表存在则删除
DROP TABLE IF EXISTS backup_table;实践练习
为了巩固所学知识,建议进行以下实践练习:
创建学生管理数据库
- 创建一个名为school的数据库
- 在school数据库中创建students表和courses表
- 为表添加适当的字段和约束
-- 创建数据库
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)
);设计表结构
在设计表结构时,需要考虑以下因素:
- 合理选择数据类型:根据数据的特点选择合适的数据类型,以节省存储空间和提高查询效率。
- 定义适当的约束:使用主键、外键、唯一性约束等保证数据的完整性和一致性。
- 考虑索引设计:为经常查询的字段创建索引以提高查询性能。
练习表的创建、修改和删除操作
通过实际操作加深对表管理命令的理解:
-- 练习创建表
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基础入门的核心知识,为后续学习更高级的数据库操作打下坚实的基础。