一、数据操作语言 (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 表名
SET 列1=新值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 查询
SELECT 列1, 列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
);
六、性能注意事项
索引使用原则:
- 为WHERE、JOIN、ORDER BY的列建索引
- 避免对频繁更新的列建过多索引
EXPLAIN分析:
EXPLAIN SELECT * FROM employees WHERE name LIKE '张%';
避免全表扫描:
- 不使用
SELECT *
- 避免在索引列上使用函数(如
WHERE YEAR(create_time) = 2023
)
- 不使用
通过掌握这些基础语法,您可以高效地进行MySQL数据操作和查询优化。
作者:admin 创建时间:2025-06-06 11:12
最后编辑:admin 更新时间:2025-06-07 09:49
最后编辑:admin 更新时间:2025-06-07 09:49