一、数据操作语言 (DML)

1. INSERT 插入数据

-- 插入单行(指定列)
INSERT INTO 表名 (列1, 列2) VALUES (值1, 值2);

-- 插入多行
INSERT INTO 表名 (列1, 列2) VALUES 
(值1, 值2),
(值3, 值4);

-- 从其他表插入
INSERT INTO 目标表 SELECT * FROM 源表 WHERE 条件;

示例

INSERT INTO employees (emp_id, name, salary) 
VALUES (101, '张三', 8000);

2. UPDATE 更新数据

UPDATE 表名 
SET1=新值1, 列2=新值2 
WHERE 条件;

示例

UPDATE employees 
SET salary = 9000 
WHERE emp_id = 101;

3. DELETE 删除数据

DELETE FROM 表名 WHERE 条件;

-- 清空表(不可回滚)
TRUNCATE TABLE 表名;

示例

DELETE FROM employees WHERE emp_id = 101;

二、数据查询语言 (DQL)

1. 基础 SELECT 查询

SELECT1, 列2 FROM 表名 WHERE 条件;

示例

SELECT name, salary FROM employees WHERE dept = 'IT';

2. 条件筛选

运算符 说明 示例
= 等于 WHERE salary = 5000
> 大于 WHERE salary > 5000
LIKE 模糊匹配 WHERE name LIKE '张%'
IN 多值匹配 WHERE id IN (1,2,3)
BETWEEN 范围查询 WHERE salary BETWEEN 5000 AND 10000
IS NULL 空值判断 WHERE manager_id IS NULL

3. 高级查询

排序 (ORDER BY)

SELECT * FROM employees 
ORDER BY salary DESC, hire_date ASC;

分组 (GROUP BY)

SELECT dept, COUNT(*) as emp_count, AVG(salary)
FROM employees
GROUP BY dept;

HAVING 筛选分组

SELECT dept, AVG(salary) as avg_salary
FROM employees
GROUP BY dept
HAVING avg_salary > 8000;

连接查询 (JOIN)

-- 内连接
SELECT e.name, d.dept_name 
FROM employees e
INNER JOIN departments d ON e.dept_id = d.dept_id;

-- 左外连接
SELECT e.name, d.dept_name
FROM employees e
LEFT JOIN departments d ON e.dept_id = d.dept_id;

三、索引操作

1. 创建索引

-- 单列索引
CREATE INDEX idx_name ON 表名(列名);

-- 多列复合索引
CREATE INDEX idx_name_dept ON employees(name, dept);

-- 唯一索引
CREATE UNIQUE INDEX idx_emp_id ON employees(emp_id);

2. 查看索引

SHOW INDEX FROM 表名;

输出示例

Table     Non_unique  Key_name     Column_name
employees 0           PRIMARY      emp_id
employees 1           idx_name     name

3. 删除索引

DROP INDEX 索引名 ON 表名;

示例

DROP INDEX idx_name ON employees;

四、约束操作

1. 主键约束

-- 建表时指定
CREATE TABLE employees (
    emp_id INT PRIMARY KEY,
    name VARCHAR(50)
);

-- 后期添加
ALTER TABLE employees ADD PRIMARY KEY (emp_id);

2. 外键约束

ALTER TABLE employees
ADD CONSTRAINT fk_dept
FOREIGN KEY (dept_id) REFERENCES departments(dept_id);

3. 唯一约束

ALTER TABLE employees ADD UNIQUE (email);

五、实用技巧

1. 分页查询

SELECT * FROM employees 
ORDER BY hire_date DESC
LIMIT 10 OFFSET 20;  -- 跳过20行,取10条

2. 批量更新

UPDATE employees
SET salary = CASE
    WHEN dept = 'IT' THEN salary * 1.1
    WHEN dept = 'HR' THEN salary * 1.05
    ELSE salary
END;

3. 存在性检查

-- 使用EXISTS
SELECT * FROM departments d
WHERE EXISTS (
    SELECT 1 FROM employees e 
    WHERE e.dept_id = d.dept_id
);

六、性能注意事项

  1. 索引使用原则

    • 为WHERE、JOIN、ORDER BY的列建索引
    • 避免对频繁更新的列建过多索引
  2. EXPLAIN分析

    EXPLAIN SELECT * FROM employees WHERE name LIKE '张%';
  3. 避免全表扫描

    • 不使用SELECT *
    • 避免在索引列上使用函数(如WHERE YEAR(create_time) = 2023

通过掌握这些基础语法,您可以高效地进行MySQL数据操作和查询优化。

作者:admin  创建时间:2025-06-06 11:12
最后编辑:admin  更新时间:2025-06-07 09:49