数据库的创建和增删查改使用操作(超详细)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 本文主要带新手小白理解上手mysql的增删查改等操作

 阿华代码,不是逆风,就是我疯,希望本文内容能帮到你!你们的点赞收藏是我前进最大的动力!!

目录

一:数据库的库操作

1:创建数据库

2:展示数据库:

3:选中数据库

4:删库

二:数据库的表操作

前引:字符串的类型

1:创建表

2:查看表

3:查看表结构

4:删除表

三:增

1:新增数据

四:查

1:查询数据 :select查询

(1)全列查询:

(2)指定列查询:

(3)表达式查询:

 (4) 给查询结果指定别名:

(5)查询去重关键字distinct:

(6)查询的同时进行排序:

(7)聚合查询:行操作

①count

②:sum

③:min()

④:avg() 和 gruop by

⑤having

(8):联合查询---多表查询

①笛卡尔积:排列组合

2:比较运算符

(1)“ = ”:

(2)NULL=NULL   => NULL      -> false (不成立)

(3)<=> 比较相等  :

(4)between s1 and s2:

(5)in(option , .....)

(6)like关键字

3:逻辑运算符

(1)and 和  or

4:分页查询

(1):limit

(2):offset(默认从第0条开始)

五:改(危险操作)

1:修改   update

编辑编辑

六:删(危险操作)

1:delete from 表名 where 条件(order by / limit)

2:drop 表名(删表)

3:drop database 库名(删库)


服务器是否正常工作可以在服务中,查看mysql 是否在正常运行。

image.gif 编辑

一:数据库的库操作

1:创建数据库

create database 数据库名 charset utf8;

注:

①前俩英文为关键字,名字不能与关键字重复,结尾带分号

②utf8是字符集 : 计算机存储的是“二进制数据”用数字来表示一些字符,但是因为汉字的数量非常庞大,所以就需要更大的码表来表示,就发明了其它的编码方式

常见的几种种中文编码方式:

1)GBK(Windows简体中文版,默认使用的字符编码)vs上一个汉字2个字节,但是2个字节只能表示6万多的不同的字符,常用的汉字4k个+生僻字=6w多个,还不算少数民族的语言,

2)utf8:一个utf8字符,可能是1/2/3/4个字节,可以表示全世界的任何一种语言文字,如果表示汉字,一般就是3个字节。

3)unicode:JAVA中String类型在传输或者保存到文件中的时候,都要先转化为编码,在进行存储,如果是多个字符编码的数据按照字节紧靠在一起,系统就分辨不出来从哪到哪是一个完整的汉字了

例如一组汉字:

下雨天留客天留我不留  

下雨天留客,天留,我不留

下雨天,留客天,留我不?留!  

utf8就是为了解决这个问题而生的

2:展示数据库:

show databases;

image.gif 编辑

3:选中数据库

use 数据库名;

4:删库

drop database 数据库名

二:数据库的表操作

前引:字符串的类型

(1):varchar(size) 可变长度字符串

 (2)   :  text            长文本数据

 (3)   :  mediumtext  中等长度文本数据

(4):blob 二进制形式的长文本数据

(5):datetime

(6):timestamp 时间戳

1:创建表

create table 表名(类名 类型 , 列名 类型......);

注:

(1):表名若是关键字 比如  `order` //加上     ``     反引号就可以了

(2):SQL中注释方法①comment  ② -    ③#

2:查看表

show tables

3:查看表结构

desc 表名  (des:describe 描述)

4:删除表

drop table 表名;

三:增

1:新增数据

insert into 表名 values(列,列),(列,列),(列,列).......

insert into 表名(列名,列名,列名.......) values (值,值,值........)

例如:create table student (id int , name varchar(20));

          insert into student values (1,`zhangsan`);

可以一次插入多组数据

小tip(套娃操作):insert into 表1(列名) values select * from 表2//把查询的结果和插入语句结合到了一起(后半句查询出来的表2要和表1的结构匹配)

注:①插入的数据要与表的列数相同(否则会报错)

image.gif 编辑

但有特殊写法可以让列数不相同:如insert into student(id) values(4);

②插入的数据要与表的类型相同(否则会报错)

image.gif 编辑

③插入的数据类型如果是datatime类型

insert into student2 values(1 ,  `张三`  , 2023-10-30 18:32:00);

image.gif 编辑

四:查

1:查询数据 :select查询

注:所有的select 操作都是在临时表中进行的

(1)全列查询:

select * from 表名;

注:①* 通配符

(2)指定列查询:

select 列名,列名........ from 表名;

(3)表达式查询:

如查询所有学生的英语成绩+10   select name ,engliish+10 from exam_student;

注:decimal(3,1)//数字长度最多是3,小数点后必须是1

 (4) 给查询结果指定别名:

select 表达式 as 别名  from 表名   //让表格有更好的可读性

(5)查询去重关键字distinct:

select distinct 列名 from 表名;

(6)查询的同时进行排序:

select 列名 from 表名  order by 列名 (desc) //mysql默认升序省略了asc 关键字

注:①最后一个列名是排序的依据,列名不一定出现在表格中,可能是几个数据相加

      ②MySQL默认是升序(asc)

      ③ desc // 关键字 descand  降序  容易跟desc ->describe 查看表的结构产生分歧

      ④列名的类型也可以是字符串,字符串也能比较大小,我们期望按照中文的拼音或者笔画来进行排序,但是mysql不支持这样的功能

      ⑤order by 在排序的时候也有“优先级”的区别,如果第一个比较的东西如(order by math ,chinese)math的数值相同,那就比较chinese的大小

(7)聚合查询:行操作

聚合查询就是“行与行”之间的运算,这里的运算限制,只能通过:“聚合函数”来进行操作,可以理解成SQL提供的一些“库函数”。

image.gif 编辑

①count

select count(*) from 表名

SELECT COUNT(1)COUNT() 函数返回满足条件的记录数。在这里,1 只是一个占位符,因为 COUNT() 只会计算记录的数量,而不关心具体的列。你也可以用其他列名来代替 1,效果是一样的。常见的做法是 COUNT(*)COUNT(某列)

image.gif 编辑

(*)替换成具体的列(列名),如果该列中含有null,不计入count

image.gif 编辑

(*)查询,就算表里全为null的行,也会记录起来

image.gif 编辑

②:sum

“1”:select sum(chinese) from exam_result;

chinese那一列全部相加,sum()函数中null会忽略掉,但在SQL中null与其他数字进行运算时,结果一般都是null。

image.gif 编辑

image.gif 编辑

“2”:select sum(name)  from exam_result;

sql把字符串当做数字进行算术运算,都会尝试把字符串转化为数字,但是汉字不行

image.gif 编辑

警告,但是不影响程序能继续跑

image.gif 编辑

③:min()

查询整个表里语文成绩最低的同学 :select  min(chinese) from exam_result;

等价写法:select chinese from exam_result where chinese not null order by limit 1;

image.gif 编辑

④:avg() 和 gruop by

误区:没有“使用聚合的列”也可以和聚合函数完的列成为同一行数据

例如,按照职业计算其平均薪资

select role,avg(salary) from emp group by role; //这里的显示顺序不能认为是否存在任何顺序

image.gif 编辑

image.gif 编辑

⑤having

分组之前(group by)的条件用where 来表示 , 分组之后用having来表示,用法同where

"1":select role , avg(salary) from emp where name != '张三' gruop by role; //句意:把“张三”剔除后,各职业的平均薪资(分组前剔除)

image.gif 编辑

“2”:select role avg(salary) from emp where name != '张三' group by role having avg(salary) < 20000;             //句意:去除'张三'后,分组后,平均薪资水平低于20000的role

image.gif 编辑

总结使用:举例,分组操作往往都是跟聚合函数一同使用的

image.gif 编辑

(8):联合查询---多表查询

注:多表联合核心操作就是笛卡尔积,比如两个表进行联合查询,那么就先让这两个表进行笛卡尔积,再加以限制条件,来实现一些需求中的查询结果,如果使用两个大号的表来进行笛卡尔积,危险操作,会产生大量的运算和IO,容易把数据库搞挂。

进行笛卡尔积的两个表,至少有一列是相关的,不然无意义

①笛卡尔积:排列组合

select * from student , class;

image.gif 编辑

image.gif 编辑

image.gif 编辑

显而易见,上述表中是一张由两张小表组合成的大表,但其中有一些不合理的数据,现在我们加以约束条件

select * from student , class where  student.classId = class.classId ;

image.gif 编辑

如果有两个以上的表进行笛卡尔积,那么就两两进行,ABC中 :A和B先进行笛卡尔积,(AB)在和C进行

2:比较运算符

(1)“ = ”:

在sql中  = 可能是赋值,也可能是比较相等,在select语句中=表示相等

(2)NULL=NULL   => NULL      -> false (不成立)

使用NULL和其他的值进行比较或者运算结果都是null

image.gif 编辑

(3)<=> 比较相等  :

NULL <=> NULL =>true

image.gif 编辑

应用:

①where + 比较运算符  :   select name , chinese+math+english from exam_result where chinese + math + english <200;

②变式错误写法  select name , chinese + math + english as total from exam_result where total<200;  

错误原因:执行顺序优先级,先执行where后的语句,在执行 chinese + math + english as total

在mysql中,让别名被定义先实现,后执行where语句不行

(4)between s1 and s2:

①应用:查询chinese 在80-90这个分段的人(也可以用 and去连接)

select * from exam_result where chinese between 80 and 90;

(5)in(option , .....)

注:如果是option中的一个,返回true

①应用:查数学成绩为58或59或98或99的人(也可以用or去连接)

select * from exam_result where math in(58,59,98,99);

(6)like关键字

①%匹配任意个字符

select * from exam_result where name like '%孙';  // 找以名字孙结尾的同学,  '孙%' 找以孙开头的同学  '%孙%' 找包含孙的

image.gif 编辑

②_匹配一个字符

select * from exam_result where name like '孙_';//一个_

select * from exam_result where name like '孙__';//两个_

image.gif 编辑 image.gif 编辑

select * from exam_result where name like '_孙_';//包含

select * from exam_result where name like '__孙';//尾部

image.gif 编辑 image.gif 编辑

3:逻辑运算符

(1)and 和  or

       例句:①select * from exam_result where chinese > 80 and english > 90;

                  ②select * from exam_result where chinese > 80 or english >90;

 注:and 优先级高于  or

       例:select * from exam_result where chinese > 80 or math >70 and english >70;

image.gif 编辑

实际写代码,按照逻辑去加(),显示指定的顺序,不易出错

优化后:select * from exam_result where (chinese > 80  or  math  >  70) and english > 70;

4:分页查询

如果数据量过大,select * 操作较危险, 引入limit

(1):limit

①select * from exam_result limit 3;  // 返回前三条数据

(2):offset(默认从第0条开始)

①:select * from exam_result limit 3 offset 3 // 从第四条数据开始往后获取共计三条数据

image.gif 编辑 image.gif 编辑

五:改(危险操作)

1:修改   update

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

image.gif 编辑

应用:

①update exam_result set math = 80 where name = '孙悟空';//将孙悟空的数学成绩修改为80

②update exam_result set math = 80 ,chinese = 70 where name = '孙悟空';//修改两科成绩

③update exam_result set math = math + 30 order by  chinese + english + math limit 3;

//85.0+30 = 115.0  decimal(3,1) 三位数字,小数点后一位,超出范围了,所以执行失败,导致整条sql语句都执行失败

image.gif 编辑

image.gif 编辑

六:删(危险操作)

1:delete from 表名 where 条件(order by / limit)

注:如果没有条件限制的话,就会把表里所有的数据给删除掉

2:drop 表名(删表)

3:drop database 库名(删库)


相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
8月前
|
XML Java 数据库连接
如何使用MyBatis框架实现对数据库的增删查改?
如何使用MyBatis框架实现对数据库的增删查改?
|
4月前
|
SQL Java 关系型数据库
MySQL数据库基础:增删查改
本文详细介绍了数据库中常用数据类型的使用方法及其在Java中的对应类型,并演示了如何创建表、插入数据、查询数据(包括全列查询、指定列查询、去重查询、排序查询、条件查询和分页查询)、修改数据以及删除数据。此外,还特别强调了处理NULL值时的注意事项,以及在执行修改和删除操作时应谨慎使用条件语句,以避免误操作导致的数据丢失。
104 14
MySQL数据库基础:增删查改
|
8月前
|
存储 数据处理 数据库
深入了解达梦数据库的增删查改操作:从入门到精通
深入了解达梦数据库的增删查改操作:从入门到精通
550 4
|
SQL 安全 关系型数据库
MySQL数据库中的增删查改(MySQL最核心,工作中最常用的部分)
MySQL数据库中的增删查改(MySQL最核心,工作中最常用的部分)
852 0
|
8月前
|
关系型数据库 MySQL 数据处理
『 MySQL数据库 』表的增删查改(CRUD)之表的数据插入及基本查询(下)
『 MySQL数据库 』表的增删查改(CRUD)之表的数据插入及基本查询(下)
|
8月前
|
关系型数据库 MySQL 数据库
『 MySQL数据库 』表的增删查改(CRUD)之表的数据插入及基本查询(上)
『 MySQL数据库 』表的增删查改(CRUD)之表的数据插入及基本查询(上)
|
SQL Java 关系型数据库
JDBC(常用类与接口、实现数据库的增删查改)
1.Connection接口常用方法、2.DriverMange类、3.Statement接口,4.实现表的数据更新(增、改、删),5.实现数据查找(ResultSet接口),6.PreparedStatement 数据更新
140 0
JDBC(常用类与接口、实现数据库的增删查改)
|
SQL 关系型数据库 MySQL
MySQL数据库操作篇2(表的增删查改&约束)
MySQL数据库操作篇2(表的增删查改&约束)
116 0
|
存储 缓存 前端开发
IndexDB实现一个本地数据库的增删查改
在客户端,我们所接触到的绝大部分本地缓存方案主要有localStorage以及sessionStorage,其实Storage除了这两大高频api,另外还有IndexDB、cookies、WebSQL,Trust Token(信任令牌),cookies相对来说在前端接触比另外几个多点
531 0
IndexDB实现一个本地数据库的增删查改
|
存储 SQL 安全
一文搞懂MySQL数据库基础与MySQL表的增删查改(初阶)
当我们创建数据库没有指定字符集和校验规则时,系统使用默认字符集:utf8,校验规则是:utf8_general_ci
一文搞懂MySQL数据库基础与MySQL表的增删查改(初阶)