了解 MySQL 数据库及其安装配置
MySQL 是世界上最流行的开源关系型数据库管理系统(RDBMS),由瑞典 MySQL AB 公司开发,现属于 Oracle 公司。
存储数据的仓库,按照一定的数据结构来组织、存储和管理数据。
数据库中存储数据的基本单位,由行和列组成。
表中的列,定义数据的类型和属性。
表中的行,表示一条完整的数据。
唯一标识表中每条记录的字段。
| ID(主键) | 姓名 | 年龄 | 邮箱 |
|---|---|---|---|
| 1 | 张三 | 25 | zhang@example.com |
| 2 | 李四 | 30 | li@example.com |
↑ 记录(Row)
← 字段(Column)→
# 使用 Homebrew 安装
brew install mysql
# 启动 MySQL 服务
brew services start mysql
# 设置 root 密码
mysql_secure_installation# 更新包列表
sudo apt update
# 安装 MySQL
sudo apt install mysql-server
# 启动 MySQL 服务
sudo systemctl start mysql
# 设置开机自启
sudo systemctl enable mysql
# 安全配置
sudo mysql_secure_installation# 连接到 MySQL
mysql -u root -p
# 输入密码后进入 MySQL 命令行
Enter password: ****
mysql> -- 查看所有数据库
SHOW DATABASES;
-- 查看 MySQL 版本
SELECT VERSION();
-- 查看当前用户
SELECT USER();
-- 退出 MySQL
EXIT;
-- 或
QUIT;SQL(Structured Query Language)是操作数据库的标准语言,分为四大类:
用于定义数据库结构,包括创建、修改、删除数据库对象。
-- CREATE: 创建
CREATE DATABASE mydb;
CREATE TABLE users (id INT, name VARCHAR(50));
-- ALTER: 修改
ALTER TABLE users ADD COLUMN age INT;
-- DROP: 删除
DROP TABLE users;
DROP DATABASE mydb;
-- TRUNCATE: 清空表
TRUNCATE TABLE users;用于操作表中的数据,包括插入、更新、删除。
-- INSERT: 插入数据
INSERT INTO users (name, age) VALUES ('张三', 25);
-- UPDATE: 更新数据
UPDATE users SET age = 26 WHERE name = '张三';
-- DELETE: 删除数据
DELETE FROM users WHERE name = '张三';用于查询数据,是最常用的SQL类型。
-- SELECT: 查询数据
SELECT * FROM users;
SELECT name, age FROM users WHERE age > 20;
-- 支持排序、分组、聚合等
SELECT COUNT(*) FROM users;
SELECT * FROM users ORDER BY age DESC;用于控制数据库访问权限。
-- GRANT: 授权
GRANT SELECT, INSERT ON mydb.* TO 'user'@'localhost';
-- REVOKE: 撤销权限
REVOKE INSERT ON mydb.* FROM 'user'@'localhost';范式是设计数据库的规范,目的是减少数据冗余,提高数据一致性。
确保每列都是不可分割的原子值。
❌ 违反1NF:
| id | name | phone |
|---|---|---|
| 1 | 张三 | 13800138000, 13900139000 |
✓ 符合1NF:
| id | name | phone |
|---|---|---|
| 1 | 张三 | 13800138000 |
| 2 | 张三 | 13900139000 |
在1NF基础上,消除非主键字段对主键的部分依赖。
在2NF基础上,消除非主键字段对主键的传递依赖。
-- ❌ 违反3NF:学生表中包含班级名称和班主任
CREATE TABLE students_bad (
id INT PRIMARY KEY,
name VARCHAR(50),
class_id INT,
class_name VARCHAR(50), -- 依赖class_id
class_teacher VARCHAR(50) -- 依赖class_name
);
-- ✓ 符合3NF:拆分为两个表
CREATE TABLE students (
id INT PRIMARY KEY,
name VARCHAR(50),
class_id INT
);
CREATE TABLE classes (
id INT PRIMARY KEY,
name VARCHAR(50),
teacher VARCHAR(50)
);| 工具 | 特点 | 平台 |
|---|---|---|
| MySQL Workbench | 官方图形化工具 | 跨平台 |
| Navicat | 功能强大,界面友好 | 跨平台(收费) |
| phpMyAdmin | Web 界面管理 | 浏览器 |
| DBeaver | 开源免费,支持多种数据库 | 跨平台 |
| DataGrip | JetBrains 出品 | 跨平台(收费) |
在下面输入 SQL 命令并执行(模拟环境):
SELECT 语句属于哪种 SQL 类型?
第一范式要求每列必须是:
1. MySQL 是关系型数据库管理系统。
2. 一个表可以有多个主键。
以下哪个不是 MySQL 客户端工具?
查看所有数据库的命令是: