【MySQL】MySQL表的增删改查(基础版)

📌前言:本篇博客介绍MySQL数据库增删改查的基础,学习MySQL之前要先安装好MySQL,如果还没有安装的小伙伴可以点这里博主前面的这篇博客,里面有详细的安装教程。

那我们废话不多说,直接进入主体!🚀🚀🚀


一、CRUD

注释:在SQL中可以使用“--空格+描述”来表示注释说明

而CRUD 即增加(Create)、查询(Retrieve)、更新(Update)、删除(Delete)四个单词的首字母缩写,基本上我们在使用和操作数据库的时候,大多数都是几个操作了。接下来我们逐一进行说明。

【回忆】因为接下来的操作我们都是围绕着表去进行操作的,所以我们复习回顾一下在上一篇博客中说到的关于数据库的操作:

🎈1. 创建表 create table 表名;
🎈2. 查看表 show tables;
🎈3. 查看表结构 desc 表名;
🎈4. 删除表 drop table 表名;
🎈5. 选中数据库 use 数据库名;

这里补充一点就是,没有什么语句可以说是查看现在选中的是哪个数据库,但是我们如果不记得是否选中了自己需要选的,可以多次执行use 数据库名的语句,并不会有什么不良影响。


📢1.新增(Create)

语法:insert 【into】表名 values(值,值,值.....)

例子:

insert into books values('老人与海',15);

新增是在表里面增加数据,我们在之前的博客中写道每一列都必须要有它固定的数据类型,其实就是在新增的时候统一,可以更好整理信息。在这里我们演示中,先创建一个表:

CREATE TABLE student (
   id INT,
   sn INT comment '学号',
   name VARCHAR(20) comment '姓名',
   qq_mail VARCHAR(20) comment 'QQ邮箱'
   --这里故意写成这样子,首先mysql中没有大小写区分,用INT和int都可以
   --然后这里的comment是一种注释方式,后面的内容是不用执行的。
);

运行成功:

然后就是我们插入数据/新增数据的语句了:

 insert into student values(1,2040231143,'张三','1752894294@qq.com');

输入并查询表中数据:

同时,我们可以输入多组数据,在数据之间用英文逗号隔开就行,每一个数据也要用英文括号阔起来,然后就可以输入多组数据啦,并且在没有以分号结尾之前,我们在每组数据之间还可以换行:

mysql> insert into student values(2,2040231144,'李四','123456789@qq.com'),
    -> (3,2040231145,'王五','234567891@qq.com'),
    -> (4,2040231146,'赵六','345678912@qq.com');

运行结果:

这里的返回就表示三行受到影响,也就是三行插入成功了!

这里我们有一个细节,就是在我们上面是三条数据一起插入的,那如果是一条一条插入呢,有什么差别吗,有些同学可能是就是多写几次insert,实际上是有很大区别的。

实际上,一次插入N条数据的速度要比分N次一次插入一条快很多(好几倍)。在每次插入数据的时候,客户端会传输sql给服务器,而多次传播比一次传播花费的时间成本要高很多。

这就是新增/插入语句。


📢2.查询(Retrieve)

接下来就是查询语句了,查询语句是最核心的也是最复杂的操作,因为我们增加减少数据只是占少数,但是我们经常要查数据,其实在上面的操作中我们在看修改变化中就出现了查询语句了。

1️⃣全列查询

语法:select * from 表名;

其中,这里的*是通配符,就是表示一个表所有的列,就好像我们在玩扑克中斗地主的癞子玩法,就是一种通配符。

我们试一下: select * from student;

这里就是把一个表所有行和列都查找出来了,然后把查找的结果变成一个"临时表"。❗️ 注意:此处的查询结果临时表,不在硬盘上,而是在内存,随之进行输出之后,数据也会被释放,也就是查完给你看就释放了,不会长久保存。

这里做了一个图供大家理解:

❗️ 注意:这里的select操作也不会影响到硬盘中持久化保存的数据。

然后还有一点值得注意,像select * from 表名这种操作,也是一个危险操作,如果在生产环境的服务器上执行,很可能会带来灾难,生产环境保存的数据量可能非常大,TB级别,可能会瞬间把硬盘的IO吃满。不过在实际开发中,一般公司都会对SQL的执行时间做出监督,一旦发现这种"慢SQL",就会强制把这个SQL杀死。

