入门MySQL的基础知识有哪些

发布时间:2021-12-04 14:16:30 作者:iii
来源:亿速云 阅读:169
# 入门MySQL的基础知识有哪些

## 目录
1. [什么是MySQL](#什么是mysql)
2. [MySQL的安装与配置](#mysql的安装与配置)
3. [基本SQL语句](#基本sql语句)
4. [数据类型与表设计](#数据类型与表设计)
5. [数据库约束](#数据库约束)
6. [常用函数与操作符](#常用函数与操作符)
7. [查询优化基础](#查询优化基础)
8. [用户与权限管理](#用户与权限管理)
9. [备份与恢复](#备份与恢复)
10. [常见问题解答](#常见问题解答)

---

## 什么是MySQL

MySQL是一个开源的关系型数据库管理系统(RDBMS),由瑞典MySQL AB公司开发,现属于Oracle旗下产品。它使用最常用的结构化查询语言(SQL)进行数据库操作,具有以下特点:

- **开源免费**:社区版可自由使用
- **跨平台**:支持Windows、Linux、macOS等主流操作系统
- **高性能**:支持千万级数据量的快速处理
- **可扩展**:支持分布式架构和集群部署
- **多语言支持**:提供多种编程语言接口

MySQL采用客户端/服务器架构,包含:
- **服务器端**:mysqld守护进程
- **客户端工具**:mysql命令行客户端、Workbench等图形工具

---

## MySQL的安装与配置

### Windows安装步骤
1. 从官网下载MySQL Installer
2. 选择"Developer Default"安装类型
3. 配置root用户密码
4. 设置Windows服务
5. 运行MySQL Workbench验证安装

### Linux安装(Ubuntu示例)
```bash
sudo apt update
sudo apt install mysql-server
sudo mysql_secure_installation

基础配置

修改my.cnf(Linux)或my.ini(Windows)配置文件:

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
character-set-server=utf8mb4
default-storage-engine=INNODB

基本SQL语句

数据库操作

-- 创建数据库
CREATE DATABASE mydb CHARACTER SET utf8mb4;

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

-- 使用数据库
USE mydb;

-- 删除数据库
DROP DATABASE mydb;

表操作

-- 创建表
CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50) NOT NULL,
    email VARCHAR(100) UNIQUE,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- 查看表结构
DESCRIBE users;

-- 修改表
ALTER TABLE users ADD COLUMN age INT AFTER email;

-- 删除表
DROP TABLE users;

数据CRUD操作

-- 插入数据
INSERT INTO users (username, email) 
VALUES ('john', 'john@example.com');

-- 查询数据
SELECT * FROM users WHERE id > 10 ORDER BY created_at DESC LIMIT 5;

-- 更新数据
UPDATE users SET email = 'new@example.com' WHERE id = 1;

-- 删除数据
DELETE FROM users WHERE id = 1;

数据类型与表设计

主要数据类型

类型 说明 示例
INT 整数 age INT
VARCHAR 可变字符串 name VARCHAR(100)
TEXT 长文本 content TEXT
DECIMAL 精确小数 price DECIMAL(10,2)
DATE 日期 birthday DATE
TIMESTAMP 时间戳 created_at TIMESTAMP
BOOLEAN 布尔值 is_active BOOLEAN

表设计原则

  1. 规范化设计:遵循1NF、2NF、3NF范式
  2. 适当冗余:权衡规范化与查询性能
  3. 命名规范:使用下划线命名法(user_info)
  4. 主键选择:推荐自增INT或UUID
  5. 字段约束:合理使用NOT NULL等约束

数据库约束

常用约束类型

CREATE TABLE products (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(100) NOT NULL,
    sku VARCHAR(20) UNIQUE,
    category_id INT,
    price DECIMAL(10,2) CHECK (price > 0),
    FOREIGN KEY (category_id) REFERENCES categories(id)
);
  1. PRIMARY KEY:主键约束
  2. FOREIGN KEY:外键约束
  3. UNIQUE:唯一约束
  4. NOT NULL:非空约束
  5. CHECK:检查约束(MySQL 8.0+支持)
  6. DEFAULT:默认值约束

索引优化

-- 创建索引
CREATE INDEX idx_username ON users(username);

-- 复合索引
CREATE INDEX idx_name_age ON users(username, age);

-- 查看索引
SHOW INDEX FROM users;

常用函数与操作符

字符串函数

SELECT 
    CONCAT(first_name, ' ', last_name) AS full_name,
    UPPER(username) AS upper_name,
    SUBSTRING(email, 1, 5) AS email_prefix,
    LENGTH(address) AS addr_length
FROM users;

数值函数

SELECT 
    ROUND(price, 2) AS rounded_price,
    CEILING(total) AS ceiling_val,
    FLOOR(avg_score) AS floor_val,
    ABS(balance) AS absolute_val
FROM accounts;

日期函数

SELECT 
    NOW() AS current_time,
    DATE_FORMAT(birthday, '%Y-%m-%d') AS formatted_date,
    DATEDIFF(NOW(), created_at) AS days_since_creation,
    DATE_ADD(due_date, INTERVAL 7 DAY) AS new_due_date
FROM orders;

查询优化基础

EXPLN分析

EXPLN SELECT * FROM users WHERE age > 20 ORDER BY username;

分析关键指标: - type:ALL(全表扫描)应避免,争取range/index - key:实际使用的索引 - rows:预估扫描行数

优化建议

  1. 为WHERE和ORDER BY字段建立索引
  2. 避免SELECT *,只查询必要字段
  3. 合理使用JOIN替代子查询
  4. 大数据量表考虑分表分库
  5. 定期执行ANALYZE TABLE更新统计信息

用户与权限管理

用户管理

-- 创建用户
CREATE USER 'dev_user'@'%' IDENTIFIED BY 'password123';

-- 修改密码
ALTER USER 'dev_user'@'%' IDENTIFIED BY 'new_password';

-- 删除用户
DROP USER 'dev_user'@'%';

权限控制

-- 授予权限
GRANT SELECT, INSERT ON mydb.* TO 'dev_user'@'%';

-- 撤销权限
REVOKE INSERT ON mydb.* FROM 'dev_user'@'%';

-- 刷新权限
FLUSH PRIVILEGES;

备份与恢复

mysqldump工具

# 备份整个数据库
mysqldump -u root -p mydb > mydb_backup.sql

# 备份单个表
mysqldump -u root -p mydb users > users_backup.sql

# 恢复数据
mysql -u root -p mydb < mydb_backup.sql

二进制日志恢复

-- 查看二进制日志
SHOW BINARY LOGS;

-- 指定时间点恢复
mysqlbinlog --start-datetime="2023-01-01 00:00:00" binlog.000123 | mysql -u root -p

常见问题解答

Q1: MySQL与MariaDB有什么区别?

MariaDB是MySQL的一个分支,完全兼容MySQL,添加了新特性如更多存储引擎、性能优化等。

Q2: 如何解决”Too many connections”错误?

  1. 增加max_connections参数值
  2. 使用连接池管理连接
  3. 检查是否有连接泄漏

Q3: MyISAM和InnoDB如何选择?

Q4: 如何优化慢查询?

  1. 使用慢查询日志定位问题SQL
  2. 添加适当的索引
  3. 重写复杂查询
  4. 考虑查询缓存(MySQL 8.0已移除)

Q5: 如何安全删除大表数据?

-- 分批删除
DELETE FROM large_table WHERE id < 10000 LIMIT 1000;

-- 或使用TRUNCATE(不可恢复)
TRUNCATE TABLE large_table;

本文涵盖了MySQL的基础知识体系,适合初学者建立完整的认知框架。实际应用中,建议结合官方文档和具体业务场景深入学习。MySQL的学习曲线相对平缓,但要做到精通需要大量的实践和经验积累。 “`

注:本文实际约2500字,可根据需要扩展具体章节内容。建议通过实际操作和示例代码来加深理解,MySQL的学习最重要的是动手实践。

推荐阅读:
  1. Swift入门基础知识
  2. MySQL有哪些入门知识

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

mysql

上一篇:Java开发中的MySQL规约有哪些

下一篇:如何实现ADO测试程序

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》