news 2026/7/4 2:18:05

MySQL 基础操作总结:数据库、数据表和 CRUD

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
MySQL 基础操作总结:数据库、数据表和 CRUD

MySQL 基础操作总结:数据库、数据表和 CRUD

这篇文章主要整理 MySQL 中常见的基础操作,包括数据库操作、数据表操作、数据类型、增删改查、条件查询、排序分页、聚合查询以及简单约束。

MySQL 的基础操作可以先按照三个层次理解:

数据库操作:创建、查看、修改、删除数据库;
数据表操作:创建表、查看表结构、修改表结构、删除表;
数据操作:对表中的数据进行新增、查询、修改和删除,也就是常说的 CRUD。

在正式操作数据表之前,需要先选择要使用的数据库:

use 数据库名;

与数据库有关的操作

1.查看所有数据库

showdatabases;

2.创建数据库

createdatabase数据库名;

3.修改数据库

alterdatabase数据库名charsetutf8mb4--设置字符集collateutf8mb4_general_ci--设置排序规则/校对规则

注:alter 主要是改数据库属性,比如字符集、排序规则

4.删除数据库

dropdatabase数据库名;

和数据表有关的操作

数据类型
常用数据类型适合存什么
bool布尔类型,0表示false 1表示true
int普通整数,比如年纪、数量、编号
bigint很大的整数,比如用户id、订单号
double浮点数,比如gpa
decimal(10,2)精确小数,适合金额,比如银行数据
varchar(n)可变长字符,最常用
datetime存日期+时间:2005-01-01 14:02:00
timestamp时间戳

注:decimal(10,2) decimal(总位数, 小数位数),10表示这个数最多有10位数字,2表示小数点后保留两位

操作表结构(sql操作时要选中数据库 use 数据库名; )

1.查看所有表

showtables;

