目录
简介 <a name="简介"></a>
MySQL 是一个开源的关系型数据库管理系统,广泛应用于各种规模的应用程序中。它以其高性能、可靠性和易用性而闻名。
安装与配置 <a name="安装与配置"></a>
安装
- Linux
1sudo apt-get update 2sudo apt-get install mysql-server
- Windows 下载安装包并按照向导提示进行安装。
配置
- 配置文件 (
my.cnf
或my.ini
)1[mysqld] 2datadir=/var/lib/mysql 3log-error=/var/log/mysqld.log
基本概念 <a name="基本概念"></a>
数据类型 <a name="数据类型"></a>
MySQL 支持多种数据类型,例如:
INT
- 整数VARCHAR
- 可变长度字符串DATE
- 日期值
表结构设计 <a name="表结构设计"></a>
设计表时需要考虑字段类型、主键、外键等。
1CREATE TABLE employees (
2 id INT AUTO_INCREMENT PRIMARY KEY,
3 first_name VARCHAR(50) NOT NULL,
4 last_name VARCHAR(50),
5 hire_date DATE
6);
SQL 命令 <a name="sql-命令"></a>
数据定义语言 (DDL) <a name="数据定义语言-ddl"></a>
用于定义数据库结构,例如创建表、修改表等。
创建表
1CREATE TABLE departments (
2 dept_no CHAR(4) PRIMARY KEY,
3 dept_name VARCHAR(40) NOT NULL
4);
修改表
1ALTER TABLE departments ADD COLUMN location VARCHAR(100);
数据操纵语言 (DML) <a name="数据操纵语言-dml"></a>
用于插入、更新和删除数据。
插入数据
1INSERT INTO employees (first_name, last_name, hire_date)
2VALUES ('John', 'Doe', '2020-01-01');
更新数据
1UPDATE employees SET last_name = 'Smith' WHERE id = 1;
删除数据
1DELETE FROM employees WHERE id = 1;
数据查询语言 (DQL) <a name="数据查询语言-dql"></a>
用于检索数据。
基本查询
1SELECT * FROM employees;
条件查询
1SELECT * FROM employees WHERE hire_date > '2020-01-01';
索引管理 <a name="索引管理"></a>
索引可以提高查询效率。
创建索引
1CREATE INDEX idx_last_name ON employees(last_name);
删除索引
1DROP INDEX idx_last_name ON employees;
事务处理 <a name="事务处理"></a>
确保数据的一致性和完整性。
开始事务
1START TRANSACTION;
提交事务
1COMMIT;
回滚事务
1ROLLBACK;
视图 <a name="视图"></a>
简化复杂的查询语句。
创建视图
1CREATE VIEW employee_details AS
2SELECT e.first_name, e.last_name, d.dept_name
3FROM employees e JOIN departments d ON e.dept_no = d.dept_no;
存储过程 <a name="存储过程"></a>
封装了一组 SQL 语句,可以被重复调用。
创建存储过程
1DELIMITER //
2CREATE PROCEDURE GetEmployeeDetails(IN emp_id INT)
3BEGIN
4 SELECT e.first_name, e.last_name, d.dept_name
5 FROM employees e JOIN departments d ON e.dept_no = d.dept_no
6 WHERE e.id = emp_id;
7END //
8DELIMITER ;
调用存储过程
1CALL GetEmployeeDetails(1);
触发器 <a name="触发器"></a>
在特定事件发生时自动执行。
创建触发器
1DELIMITER //
2CREATE TRIGGER UpdateHireDate
3AFTER INSERT ON employees
4FOR EACH ROW
5BEGIN
6 UPDATE departments SET num_employees = num_employees + 1 WHERE dept_no = NEW.dept_no;
7END //
8DELIMITER ;
备份与恢复 <a name="备份与恢复"></a>
定期备份数据库以防止数据丢失。
备份
1mysqldump -u root -p database_name > backup.sql
恢复
1mysql -u root -p database_name < backup.sql
性能优化 <a name="性能优化"></a>
通过合理的索引设计和查询优化提升性能。
查询优化
使用 EXPLAIN 分析查询计划。
索引优化
合理设计索引减少 I/O 操作。
安全性和权限管理 <a name="安全性和权限管理"></a>
保护数据库免受未经授权的访问。
创建用户
1CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';
授予权限
1GRANT ALL PRIVILEGES ON database_name.* TO 'newuser'@'localhost';
常见问题与解决方案 <a name="常见问题与解决方案"></a>
- 慢查询 - 使用 EXPLAIN 分析,优化索引。
- 连接数过多 - 调整
max_connections
参数。