MySQL常用知识点

1. MySQL基础操作

MySQL是一个强大的关系型数据库管理系统。要开始使用MySQL,首先需要掌握一些基本操作。

a. 连接到MySQL服务器

使用命令行连接MySQL:

mysql -u username -p

输入密码后,你就可以连接到MySQL服务器了。

b. 创建和管理数据库

创建新数据库:

CREATE DATABASE mydatabase;

切换到该数据库:

USE mydatabase;

查看所有数据库:

SHOW DATABASES;

删除数据库:

DROP DATABASE mydatabase;

c. 创建和管理表

创建新表:

CREATE TABLE employees (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    email VARCHAR(100) UNIQUE,
    hire_date DATE
);

查看表结构:

DESCRIBE employees;

修改表结构:

ALTER TABLE employees ADD COLUMN salary DECIMAL(10,2);

删除表:

DROP TABLE employees;

2. MySQL数据类型

MySQL提供了多种数据类型,以适应不同的数据存储需求。

a. 数值类型

  • INT: 整数
  • DECIMAL(M,D): 精确小数

b. 字符串类型

  • VARCHAR(N): 可变长度字符串
  • TEXT: 长文本

c. 日期和时间类型

  • DATE: 日期
  • DATETIME: 日期和时间

d. 选择合适数据类型的原则

  • 选择能够准确表示数据的最小数据类型
  • 考虑未来可能的数据增长
  • 对于频繁查询的列,选择适合索引的类型

3. MySQL的增删改查(CRUD)操作

a. 插入数据(INSERT)

INSERT INTO employees (name, email, hire_date)
VALUES ('John Doe', 'john@example.com', '2023-01-15');

b. 查询数据(SELECT)

SELECT * FROM employees WHERE hire_date > '2023-01-01';

c. 更新数据(UPDATE)

UPDATE employees SET salary = 50000 WHERE name = 'John Doe';

d. 删除数据(DELETE)

DELETE FROM employees WHERE id = 1;

4. MySQL高级查询技巧

a. 子查询

SELECT name FROM employees WHERE salary > (SELECT AVG(salary) FROM employees);

b. 组函数和分组(GROUP BY)

SELECT department, AVG(salary) as avg_salary
FROM employees
GROUP BY department;

c. HAVING子句

SELECT department, AVG(salary) as avg_salary
FROM employees
GROUP BY department
HAVING avg_salary > 50000;

d. JOIN连接查询

SELECT e.name, d.department_name
FROM employees e
JOIN departments d ON e.department_id = d.id;

5. MySQL索引

a. 创建索引

CREATE INDEX idx_name ON employees(name);

b. 删除索引

DROP INDEX idx_name ON employees;

好的,我们继续讨论剩下的主题:

6. MySQL事务处理

事务是保证数据库操作的一致性和完整性的重要机制。

a. 事务的ACID属性

  • 原子性(Atomicity): 事务中的所有操作要么全部完成,要么全部不完成。
  • 一致性(Consistency): 事务开始前和结束后,数据库的完整性约束没有被破坏。
  • 隔离性(Isolation): 多个事务并发执行时,一个事务的执行不应影响其他事务的执行。
  • 持久性(Durability): 事务完成后,其结果是永久性的。

b. 开始、提交和回滚事务

START TRANSACTION;
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
COMMIT;

如果出现错误,可以回滚事务:

ROLLBACK;

c. 事务隔离级别

MySQL支持四种事务隔离级别:

  • READ UNCOMMITTED
  • READ COMMITTED
  • REPEATABLE READ (默认)
  • SERIALIZABLE

设置隔离级别:

SET TRANSACTION ISOLATION LEVEL READ COMMITTED;

7. MySQL视图和存储过程

a. 创建和使用视图

视图是一个虚拟表,基于SQL语句的结果集:

CREATE VIEW high_salary_employees AS
SELECT * FROM employees WHERE salary > 50000;

SELECT * FROM high_salary_employees;

b. 创建和调用存储过程

存储过程是一组预编译的SQL语句:

DELIMITER //
CREATE PROCEDURE get_employee_by_id(IN emp_id INT)
BEGIN
    SELECT * FROM employees WHERE id = emp_id;
END //
DELIMITER ;

CALL get_employee_by_id(1);

8. MySQL用户管理和权限控制

a. 创建和删除用户

CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';
DROP USER 'newuser'@'localhost';

b. 授予和撤销权限

GRANT SELECT, INSERT ON mydatabase.* TO 'newuser'@'localhost';
REVOKE INSERT ON mydatabase.* FROM 'newuser'@'localhost';
  1. MySQL性能优化基础

a. 使用EXPLAIN分析查询

EXPLAIN命令可以显示MySQL如何执行查询:

EXPLAIN SELECT * FROM employees WHERE salary > 50000;

b. 查询优化技巧

  • 只选择需要的列,避免使用SELECT *
  • 使用适当的索引
  • 避免在WHERE子句中使用函数,这可能会阻止使用索引
  • 使用LIMIT限制结果集大小

示例优化查询:

-- 优化前
SELECT * FROM employees WHERE YEAR(hire_date) = 2023;

-- 优化后
SELECT id, name, email FROM employees WHERE hire_date >= '2023-01-01' AND hire_date < '2024-01-01';

这个优化后的查询可以使用hire_date列上的索引,并且只返回需要的列。


标题:MySQL常用知识点
作者:Curry
地址:http://bolo.it-cxy.top/articles/2024/10/13/1728831662177.html

    评论
    0 评论
avatar

取消