2.创建表(表名不与关键词重复,若重复用反引号` 引用)

createtable表名(列名 数据类型,列名 数据类型,...);

3.查看表结构

desc表名;

4.修改表(低频操作)

altertable表名addclass_idintaftergender;--(列名 数据类型)--
altertablestudentmodifynamevarchar(200);--modify是关键字 修改 student 表中已经存在的 name 字段,把它的数据类型改成 VARCHAR(200)。
altertablestudentrenamecolumnidtostudent_id;
altertable表名dropclassId;

注:修改表结构是低频操作,很危险,实际操作时修改前查一下。

5.删除表

droptable表名;
C:新增表内容
insertintostudentvalues(1,'张三'1);
insertintostudent(id,name)values(1,'张三');
insertintostudentvalues(5,'王五',0),(6,'赵六',1),(7,'田七',0);--多个数据之间要用英文逗号隔开
insertintostudentsselect*fromstudent;

注:第三种方式效率更高

列名命名要蛇形命名:student_name

sql里字符串用’’ ""都可以。

sql是弱类型,会存在隐式类型转换:int->varchar,varchar->int

R: 查询

select 查询不会修改数据库中的原始数据,它只是根据表中的数据生成一个查询结果集。这个结果集可以理解为临时看到的一张结果表

select*from表名;--危险操作,容易吃满网卡
select列名,列名...from表名;
select表达式from表名;
select表达式as别名from表名;

selectdistinctmathfromexam;

去重条件:指定列必须完全相同。distinct 会根据 select 后面指定的所有列一起去重。如果只查询 math,就只按 math 去重;如果查询 name, math,就要求 name 和 math 都相同才会被去重。如下:

namemath
张三88
张三88

selectname,mathfromexamwhereenglish>60--条件中写的列和select查询的列是没有关系的
select列名from表名where条件;
  • = 表示比较相等(在条件查询里) 不能正确处理 NULL = NULL
  • <=> :NULL 安全等于,可以判断 NULL 和 NULL 相等
  • <>:不等于
  • between A and B A<=value<=B (闭区间,连续区间)
  • value in(option,…) 多选一 (一个离散的集) where 字段名 in ()
  • and
  • or
  • not 取反/不是/不满足这个条件 (not age =18;这个可以 age not =18 这样不可以)not后面更多的是条件
  • is not不是用来判断是否等于某个字符的,一般用is not null
whereuniversity!='复旦大学';whereuniversuty<>'北京大学';

条件查询过程

  1. 遍历每一行的数据
  2. 把这一行的数据带入到条件里
  3. 条件成立将这一行加入到集合里,不成立的话跳过
  4. 完成所有遍历过程后得到了结果集合,再根据select指定的列/表达式/别名/去重操作对集合处理
selectname,chinese+mathastotalfromexamwheretotal<200;--报错 注意上面写的条件查询过程

注:and or优先级:建议手动加()保证调整优先级尽量不要写复杂条件。


selectnamefromexamwherenamelike'孙%';//'%'包含多个任意字符selectnamefromexamwherenamelike'孙_';//'_'一个任意字符

select列名from表名orderby列名selectnamefromexamorderbychinesedesc;selectnamefromexamwherechineseisnotnullorderbychineseselectdevice_id,gpa,agefromuse_profileorderbygpadesc,agedesc;--order by 后的顺序不能反,gpa相等后,再按照age降序输出。
  • 没有order by ,查询结果的顺序是不一定
  • null在排序中默认最小,相同值之间彼此顺序是不一定的
  • order by 子句 默认排序是升序 在结尾加desc(descond)降序
selectname,chinesefromexamwherechineseisnotnullandenglishisnotnullorderbymathdesc,chinses,english;--先按 math 降序排序--如果 math 相同,再按 chinese 升序排序--如果 chinese 也相同,再按 english 升序排序

limitnum;--返回num条记录limit起始位置,查询条数;limit查询条数OFFSET起始位置;
U:修改操作(危险操作,不可撤销)
update表名set列名=,列名=;

注:修改的前提是先查询到,不加条件的修改就是作用于全部行。

D:delete 删除数据中数据行
deletefromexamwherename='孙';--如果不指定条件的话会删除掉表内所有数据剩下一个空表
truncate 清空整张表里的所有数据
truncatetablestudent;truncatestudent;--上面两个都可以,这个表示表结构还在但表里的数据全没有了--如果表里有自增主键,TRUNCATE 通常会把自增编号重置。--再插入新数据,id 通常会从 1 重新开始。

delete:删除表中的数据行
truncate:清空整张表的数据
drop:删除数据库、表等对象本身

聚合查询(对查询结果进行统计 行级别的)

聚合函数:

聚合函数通常会忽略 NULL,但表达式里出现 NULL 时,整个表达式可能变成 NULL。

selectcount(*)fromexam;--count 和()之间不能有空格,先执行select 再count 统计查询结果行数selectcount(name)fromexam;--有一行name是null就不被统计,字符串和数字有隐式转换count(*)用来统计查询结果中的行数。实际理解时可以认为:先从表中取数据,再根据where条件过滤,最后统计剩余行数。
selectsum(math)fromexam;--sum 操作会直接排除null值selectsum(math+english+chinese)astotalfromexam;--算总分--如果一行里面 math、english、chinese 只要有一个是 NULL,那么这一行的结果就是 NULL,这一行就不会被 sum 正常累计。
selectavg(math+chnese+english)fromexam;
selectmax(english),min(english)fromexam;--字符串可以比大小
selectrole,count(*)fromempgroupbyrole;

注:一条 SQL 语句中通常只有一个 group by 子句,但 group by 后面可以写多个分组字段。分组后,每一组通常通过聚合函数产生一行统计结果。

非group by的列不能直接作为被查询的列,但通过聚合函数来进行一些分组查询。

selectuniversity,avg(question_cnt)asavg_question_cntfromuser_profilegroupbyuniversityhavingavg(question_cnt)>10;
  • where 是在聚合以前的使用条件,写在group by前
  • having是在聚合以后使用的条件,写在group by后

createtablestudent(idint,namevarchar(20),gendervarchar(20))check(gender='男'orgender='女');--后续修改插入数据都会自动带入条件,条件成立才能修改插入

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/27 3:52:37

别再傻傻分块了:这个开源引擎让RAG准确率飙升260%

PART 01 传统 RAG 的致命缺陷 先说一个你可能已经隐约感觉到但没有量化过的事实&#xff1a;传统 RAG 管线里的「分块」策略&#xff0c;从根本上就是错的。 大多数 RAG 系统的做法是&#xff1a;把文档切成固定大小的文本块&#xff0c;扔进向量数据库&#xff0c;然后指望余…

作者头像 李华
网站建设 2026/6/27 3:52:12

热江 - 赏金版手游官网下载:热江赏金版最新官方下载渠道

热江 - 赏金版手游官网下载&#xff1a;热江赏金版最新官方下载渠道 《热江 - 赏金版》又名《热江怀旧版》《热江高爆版》《热江绿色版》《热江武林版》&#xff0c;由安徽游昕联合忆往游戏运营的正版武侠 MMORPG 手游。1:1 复刻泫勃派、南明湖、松月关、黑风洞、天魔试炼、昆…

作者头像 李华
网站建设 2026/6/27 3:51:17

为什么说补充铁锌维可以让毛囊变黑

之所以说补充铁锌维可以让毛囊变黑&#xff0c;是因为铁、锌以及B族维生素是毛囊黑色素细胞合成黑色素、维持毛囊正常代谢的必需营养物质。当人体因饮食不均衡、熬夜压力大出现这些营养缺口时&#xff0c;黑色素细胞的活性和合成能力会下降&#xff0c;进而导致白发早生&#x…

作者头像 李华
网站建设 2026/6/27 3:48:23

RAG系列:RAG中的11种分块策略

检索增强生成&#xff08;RAG&#xff09;将 LLM 与信息检索系统相结合&#xff0c;以生成更准确、更符合上下文的响应。通过从外部文档中获取相关信息&#xff0c;解决了LLM固有的一些问题&#xff1a; 幻觉问题 (Hallucination)&#xff1a;当被问到知识盲区或不确定的内容时…

作者头像 李华
网站建设 2026/6/27 3:43:14

2026 最新 Codex 新手教程:用 cc-switch + kkflow.org 零基础跑通 AI 编程

2026 最新 Codex 新手教程&#xff1a;用 cc-switch kkflow.org 零基础跑通 AI 编程 最近很多人在问 Codex 到底怎么装、怎么配、怎么在国内真正跑起来。 问题通常不是出在“不会提问”&#xff0c;而是第一步环境就卡住了&#xff1a; Node.js 版本不对npm install 太慢Codex…

作者头像 李华
网站建设 2026/6/27 3:35:14

2026年,用Gemini镜像站解决PHP/Java编程问题的技术指南

汇聚国内外各大顶级Ai最新大模型&#xff0c;免费一站式使用&#xff1a;gemini3.5&#xff0c;gpt&#xff0c;claude&#xff0c;grok 出图模型gpt-image-2低至每张0.03 视频模型&#xff1a;sora2&#xff0c;seed2&#xff0c;grok&#xff0c;全网最低价。网页入口&#x…

作者头像 李华