本文将系统性地介绍MySQL数据库的核心操作,从基础的数据库和表管理,到复杂的查询操作,再到高级的数据库设计概念。无论你是数据库初学者还是希望巩固基础知识的开发者,这份指南都能为你提供实用的参考。
数据库是存储数据的容器,以下是常用的数据库管理命令:
-- 查看所有数据库
SHOW DATABASES;
-- 创建数据库
CREATE DATABASE 数据库名;
-- 使用指定数据库
USE 数据库名;
-- 查看当前使用的数据库
SELECT DATABASE();
-- 删除数据库
DROP DATABASE 数据库名;
表是数据库中存储数据的基本单位:
-- 查看当前数据库中的所有表
SHOW TABLES;
-- 创建表
CREATE TABLE 表名 (
字段名1 字段类型,
字段名2 字段类型,
...
);
-- 查看表结构
DESC 表名;
-- 查看建表语句
SHOW CREATE TABLE 表名;
-- 删除表
DROP TABLE 表名;
当需要调整已有表的结构时,可以使用ALTER TABLE命令:
-- 添加字段
ALTER TABLE 表名 ADD 字段名 数据类型;
-- 修改字段数据类型
ALTER TABLE 表名 MODIFY 字段名 新数据类型(长度);
-- 修改字段名和类型
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型(长度) [COMMENT '注释'] [约束];
-- 删除字段
ALTER TABLE 表名 DROP 字段名;
-- 重命名表
ALTER TABLE 旧表名 RENAME TO 新表名;
-- 插入单条记录
INSERT INTO 表名 (字段1, 字段2) VALUES (值1, 值2);
-- 插入多条记录
INSERT INTO 表名 (字段1, 字段2) VALUES
(值1, 值2),
(值3, 值4);
-- 更新数据
UPDATE 表名 SET 字段1=值1, 字段2=值2 [WHERE 条件];
注意:如果不加WHERE条件,将更新表中所有记录!
-- 删除数据
DELETE FROM 表名 [WHERE 条件];
注意:如果不加WHERE条件,将删除表中所有记录!
-- 查询指定字段
SELECT 字段1, 字段2, 字段3 FROM 表名;
-- 查询所有字段
SELECT * FROM 表名;
-- 使用别名
SELECT 字段1 AS 别名1, 字段2 AS 别名2 FROM 表名;
-- 去除重复记录
SELECT DISTINCT 字段列表 FROM 表名;
SELECT 字段列表 FROM 表名 WHERE 条件列表;
常用条件运算符:
=
等于<>
或 !=
不等于>
大于>=
大于等于<
小于<=
小于等于IS NULL
空值判断IS NOT NULL
非空值判断聚合函数对一列数据进行纵向计算:
SELECT 聚合函数(字段名) FROM 表名;
常用聚合函数:
COUNT()
计数SUM()
求和AVG()
平均值MAX()
最大值MIN()
最小值重要提示:NULL值不参与聚合函数运算,会自动被过滤。
SELECT 字段列表 FROM 表名
[WHERE 条件]
GROUP BY 分组字段名
[HAVING 分组后过滤条件];
关键区别:
重要规则:在包含GROUP BY的SELECT语句中,SELECT后面只能跟参加分组的字段以及聚合函数!
SELECT 字段列表 FROM 表名
ORDER BY 字段1 排序方式1, 字段2 排序方式2;
排序方式:
ASC
升序(默认,可省略)DESC
降序SELECT 字段列表 FROM 表名 LIMIT 起始索引, 查询记录数;
-- 查询前n条记录
SELECT * FROM 表名 LIMIT n;
SELECT * FROM 表1, 表2 WHERE 表1.字段 = 表2.字段;
SELECT first.字段1, second.字段2
FROM 表名 first, 表名 second
WHERE first.关联字段 = second.关联字段;
-- 左外连接
SELECT 字段列表
FROM 表1 LEFT OUTER JOIN 表2 ON (连接条件);
-- 右外连接
SELECT 字段列表
FROM 表1 RIGHT OUTER JOIN 表2 ON (连接条件);
-- 使用USING简化(当连接字段名相同时)
SELECT 字段列表
FROM 表1 LEFT OUTER JOIN 表2 USING(字段名);
理解SQL语句的执行顺序对于编写复杂查询非常重要:
FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY → LIMIT
在子查询中,可以使用以下逻辑运算符:
SELECT * FROM 表名 WHERE 字段 > ALL(SELECT 字段 FROM 其他表);
-- 判断空值
WHERE 字段 IS NULL
-- 判断非空值
WHERE 字段 IS NOT NULL
视图是虚拟表,基于查询结果创建:
-- 创建视图
CREATE VIEW 视图名(列名1, 列名2, ...)
AS (子查询);
-- 使用视图
SELECT * FROM 视图名;
-- 创建用户
CREATE USER '用户名'@'主机' IDENTIFIED BY '密码';
-- 授权
GRANT 权限类型 ON 数据库.表名 TO '用户名'@'主机';
-- 回收权限
REVOKE 权限类型 ON 数据库.表名 FROM '用户名'@'主机';
角色是一组权限的集合:
-- 创建角色
CREATE ROLE 角色名;
-- 给角色授权
GRANT 权限 ON 对象名 TO 角色名;
-- 将角色授予用户
GRANT 角色名 TO 用户名 [WITH ADMIN OPTION];
WITH ADMIN OPTION:允许用户将获得的权限再授予其他用户。
-- 建表时定义主键
CREATE TABLE 表名 (
id INT PRIMARY KEY,
...
);
主键特点:
-- 建表时定义外键
CREATE TABLE 表名 (
字段名 数据类型,
FOREIGN KEY (外键字段) REFERENCES 主表(主键字段)
);
-- 后续添加外键
ALTER TABLE 表名 ADD FOREIGN KEY (外键字段) REFERENCES 主表(主键字段);
外键作用:
-- 添加检查约束
ALTER TABLE 表名 ADD CONSTRAINT 约束名 CHECK (条件);
-- 示例
ALTER TABLE student ADD CONSTRAINT chk_age CHECK (age <= 60);
触发器是由特定事件自动执行的存储过程:
CREATE TRIGGER 触发器名
{BEFORE | AFTER} {INSERT | UPDATE | DELETE}
ON 表名 FOR EACH ROW
BEGIN
SQL语句;
END;
-- 查看触发器
SHOW TRIGGERS;
-- 删除触发器
DROP TRIGGER 触发器名;
属性不可分割,每个属性都是原子项。
掌握MySQL数据库操作需要循序渐进地学习各个知识点。从基础的DDL、DML、DQL操作开始,逐步深入到高级查询、数据库设计和优化。实践是学习数据库最好的方法,建议结合实际项目多加练习。
希望这份指南能够帮助你系统地掌握MySQL数据库操作,在实际开发中游刃有余!