所以除了用select * 查找之外,我们也可以查找其中一个列的数据,比如上面的student表中,我只想知道学生的名字,就可以执行:select name from student;


2️⃣ 指定列查询

语法:select 列名,列名 ... from 表名;

执行结果:

对比上面的全查询,这种查询就会显得高效很多。因此在平时的开发中还是这种指定列查询使用的比较多,语法就是select 列名,列名 ... from 表名;


3️⃣对指定字段进行的操作

除了上面的直接查询到需要知道的情况,我们也可以在查询中加入一些运算等表达式的字段,同样可以实现,这里我们先定义一张成绩表:

mysql> insert into grade values('张三',2040231143,85,99,102),
    -> ('李四',2040231144,99,119,50),
    -> ('王五',2040117314,80,80,81),
    -> ('蛋蛋',2040131420,99,102,105),
    -> ('哈哈',2040541234,60,70,32);

运行后打印的临时表:

然后我们就可以在查询的时候增加一些运算操作,在这里我们的成绩表中,比如我们想在查询的时候语文成绩的时候加十分,就可以:

我们想查询他们的总成绩的时候:

然后我们会发现,总成绩这里的说明那么长一段,能不能给他换个名字呀,这么长太难看了,诶,确实可以换,这时候我们可以查看字段指定别名,语法:在换名的列后面加as 新名字

这里的as就是相当于换名字,其实也可以不用as 直接接上total也是可以的,但是没有total会容易让人产生误会,还是加上更清晰。

还有一个操作是针对查询结果去重,语法:在需要去重的列名前加distinct

在这里为了演示插入一条和ggb一样的数据,然后我们再查:

对于上诉操作中,有几个值得我们注意的点:

  1. 在这里的运算中,临时表产生运算后的数据,不会影响到存储在硬盘中的数据,只是在显示的时候进行了运算而已。
  2. 在硬盘中存储的数据通过运算后可能会超出原本的数据范围,临时表的类型会自动的适应,保证计算结果是正确的。
  3. 上述操作都是一个或多个列来进行运算的,行与行之间不影响。

4️⃣ 对查询结果排序

在这里一样是针对临时表的操作,并不会影响到数据库服务器上的数据,我们可以对查询结果进行排序,语法是:

select 列名...from 表名 order by 列名	asc/desc

首先解释一下这里的语法,这里的order by就是说按住哪一个列的数据进行排序,然后后面的asc/desc是升序和降序的意思,如果后面不加,默认就是升序。

比如查询成绩按数学成绩由高到低排序

select * from grade order by math desc;

💡查询结果:

再比如查询成绩按总成绩升序排序

select name,chinese+math+english as total from grade order by chinese+math+english asc//这里用total也可以;

💡查询结果:

再比如我们有NULL数据的查询(被视为最小值)

对于这里的排序查询,可以指定更多的数据进行排序,比如select * from grade order by math,chinese desc;他就按照先按数学排序,当数学成绩相等的时候,再比较语文成绩进行排序,我们这里的数学是默认的升序,语文是降序,所以得到的结果是这样的:

像数据库这种查询结果,如果不去指定排序,这里的结果的顺序是不可预期的,写代码的时候不能依赖默认排序。


5️⃣ 条件查询

对于查询结果,我们在正常生活中也经常使用到,可以筛选自己需要的结果,所以这里mysql也是有的,就是把不满足条件的数据过滤掉,语法是:

select 列名 from 表名 where 条件; 

继续以这个成绩表作为例子:

这里分别说一下关于MySQL的条件操作:

1.>,>=,<,<=,也就是比较,比如上面的成绩中,筛选语文高于数学的: where chinese > math

例子:

2. =,<=>,这里的=大家比较熟悉,但在这是比较的意思,而我们有一个更好的比较<=>,直接用等号比,万一两边为空它是比较不出来的,而后者可以。比如:where math <=>chinese

例子:

3. between A and B,这里是构造一个闭区间[A,B],在这范围内的数据输出,比如:where math between 75 and 90;

