#MySQL 语句大全(完整实用教程)

📌 MySQL 语句大全(完整实用教程)


📌 1. 数据库操作

✅ 创建数据库

CREATE DATABASE mydb;  -- 创建名为 mydb 的数据库

✅ 使用数据库

USE mydb;  -- 选择数据库

✅ 删除数据库

DROP DATABASE mydb;  -- 删除数据库(谨慎使用)

⚠️ 注意点:

  • 删除数据库会 丢失所有数据,操作前需备份!

📌 2. 表操作

✅ 创建表

CREATE TABLE users (id INT PRIMARY KEY AUTO_INCREMENT,  -- 自增主键name VARCHAR(50) NOT NULL,  -- 不能为空age INT DEFAULT 18,  -- 默认值 18email VARCHAR(100) UNIQUE  -- 唯一约束
);

✅ 查看表结构

DESC users;  -- 查看表的字段信息
SHOW CREATE TABLE users;  -- 查看完整建表语句

✅ 修改表

ALTER TABLE users ADD phone VARCHAR(20);  -- 添加新列
ALTER TABLE users MODIFY name VARCHAR(100);  -- 修改字段类型
ALTER TABLE users DROP COLUMN phone;  -- 删除列

✅ 删除表

DROP TABLE users;  -- 删除表(谨慎使用)

⚠️ 注意点:

  • DROP TABLE 不可恢复,需谨慎。
  • ALTER TABLE 可能 影响性能,大表操作前需测试。

📌 3. 数据操作(CRUD)

✅ 插入数据

INSERT INTO users (name, age, email) VALUES ('Alice', 25, 'alice@example.com');

✅ 批量插入数据

INSERT INTO users (name, age, email) VALUES('Bob', 30, 'bob@example.com'),('Charlie', 22, 'charlie@example.com');

✅ 查询数据

SELECT * FROM users;  -- 查询所有字段
SELECT name, age FROM users;  -- 查询指定字段
SELECT * FROM users WHERE age > 25;  -- 条件查询
SELECT * FROM users ORDER BY age DESC;  -- 按年龄降序排列
SELECT * FROM users LIMIT 5;  -- 取前 5 条记录

✅ 更新数据

UPDATE users SET age = 26 WHERE name = 'Alice';  -- 更新 Alice 的年龄

✅ 删除数据

DELETE FROM users WHERE name = 'Bob';  -- 删除 Bob

⚠️ 注意点:

  • DELETE 语句如果没有 WHERE,会删除整个表的数据
  • 可使用 LIMIT 限制删除的条数。

📌 4. 约束(Constraints)

✅ 主键约束

CREATE TABLE orders (id INT PRIMARY KEY AUTO_INCREMENT,order_number VARCHAR(20) NOT NULL UNIQUE
);

✅ 外键约束

CREATE TABLE orders (id INT PRIMARY KEY AUTO_INCREMENT,user_id INT,FOREIGN KEY (user_id) REFERENCES users(id)
);

⚠️ 注意点:

  • FOREIGN KEY 约束确保数据一致性,删除或更新数据时需注意级联操作

📌 5. 高级查询

✅ 聚合函数

SELECT COUNT(*) FROM users;  -- 统计总人数
SELECT AVG(age) FROM users;  -- 计算平均年龄
SELECT MAX(age), MIN(age) FROM users;  -- 查找最大、最小年龄

✅ 分组查询(GROUP BY)

SELECT age, COUNT(*) FROM users GROUP BY age;  -- 按年龄分组统计人数

✅ 连接查询(JOIN)

SELECT users.name, orders.order_number
FROM users
JOIN orders ON users.id = orders.user_id;

⚠️ 注意点:

  • JOIN 操作会影响性能,大数据量时需优化索引。

📌 6. 事务控制(Transactions)

✅ 开启事务

START TRANSACTION;

✅ 执行事务

UPDATE users SET age = 40 WHERE name = 'Alice';
COMMIT;  -- 提交事务

✅ 回滚事务

ROLLBACK;  -- 回滚到事务开始前

⚠️ 注意点:

  • 事务适用于 银行转账订单处理等操作,确保数据一致性。

