MySQL数据表操作与CRUD详解:从建表、插入到查询的全流程

news2026/5/3 1:50:45
哈喽大家好我是你们的大二学长。最近在复习《数据库原理》这门课刚好把老师上课讲的内容整理成了笔记想着发到博客上和大家分享一下希望能帮到同样在学 SQL 的同学们。今天的博客主要分为两部分前一课的复习​和新增Insert操作和查询Retrieve的详解。一、 前一课复习MySQL 数据表操作首先我们来快速回顾一下上一节课关于数据表的基础操作。这部分主要是掌握如何对“表”这个层面进行管理而不是表里的具体数据。1. 查看所有表如果你已经选中了当前的数据库记得先用use 数据库名;指定哦可以使用这条命令来查看里面所有的表show tables2. 创建表创建表的时候需要指定表名以及每一列的名字和数据类型。语法很简单create table 表名 (列名 类型, 列名 类型, 列名 类型....)这里要注意的是数据类型。常用的类型有int,bigint,double,decimal,varchar,text,datetime等等。不同的业务场景要选对合适的类型比如存年龄用int存名字用varchar。3. 查看表结构建完表或者想看表里有哪些字段可以用这个命令desc 表名;4. 修改表如果表建错了需要改表结构比如加一列、删一列可以用alter table 表名 选项5. 删除表如果不需要这个表了直接删掉注意删表是不可逆的要小心使用drop table 表名;二、 核心内容增删改查CRUD接下来就是今天的重点啦作为 Java 后端开发以后工作中最核心的任务之一就是进行CRUD​ 操作。CRUD 是对数据库记录的基本操作分别是Create (创建) —— 也就是我们这节课要讲的INSERTRetrieve (读取) —— 也就是SELECTUpdate (更新) —— 也就是UPDATEDelete (删除) —— 也就是DELETE今天我们重点攻克第一步Create插入数据。三、 Insert 语句进行新增1. 基本语法与示例插入数据的基本语法是这样的INSERT [INTO] table_name [(column_list)] VALUES (value_list), (value_list) ...举一个非常经典的例子我们先创建一个student表create table student( id int, name varchar(20), gender int); -- 可以使用 1 表示男性 0 表示女性然后插入一条数据insert into student values (1, 张三, 1);这里有几个点需要注意这一行数据里的三个值(1, 张三, 1)分别对应表里的id,name,gender。值的数量和顺序必须跟表的列数匹配。关于引号SQL 里表示字符串常量可以用单引号张三也可以用双引号张三。这和 C/Java 不一样它们区分字符和字符串但在 SQL 里单双引号都表示字符串。2. 指定列插入有时候我们可能不想一次性把所有列的数据都插进去或者想调整插入的顺序就可以指定列来插入-- 指定列插入 insert into student (id, name) values(1, 张三); insert into student (name, id) values(张三, 1);注意虽然我们可以调整列的顺序但括号里写的列名必须是表里真实存在的而且后面给的值要和前面的列一一对应。3. 命名规范的小提示在创建表指定列名时如果列名有多个单词该怎么写呢studentName(驼峰命名Java 里很普遍)student_name(蛇形命名C/Python 里很普遍)在数据库里蛇形命名是更常见的习惯。而且后续我们学 JavaEE 进阶讲到 MyBatis 这样的框架时它默认就会把数据库表的蛇形命名和 Java 代码的驼峰命名自动关联起来所以养成用student_name的习惯会更好。4. 一次插入多行数据如果我们要插入很多条数据一条条写是不是太累了其实可以一次插入多行-- 一次插入多行数据 insert into student values(5, 赵六, 0), (6, 田七, 1), (7, 周八, 0);或者分开写三条insert into student values(5, 赵六, 0); insert into student values(6, 田七, 1); insert into student values(7, 周八, 0);为什么推荐第一种一次插入多行的方式呢因为数据库是客户端-服务器结构的程序。你每发一条 SQL 命令客户端都要和服务器通信一次。一次插入多行只需要通信一次速度更快而且数据库服务器有一个非常重要的功能叫“事务”每个 SQL 也会开启一个事务本身也是有开销的合并操作能减少这种开销。最后我们怎么确认数据插进去了呢当然是用查询语句-- 通过 select 语句查询表的内容。 select * from student;四、Retrieve 检索查询操作作为 CRUD 里的 “R”查询Retrieve​ 是我们从数据库里“拿数据”的核心操作。老师课上重点讲了select语句的几种用法1. 全列查询最基础的查询方式就是把一张表的所有行、所有列都查出来select * from 表名;这里的*叫做通配符代指“所有列”。比如查询student表的所有内容select * from student;⚠️危险操作警告“这也是数据库的危险操作”。为啥呢因为数据库是客户端-服务器结构的程序就像你用电脑连公司服务器办公一样。如果是自己学习用的小表select *无所谓但在公司的生产环境线上环境用户正在用的那种里表可能非常大比如百万级数据select *会一次性把所有数据从服务器传到客户端直接把服务器的硬盘、网卡带宽“吃满”导致系统卡顿甚至崩溃2. 指定列查询实际工作中一张表可能有十几列、几十列但我们往往只需要关注某几列。这时候就可以指定列名来查询能大幅降低硬盘和网卡的 IO 开销就像走“高速公路”只取需要的车道select 列名, 列名..... from 表名比如我们只查student表的name和idselect name, id from student;3. 带有表达式的查询select不仅能查原始列还能根据列进行计算比如成绩求和、数值运算等。语法是select 表达式 from 表名;举个例子用一个exam表存了语文、数学、英语成绩先建表插数据CREATE TABLE exam ( id BIGINT, name VARCHAR(20) COMMENT 同学姓名, chinese float COMMENT 语文成绩, math float COMMENT 数学成绩, english float COMMENT 英语成绩 ); -- 插入测试数据 INSERT INTO exam (id, name, chinese, math, english) VALUES (1, 唐三藏, 67, 98, 56), (2, 孙悟空, 87, 78, 77), (3, 猪悟能, 88, 98, 90), (4, 曹孟德, 82, 84, 67), (5, 刘玄德, 55, 85, 45), (6, 孙权, 70, 73, 78), (7, 宋公明, 75, 65, 30);现在我们想给每个同学的语文成绩 10就可以用表达式查询select name, chinese 10 from exam;再比如查询每个同学的总成绩语文数学英语select name, chinese math english from exam;⚠️ 注意这种“复杂表达式”作为列名时可读性会比较差比如chinese math english看起来不够直观。4. 表达式查询时指定别名为了解决“表达式列名可读性差”的问题我们可以给表达式起一个别名外号语法select 表达式 as 别名 from 表名;as可以省略但不建议省略写上能提高代码可读性。比如给总成绩列起别名totalselect name, chinese math english as total from exam;或者省略as但不推荐容易看错select name, chinese math english total from exam; 额外小技巧表也可以起别名尤其是多表查询时表别名很重要。比如select name, chinese math english from exam as e;老师强调写代码的核心原则是可读性“可读性 代码执行效率”只要不是特别夸张的低效优先让代码好懂。最后碎碎念今天复习了数据表操作学习了insert插入又学了select查询的几种操作。感觉 SQL 真的是“细节决定成败”比如select *的危险、别名的必要性这些都是实际工作中踩过坑才明白的点。后续还要学update更新、delete删除以及多表查询、聚合函数这些进阶内容。慢慢来吧先把基础打扎实加油

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

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

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…