例子:

4. IN(option,....),这里是后面给固定的值,判断当前结果中是否有这几个值在其中,比如: where math in(80);

例子:

5.IS NULL/IS NOT NULL ,这里是专门用来比较空值的,比如:where chinese is null

例子:

6.LIKE ,这是一个模糊查询,我们有两个符号和它组合,一个是_(下划线),另一个是%,前者表示一个字符,后者可表示一个或多个字符,然后如查名字带张的,就可以是where name like '%张%’,这里就表示名字里是有张的就行。

例子:

7. AND OR NOT,这里就是相当于是&&||,判断语句是否为真的意思,比如:where math >80 and chinese >100;

例子:

❗️ 注意:有andor要先运算or再选and

这里就是基本的条件查询了,在这里,我们如果查询结果是三科成绩相加,然后又另命名为total,在条件查询中是不可以用total作为条件列的,也就是where字句不能使用别名,如:


6️⃣ 分页查询

在我们的查询中,为什么会有那么多页呢,一页到底不好吗,其实,在我们查询的过程中,如此庞大的数据库,查到的数据全显示在一页,这得浪费多少流量,我上面找到了,后面又不看,所以我们有了分页查询,每页固定信息量:

对于Sql中是用limit来实现分页查询的:select 表名 from 列名 limit 数

  1. 直接用limit查询数据(下面例子查三条)
  1. limit+offset offset就是查的起始位置,就是有起始位置查(例子从位置为1的地方开始往下查)

📢3.修改(Update)

终于跨过查询了,到了修改就比较简单了,语法:

update 表名 set 列名 = 值,列名 =where 条件 

❗️ 注意 !上面的查都是临时表,不会更改数据库服务器上的数据,但是这个就会改,所以在修改的时候一定要谨慎!

比如将张三的数学改为120:

这里的修改中,返回的Rows matched: 1 Changed: 1 Warnings: 0就是修改了一行的数据。


📢4.删除(Delete)

delete from 表名 where 条件

Delect操作也很简单,就是删除数据,这里也要小心,一旦写错就有可能会影响到很多数据,如果我们直接是delete from 表名,没有增加条件的话,就是默认删除所有数据。但是这里和删表不一样,这里表还存在,就是里面的数据没了,但这个表还在。

比如:

这就是删除。


以上便上MySQL表的增删改查(基础版),接下来就会进入到MySQL的增删改查(进阶版)了。欢迎关注。一起学习,共同努力!

还有一件事:

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
C# VS2012 86系统 mysql-5.5.27-win32 功能:利用动软代码生成器 从 数据库或者视图中生成 的三层结构代码 实现 数据增删改查。 如果可以,请下载资源中 修改 的动软代码生成器 C#模板生成 1、由于之前使用 动软生成 java 网页源码,比较成功,此处编写C#程序时沿用,感觉更加适合。 2、直接调用动软的相关dll和生成的三层代码,可以较快的实现增删改查操作。 3、由于一些dll本的问题及动软生成器自身的一些不完善,产生了一些问题并查找了挺久,所以把可以实现的本发布出来共享。 前提: 使用的是 mysql数据库时才可能会出现以下问题 问题: 1、MySql.Data.dll 必须是5.6.1以上本,否则会出现 “向信号量添加给定计数将导致其超出它的最大计数” 的问题。 2、动软代码生成时,必须增加该命名空间 using MySql.Data.MySqlClient; 3、动软代码必须修改 “工具”-“选项”弹出窗 后,点击 ”代码生成设置“-”字段类型映射“-”参数符号“中删除 mysql @,添加mysql ? 4、如果不修改3的设置,在增删改时 参数设置会失败。 5、mysql保存或者修改时,中文会出现乱码,这时必须 在DbHelperMySQL类的 连接字中增加Charset=utf8;即 protected static string connectionString = "Server=localhost;User Id=root;Password=root;Persist Security Info=True;Database=mnzfz;Charset=utf8;"; 6、如果要在局域网中远程访问,请 修改 mysql 权限:grant select,update,insert,delete on *.* to 'root'@'192.168.0.1' identified by "123456";

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

恒等于C

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值