📌 7. 索引(Indexes)

✅ 创建索引

CREATE INDEX idx_name ON users(name);  -- 创建索引

✅ 查看索引

SHOW INDEX FROM users;  -- 查看索引

✅ 删除索引

DROP INDEX idx_name ON users;

⚠️ 注意点:

  • 索引加速查询,但会降低写入速度,需平衡。

📌 8. 备份 & 恢复

✅ 备份数据库

mysqldump -u root -p mydb > mydb_backup.sql  # 备份数据库

✅ 恢复数据库

mysql -u root -p mydb < mydb_backup.sql  # 还原数据库

⚠️ 注意点:

  • 定期备份数据,避免数据丢失。

📌 9. 常见问题 & 解决方案

⚠️ 端口占用(3306 被占用)

netstat -tulnp | grep 3306  # 查看占用进程
kill -9 <PID>  # 终止进程

⚠️ root 用户无权限

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'yourpassword';
FLUSH PRIVILEGES;


📌 触发器(Triggers)

🔹 什么是触发器?

触发器(Trigger)是一种特殊的存储过程,在对数据库表执行 INSERTUPDATEDELETE 操作时自动触发执行。用于 数据验证、日志记录、自动更新等

✅ 创建触发器(案例)

CREATE TRIGGER before_insert_users
BEFORE INSERT ON users
FOR EACH ROW
SET NEW.name = UPPER(NEW.name);

📌 说明:

  • 该触发器在 users 表执行 INSERT 语句之前触发,
  • 将新插入的 name 字段转换为大写。

✅ 删除触发器

DROP TRIGGER IF EXISTS before_insert_users;

⚠️ 注意点:

  • 触发器不能被 ALTER 修改,如需修改,需先 DROPCREATE
  • 触发器执行过程中不能直接修改同一个表的数据,否则会引发递归调用。

📌 存储过程(Stored Procedures)

🔹 什么是存储过程?

存储过程(Stored Procedure)是一组预编译的 SQL 语句集合,封装一系列数据库操作,提高执行效率并减少代码重复。

✅ 创建存储过程(案例)

DELIMITER $$
CREATE PROCEDURE GetUserCount()
BEGINSELECT COUNT(*) FROM users;
END $$
DELIMITER ;

📌 说明:

  • DELIMITER $$ 用于改变默认的 ; 结束符,防止 CREATE PROCEDURE 语句因 ; 过早终止。
  • GetUserCount 存储过程用于统计 users 表的总记录数。

✅ 调用存储过程

CALL GetUserCount();

✅ 删除存储过程

DROP PROCEDURE IF EXISTS GetUserCount;

⚠️ 注意点:

  • 存储过程适用于 重复执行的复杂 SQL 操作,如报表查询、数据批量更新等。
  • 存储过程可接收 输入参数 并返回 输出参数

📌 游标(Cursors)

🔹 什么是游标?

游标(Cursor)用于 遍历查询结果集,通常用于存储过程中的批量数据处理。

✅ 声明游标

DECLARE cur CURSOR FOR SELECT name FROM users;

✅ 使用游标(案例)

DELIMITER $$
CREATE PROCEDURE PrintAllUserNames()
BEGINDECLARE done INT DEFAULT 0;DECLARE username VARCHAR(255);DECLARE cur CURSOR FOR SELECT name FROM users;DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;OPEN cur;FETCH cur INTO username;WHILE done = 0 DO-- 这里可以对 username 进行进一步处理SELECT username;FETCH cur INTO username;END WHILE;CLOSE cur;
END $$
DELIMITER ;

📌 说明:

  • DECLARE cur CURSOR FOR 声明游标,指定查询语句。
  • OPEN cur; 打开游标。
  • FETCH cur INTO username; 获取一行数据。
  • CLOSE cur; 关闭游标。

✅ 调用游标

CALL PrintAllUserNames();

⚠️ 注意点:

  • 使用 DECLARE CONTINUE HANDLER 捕获游标遍历结束时的 NOT FOUND 事件。
  • WHILE done = 0 DO 循环执行 FETCH 语句,直到数据全部遍历完毕。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/75402.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

