当前位置:首页 > 技术 > 正文内容

MySQL核心语法与关系型数据库操作指南

访客 技术 2026年10月11日 2

数据库基础与环境配置

数据库(DB)是用于有组织地存储数据的仓库。数据库管理系统(DBMS)则是操纵和管理这些数据库的大型软件,而SQL(结构化查询语言)是操作关系型数据库的标准编程语言。

MySQL服务管理

在Windows系统中,可以通过服务管理器(service.msc)找到MySQL服务进行启停,或者使用命令行工具:

-- 启动服务
net start mysql
-- 停止服务
net stop mysql

连接数据库可通过官方客户端工具,或在配置好系统环境变量后,通过终端执行:

mysql -u root -p

SQL语言规范与分类

SQL语句支持单行或多行编写,必须以分号(;)结尾。关键字建议大写以提高可读性,且MySQL默认不区分大小写。注释方式包括单行注释(-- 或 #)和多行注释(/* ... */)。

SQL语言主要分为四大类:

  • DDL(数据定义语言):用于定义数据库对象(库、表、字段等)。
  • DML(数据操作语言):用于对表中的数据进行增删改。
  • DQL(数据查询语言):用于查询表中的记录。
  • DCL(数据控制语言):用于管理用户及控制访问权限。

DDL:数据定义语言

数据库操作

-- 查看所有数据库
SHOW DATABASES;
-- 查看当前所在数据库
SELECT DATABASE();
-- 创建数据库(指定字符集)
CREATE DATABASE IF NOT EXISTS my_db DEFAULT CHARSET utf8mb4;
-- 删除数据库
DROP DATABASE IF EXISTS my_db;
-- 切换数据库
USE my_db;

表操作与数据类型

MySQL的数据类型主要分为数值、字符串和日期时间三大类。合理选择数据类型对存储效率和查询性能至关重要。

  • 数值类型:包括TINYINT, INT, BIGINT, FLOAT, DOUBLE, DECIMAL等。
  • 字符串类型:CHAR(定长), VARCHAR(变长), TEXT, BLOB等。注意,CHAR(n)中的n代表字符数而非字节数。
  • 日期时间类型:DATE, TIME, DATETIME, TIMESTAMP, YEAR。
-- 查看当前库所有表
SHOW TABLES;
-- 查看表结构
DESC staff;
-- 查看建表语句
SHOW CREATE TABLE staff;

-- 创建表
CREATE TABLE staff (
    id INT COMMENT '员工编号',
    full_name VARCHAR(50) COMMENT '姓名',
    hire_date DATE COMMENT '入职日期'
) COMMENT '员工信息表';

-- 修改表结构
ALTER TABLE staff ADD nickname VARCHAR(20) COMMENT '昵称';
ALTER TABLE staff MODIFY full_name VARCHAR(100);
ALTER TABLE staff CHANGE nickname alias_name VARCHAR(30) COMMENT '别名';
ALTER TABLE staff DROP alias_name;
ALTER TABLE staff RENAME TO employee;
-- 清空表数据但保留结构
TRUNCATE TABLE employee;
DROP TABLE IF EXISTS employee;

DML:数据操作语言

DML用于对表中的数据进行插入、更新和删除操作。

-- 插入数据
INSERT INTO employee (id, full_name, hire_date) VALUES (1, 'Alice', '2023-01-15');
INSERT INTO employee VALUES (2, 'Bob', '2023-02-20');
-- 批量插入
INSERT INTO employee (id, full_name, hire_date) VALUES 
(3, 'Charlie', '2023-03-10'), 
(4, 'David', '2023-04-05');

-- 更新数据(务必注意WHERE条件,否则将更新全表)
UPDATE employee SET full_name = 'Alice Smith' WHERE id = 1;

-- 删除数据(同样需要注意WHERE条件)
DELETE FROM employee WHERE id = 4;

DQL:数据查询语言

SQL查询的逻辑执行顺序为:FROM -> WHERE -> GROUP BY -> HAVING -> SELECT -> ORDER BY -> LIMIT。理解此顺序有助于优化复杂查询。

基础与条件查询

-- 基础查询与别名
SELECT id, full_name AS name FROM employee;
-- 去重
SELECT DISTINCT hire_date FROM employee;

-- 条件查询
SELECT * FROM employee WHERE hire_date BETWEEN '2023-01-01' AND '2023-03-31';
SELECT * FROM employee WHERE full_name LIKE 'A%'; -- 模糊查询
SELECT * FROM employee WHERE id IN (1, 2, 3);

聚合函数与分组

聚合函数(COUNT, MAX, MIN, AVG, SUM)用于纵向计算,且会自动忽略NULL值。

-- 分组查询
SELECT hire_date, COUNT(*) AS emp_count 
FROM employee 
WHERE id > 0 
GROUP BY hire_date 
HAVING emp_count > 1;
-- 注意:WHERE在分组前过滤,HAVING在分组后过滤。

排序与分页

-- 排序(ASC升序,DESC降序)
SELECT * FROM employee ORDER BY hire_date DESC, id ASC;

-- 分页(LIMIT 偏移量, 条数)
SELECT * FROM employee LIMIT 0, 5; -- 查询前5条

多表查询与子查询

多表关系设计原则:一对多在"多"方建外键;多对多建立中间表包含双方外键;一对一在任意一方建外键并设置唯一约束,常用于单表拆分。查询时需通过连接条件消除无效的笛卡尔积。

-- 内连接(查询交集)
SELECT e.full_name, d.dept_name 
FROM employee e 
INNER JOIN department d ON e.dept_id = d.id;

-- 左外连接(保留左表所有数据)
SELECT e.full_name, d.dept_name 
FROM employee e 
LEFT JOIN department d ON e.dept_id = d.id;

-- 自连接(查询员工及其领导)
SELECT e1.full_name AS employee, e2.full_name AS manager 
FROM employee e1 
LEFT JOIN employee e2 ON e1.manager_id = e2.id;

-- 联合查询
SELECT id, full_name FROM employee WHERE id < 3
UNION
SELECT id, full_name FROM employee WHERE id > 2;

-- 子查询
SELECT * FROM employee WHERE dept_id = (SELECT id FROM department WHERE dept_name = 'IT');

DCL:数据控制语言

用于管理数据库用户和权限。

-- 创建用户
CREATE USER 'dev_user'@'localhost' IDENTIFIED BY 'SecurePass123!';
-- 授权
GRANT SELECT, INSERT ON my_db.* TO 'dev_user'@'localhost';
-- 撤销权限
REVOKE INSERT ON my_db.* FROM 'dev_user'@'localhost';
-- 删除用户
DROP USER 'dev_user'@'localhost';

内置函数与约束机制

常用内置函数

  • 字符串:CONCAT, LOWER, UPPER, LPAD, TRIM, SUBSTRING。
  • 数值:CEIL, FLOOR, MOD, RAND, ROUND。
  • 日期:CURDATE, NOW, DATE_ADD, DATEDIFF。
  • 流程控制:IF, IFNULL, CASE WHEN。

表约束

约束用于限制表中的数据,保证数据的完整性和一致性。常见约束包括:NOT NULL, UNIQUE, PRIMARY KEY, DEFAULT, CHECK, FOREIGN KEY。

CREATE TABLE project (
    proj_id INT PRIMARY KEY AUTO_INCREMENT,
    proj_name VARCHAR(50) NOT NULL UNIQUE,
    budget DECIMAL(10, 2) CHECK (budget > 0),
    status CHAR(1) DEFAULT 'A',
    manager_id INT,
    CONSTRAINT fk_manager FOREIGN KEY (manager_id) REFERENCES employee(id) ON UPDATE CASCADE ON DELETE SET NULL
);

事务管理与并发控制

事务是一组不可分割的操作单元,具有原子性(A)、一致性(C)、隔离性(I)和持久性(D)四大特性(ACID)。

事务操作

-- 手动开启事务
START TRANSACTION;

UPDATE account SET balance = balance - 500 WHERE user_name = 'Alice';
-- 模拟异常...
UPDATE account SET balance = balance + 500 WHERE user_name = 'Bob';

-- 提交事务
COMMIT;
-- 或回滚事务
-- ROLLBACK;

并发问题与隔离级别

并发事务可能引发脏读、不可重复读和幻读等问题。MySQL提供了四种隔离级别来解决这些问题:

  • Read Uncommitted:最低级别,所有并发问题均可能发生。
  • Read Committed:解决脏读。
  • Repeatable Read:MySQL默认级别,解决脏读和不可重复读。
  • Serializable:最高级别,解决所有并发问题,但性能最低。
-- 查看当前隔离级别
SELECT @@TRANSACTION_ISOLATION;
-- 设置隔离级别
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;

相关文章

Linux crontab 详解

1) crontab 是什么cron 是 Linux 的定时任务守护进程;crontab 是用来编辑/查看“按时间周期执行命令”的表(cron table)。常见两类:用户 crontab:每个用户一份(crontab -e 编辑)系统级 crontab / cron.d:可指定执行用户(/etc/crontab、/etc/cron.d/*)2) crontab 时间...

富文本里可以允许的 HTML 属性

一、所有标签默认允许的安全属性(极少)class        (可选)id           (通常建议禁用)title️ 注意:id 容易被滥用做锚点注入,很多系统直接禁用class 允许的话最好只允许固定前缀(如 editor-*)二、a 标签允许属性<a href="" t...

Mac 安装 Node.js 指南

方法一:通过官网安装包(最简单,适合初学者)如果你只是想快速安装并开始使用,这是最直接的方法。访问 Node.js 官网。页面会显示两个版本:LTS (Recommended For Most Users):长期支持版,最稳定。建议选这个。Current:最新特性版,包含最新功能但可能不够稳定。下载 .pkg 安装包并运行。按照安装向导点击“下一步”即可完成。方法二:使用 Homebrew 安装(...

Dom\HTML_NO_DEFAULT_NS 的副作用:自动加闭合标签

在使用Dom\HTMLDocument时,Dom\HTML_NO_DEFAULT_NS 将禁止在解析过程中设置元素的命名空间, 此设置是为了与DOMDocument向后兼容而存在的。当使用它时,已知的一个副作用就是:自动加闭合标签例如 </img> 为什么会这样?当你使用:Dom\HTML_NO_DEFAULT_NS文档会变成 无命名空间模式,此时内部更接近 XML...

Laravel 事件和监听器创建

在 Laravel 中,使用 Artisan 命令创建 Events(事件) 和 Listeners(监听器) 是非常高效的。你可以通过以下几种方式来实现:1. 手动创建单个 Event如果你只想创建一个事件类,可以使用 make:event 命令:Bashphp artisan make:event UserRegistered执行后,文件将生成在 app/Even...

自定义域名解析神器 dnsmasq

什么是 dnsmasq?dnsmasq 是一个轻量级、功能强大的网络服务工具,专为小型和中等规模网络设计。它是一个综合的网络基础设施解决方案[1]。dnsmasq 能做什么?功能说明应用场景DNS 转发与缓存将 DNS 查询转发到上游服务器(ISP、Google DNS 等),并在本地缓存结果加快 DNS 查询速度,减少外部 DNS 流量本地 DNS解析本地网络设备的主机名,无需编辑&n...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。