MySQL 基础教程:数据库管理、SQL 操作与数据类型解析
本文详细探讨 MySQL 基础知识的各个方面,我们将细化每个知识点,讲解相关原理、使用方法以及常见的最佳实践。
1. MySQL 概述与架构
- MySQL 的架构
MySQL 是一个客户端-服务器架构的数据库管理系统。其主要组件包括: - 客户端:MySQL 客户端用于发送 SQL 查询请求,可以是命令行工具、图形化界面(如 MySQL Workbench)或编程语言(如 Python、PHP)。
- 服务器:MySQL 服务器负责执行客户端发送的查询,返回查询结果。
- 查询解析器:将 SQL 查询语句解析为执行计划。
- 优化器:优化器负责选择最优的查询执行路径。它会分析查询的结构、表的索引和数据分布来决定执行计划。
- 存储引擎:存储引擎是 MySQL 的核心组件之一,负责如何存储、读取和管理数据。常见的存储引擎有 InnoDB(支持事务、外键)和 MyISAM(速度快,但不支持事务和外键)。
- MySQL 的安装与配置
安装 MySQL 通常有两种方式:使用包管理工具(如apt、yum)或直接下载安装包。安装后,主要的配置文件是my.cnf(Linux)或my.ini(Windows)。常见的配置项有: innodb_buffer_pool_size:决定 InnoDB 存储引擎的数据缓存大小。max_connections:设置最大允许的连接数。query_cache_size:设置查询缓存的大小(注意:在 MySQL 8.0 版本中已被移除)。tmp_table_size和max_heap_table_size:设置临时表的大小限制。 配置文件修改后需要重启 MySQL 服务,命令为:
sudo systemctl restart mysql
- MySQL 客户端与命令行操作
通过 MySQL 客户端命令行进行基本操作: - 连接 MySQL:
bash mysql -u root -p - 退出 MySQL 客户端:
bash EXIT; - 查看当前数据库:
sql SELECT DATABASE(); - 显示所有数据库:
sql SHOW DATABASES; - 使用指定数据库:
sql USE database_name;
2. 数据库与表管理
- 创建数据库与表
- 创建数据库:
sql CREATE DATABASE database_name; - 创建表:
sql CREATE TABLE table_name ( column1_name column1_type, column2_name column2_type, ... );
示例:
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL,
email VARCHAR(100),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
- 删除数据库与表
- 删除表:
sql DROP TABLE table_name; - 删除数据库:
DROP DATABASE database_name; - 修改表结构
- 添加列:
sql ALTER TABLE table_name ADD column_name column_type; - 删除列:
sql ALTER TABLE table_name DROP COLUMN column_name; - 修改列:
ALTER TABLE table_name MODIFY COLUMN column_name new_column_type; - 数据类型
- 数值类型:
INT: 用于存储整数,支持符号和无符号整数,范围根据大小不同(如INT(11))。FLOAT和DOUBLE: 用于存储浮动的小数。FLOAT精度较低,DOUBLE精度较高。
- 字符串类型:
VARCHAR(n): 可变长度的字符串,最多存储n个字符。TEXT: 用于存储长文本数据,最多可以存储 65,535 字符。
- 日期时间类型:
DATE: 存储日期(如2023-05-12)。DATETIME: 存储日期和时间(如2023-05-12 14:30:00)。TIMESTAMP: 存储从 1970 年 1 月 1 日开始的秒数,常用于表示事件发生的时间。
3. SQL 基础操作
- SELECT 查询
- 选择所有列:
sql SELECT * FROM users; - 选择指定列:
SELECT id, username FROM users; - WHERE 条件查询
使用WHERE进行数据筛选:
SELECT * FROM users WHERE username = 'john';
- 使用逻辑运算符:
AND,OR:
SELECT * FROM users WHERE age > 25 AND gender = 'M';
- INSERT 插入数据
向表中插入数据:
INSERT INTO users (username, email) VALUES ('johndoe', 'john@example.com');
- UPDATE 更新数据
更新表中现有的数据:
UPDATE users SET email = 'newemail@example.com' WHERE username = 'johndoe';
- DELETE 删除数据
删除满足条件的数据:
DELETE FROM users WHERE username = 'johndoe';
4. 排序与分组
- ORDER BY 排序
按照指定列排序:
SELECT * FROM users ORDER BY created_at DESC;
- GROUP BY 分组
对数据进行分组并使用聚合函数(如COUNT、SUM等):
SELECT COUNT(*) AS total_users FROM users GROUP BY gender;
- HAVING 子句
用于过滤GROUP BY分组后的数据:
SELECT gender, COUNT(*) AS total_users
FROM users
GROUP BY gender
HAVING COUNT(*) > 5;
5. 常见约束
- 主键(PRIMARY KEY)
主键约束保证数据的唯一性和非空性。
CREATE TABLE users (
id INT PRIMARY KEY,
username VARCHAR(50) NOT NULL
);
- 外键(FOREIGN KEY)
外键用于在表之间建立关联:
CREATE TABLE orders (
order_id INT PRIMARY KEY,
user_id INT,
FOREIGN KEY (user_id) REFERENCES users(id)
);
- 唯一约束(UNIQUE)
保证字段值唯一:
CREATE TABLE users (
id INT PRIMARY KEY,
email VARCHAR(100) UNIQUE
);
- 非空约束(NOT NULL)
强制列不能为空:
CREATE TABLE users (
id INT PRIMARY KEY,
username VARCHAR(50) NOT NULL
);
6. 索引
- 创建索引
创建普通索引:
CREATE INDEX idx_username ON users (username);
创建唯一索引:
CREATE UNIQUE INDEX idx_email ON users (email);
- 索引的作用
索引用于加速查询,但会影响数据插入、更新和删除的性能。在大型数据表中,合理创建索引可以显著提高查询效率。
总结
这一部分介绍了 MySQL 的核心基础,涉及数据库与表的管理、SQL 基本操作以及常见约束和索引的使用。通过理解和掌握这些内容,你将能够高效地管理和操作 MySQL 数据库。