万字重谈C++——类和对象篇

什么是类&#xff1f; 在编程中&#xff0c;类是用来创建对象的模板。可以把类看作一个蓝图&#xff0c;它定义了对象的属性&#xff08;特征&#xff09;和方法&#xff08;行为&#xff09;。例如&#xff0c;如果我们有一个“学生”的类&#xff0c;它可能包含学生的名字、…

18认识Qt坐标系

平面直角坐标系(笛卡尔坐标系) 数学上的坐标系 右手坐标系 计算机中的坐标系 左手坐标系 坐标系的原点(0,0) 就是屏幕的左上角 /窗口的左上角 给 Qt 的某个控件,设置位置,就需要指定坐标.对于这个控件来说, 坐标系原点就是相对于父窗口/控件的. QPushButton 的父元素/父控件/父…

量子计算与人工智能的结合:未来科技的双重革命

引言 在过去几十年里&#xff0c;人工智能&#xff08;AI&#xff09;和计算能力的提升一直是推动科技进步的重要力量。然而&#xff0c;随着深度学习和大规模数据处理的发展&#xff0c;传统计算架构的算力瓶颈逐渐显现&#xff0c;人工智能的训练和推理效率受到了限制。在此背…

SEO长尾词优化策略精要

内容概要 长尾关键词优化是SEO策略中实现精准流量捕获的核心环节。本文从定位方法、搜索意图分析、词库构建三个维度切入&#xff0c;系统阐述如何通过数据化工具筛选高转化潜力词&#xff0c;并结合用户行为路径优化内容架构。具体而言&#xff0c;内容将覆盖关键词挖掘工具的…

基于大模型的主动脉瓣病变预测及治疗方案研究报告

目录 一、引言 1.1 研究背景 1.2 研究目的 1.3 研究意义 二、大模型预测主动脉瓣病变原理 2.1 大模型介绍 2.2 数据收集与处理 2.3 模型训练与优化 三、术前预测与评估 3.1 主动脉瓣病变类型及程度预测 3.2 患者整体状况评估 3.3 手术风险预测 四、术中应用与监测…

进程和内存管理

目录 一.进程的基本信息 1.1进程的定义 1.2进程的特征 1.3进程的组成 1.4线程产生的背景 1.5线程的定义 1.6进程与线程的区别 1.7进程的类别 1.8进程的优先级 1.8.1进程优先级的概念 1.8.2PRI和NI 1.9僵尸进程 1.9.1僵尸进程的定义 1.9.2僵尸进程产生的原因 1.9…

css动态设置div宽高,calc函数

在css中使用calc函数 calc() 是 CSS 中的一种函数&#xff0c;用于动态计算长度值。它允许你在 CSS 属性中进行数学运算&#xff0c;结合不同的单位&#xff08;如 px、%、em 等&#xff09;&#xff0c;从而创建更加灵活和响应式的布局 表达式规则 运算符&#xff1a;支持加…

飞浆PaddlePaddle 猫狗数据大战

猫狗数据大战 1 数据集的准备以及处理操作1.1 数据集1.2 文件解压操作&#xff08;python&#xff09; 1.3 数据的分类1.4 创建训练集和测试集 2 网络构建CNN版本--DeepID 人脸识别网络结构DeepID 与 CNN 网络结构的差异 3 深度学习模型训练和推理的核心设置4 制图5 训练6 预测…

Spring Boot后端开发全攻略:核心概念与实战指南

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家、全栈领域优质创作者、高级开发工程师、高级信息系统项目管理师、系统架构师&#xff0c;数学与应用数学专业&#xff0c;10年以上多种混合语言开发经验&#xff0c;从事DICOM医学影像开发领域多年&#xff0c;熟悉DICOM协议及…

PPT助手:一款集计时、远程控制与多屏切换于一身的PPT辅助工具

PPT助手&#xff1a;一款集计时、远程控制与多屏切换于一身的PPT辅助工具 &#x1f4dd;&#x1f3a4; 在现代化的演讲和演示中&#xff0c;如何高效地控制PPT进程、保证展示的流畅性与精准性&#xff0c;成为了每个演讲者必须面对的挑战。无论是商务汇报、学术演讲&#xff0…

WEB安全--文件上传漏洞--php伪协议的利用

一、伪协议介绍 1.1、内容 在 PHP 中&#xff0c;伪协议通常指的是一种通过特定的 URL 协议方案实现某些特殊功能或行为的方式。伪协议通常并不是标准的协议&#xff08;如 HTTP、HTTPS&#xff09;&#xff0c;而是由应用程序或开发者自定义的“伪”协议&#xff0c;用于执行…

高级:高并发架构面试题深度解析

一、引言 在现代互联网应用开发中&#xff0c;高并发架构设计是确保系统在高负载下仍能稳定、高效运行的关键。面试官通过相关问题&#xff0c;考察候选人对高并发系统设计的理解、架构模式的掌握以及在实际项目中解决问题的能力。本文将深入剖析高并发系统的设计原则、常见的…

Opencv之dilib库:表情识别

一、简介 在计算机视觉领域&#xff0c;表情识别是一个既有趣又具有挑战性的任务。它在人机交互、情感分析、安防监控等众多领域都有着广泛的应用前景。本文将详细介绍如何使用 Python 中的 OpenCV 库和 Dlib 库来实现一个简单的实时表情识别系统。 二、实现原理 表情识别系统…

【动态规划】线性dp——LIS和LCS

参考文章 子序列 一个序列 A &#xff1d; a 1 , a 2 , … , a n A&#xff1d;a_1,a_2,…,a_n A&#xff1d;a1​,a2​,…,an​ 中任意删除若干项&#xff0c;剩余的序列叫做 A 的一个子序列。也可以认为是从序列 A 按原顺序保留任意若干项得到的序列。&#xff08;例如&…

umi框架开发移动端h5

1、官网&#xff1a;https://umijs.org/ 2、创建出来的项目 yarn create umi yarn start3、推荐目录结构 . ├── config │ └── config.ts ├── public//静态资源 ├── dist ├── mock │ └── app.ts&#xff5c;tsx ├── src │ ├── .umi │ ├── .um…

《Golang高性能网络编程:构建低延迟服务器应用》

在本文中&#xff0c;我们将深入探讨Golang高性能网络编程&#xff0c;帮助您构建低延迟服务器应用。我们将介绍Golang的网络编程特性、优化技巧和实际案例&#xff0c;让您更好地理解和应用Golang在网络编程领域的优势。 高性能网络编程简介 什么是Golang高性能网络编程 高性能…

循环结构- P1217-回文质数-第三十四天

洛谷题单 第三十四天&#xff1a;4.3&#xff08;周四&#xff09; 题目&#xff1a;循环结构–P1217 注意&#xff01;&#xff01;&#xff01;本题的解法在初学阶段足矣&#xff0c;使用埃氏筛即可全部AC&#xff08;高级算法&#xff0c;优化时间复杂度&#xff09;&…

github镜像网站的使用

很多时候我们无法访问github 那么我们可以网上搜索镜像网站 比如 https://blog.csdn.net/eytha/article/details/144797222 这里可以找到一些镜像站 然后直接编辑 c:/user/xxx/.gitconfig 内容如 [user]name xxxxemail xxxxhotmail.com [gui]recentrepo D:/ProjectFolder/t…

论定制开发开源 AI 智能名片 S2B2C 商城小程序源码在零售变革中的角色与价值

摘要&#xff1a;本文深入探讨了新零售中 O2O 模式的特点与局限性&#xff0c;指出其虽有导流作用但难以成为企业转型适应消费大环境的主力做法。强调解决零售根本问题需依靠大零售概念&#xff0c;包括业态融合、情境创造、分解渗透等。同时引入定制开发开源 AI 智能名片 S2B2…

硬件工程师零基础入门教程(三)

27.二极管的基本结构 二极管的结构就是一个PN节&#xff0c;导通后肯定会存在压降&#xff08;硅管≈0.7V&#xff1b;锗管≈0.3V&#xff09;。 其结构就像一个漏斗结构&#xff0c;普通二极管只能单向导通。 注意&#xff1a;二极管两端不能直接接大于二极管导通压降的电压…