(重点来啦!)MySql基础增删查改操作(详细)
目录
我将从以上的方面进行介绍;详略得当;
在正式开始基础的操作之前我们需要最基础:
简单操作命令:
一、客户端和数据库操作:
1.登录数据库服务器:mysql-uroot-p;
注意:在该情况当中java113表示的是数据库的名称,切记在输入的时候,不能加上;——其中的;会自动识别为数据库的名称
2.查看当前数据库版本:select version();
3.显示所有的数据库:show databases;
注:在mysql当中本身的数据库是不能进行删除的,如果删除了,需要进行重新安装数据库软件,会影响使用存在打不开的情况
4.创建数据库:create database if not exists数据库名 character set (utf8mb4)字符串编码集 collate (utf8mb4_0900_ai_ci)排序规则;
下面表示的是有一条语句被执行了,(0.01 sec)表示的是时间——一般情况下参考性不大
查看一下当前数据库的存在情况
5.选择当前数据库:use 数据库名
表示的是进入了这个的数据库当中
6.查看当前选择了哪一个数据库:select database();
将此时正在使用的数据库进行了呈现
7.删除数据库:drop [if exists] database 数据库名(非常危险的操作)
该操作比较危险,不在这里进行展示,相关代码如图所示
8.查看警告信息:show warnings;
他以为进行的是查看标的操作,所以就是该方法不存在
9.退出:quit/exit;会带命令行当中
在最基础的工作完成之后,进行表格操作,MySQL处理的是关系型数据库
二、表操作
1.查看当前数据库中有哪些表
语法:show tables;
由于在该数据库当中还没有为他创建表格
2.创建一张新表
语法:Create table 表名(列名 数据类型,列名 数据类型);
create table student if not exists(
id bigint primary key auto_increment,
name varchar(50),
sex varchar(10),
weight bigint
);
其中的()——里面的列名可以有很多
可以在这里面进行校验:if not exists;的方式
可以通过展示数据库当中的表来查看当前所拥有的表:
此时展示的就是我们创建的表格
3.查看表结构:
语法:desc 表名;
desc student;
其中Field:我们创建的列表名称
Type:列表对应的数据类型
Null:该列表是否可以为空判断,id被我们定义为主键,所以id不能为空
Key:哪种类型(主键,外键,自定义)
Default:表示如果没有定义该值,会用NULL进行填充
Extra:额外操作,id表示的是进行自加的操作
4.删除表
语法:drop 表名;
三、CRUD增删查改
1.新增——插入
语法:Insert into 表名[(列名,列名……)] values(值,值……);
制定了多少列,就放入多少值,值与列名一一对应
像之前我们创建的表格当中的增加20数据
2.查询操作
a.全列查询:
语法:select*from 表名;
select*from student;
将表格当中的所有的数据都进行了展示
b.指定列查询:
select 列名/表达式 as 别名 from 表名;
select weight+10, id,name from student;
运行结果为
c.列名为表达式的查询:
语法:select 列名/表名 from表名;
该种情况在上一个的指定列查询当中已经出现了,这里不做最次讲解
d.别名查询:
select 列名/表达式 as 别名from 表名;
select id,name,weight+10 as result from student;
其中的as可以进行省略
e.去重查询:
select distinct 列名(多个)from表名;
注:此时必须是完全相同才会被识别为相同的情况
select distinct weight,id,name from student;
运行结果为:
因为在该题当中每一个都是不一样的,他们的id就是不一样的,所以在去重的时候就是没有任何的变化
f.排序:
select 列名(多个)from 表名 order by 列名 asc|desc;
asc升序;desc降序
假设按照体重进行排序:
select *from student order by weight asc;
最后的运行结果:
g.条件查询
语法:select列名(多个)from 表名where 列名/表达式比较或逻辑运算符
假设需要查询体重大于60公斤的所有情况:
select *from student where weight>60;
运行结果为:
h.区间查询:
语法:select列名(多个)from 表名where 列名 between 开始条件 and 结束条件;
假设查询的是体重在50-60之间的所有人:
select*from student where weight between 50 and 60;
查询的结果为:
i.模糊查询
语法:select *from 表名where 列民 like'%值_';
%:匹配的是任意字符;_匹配的是单个字符;
查询%s%的情况:
select*from student where name like '%s%';
最终查询的结果为:
两条记录被返回;
j.分页查询
语法:select*from 表名 where条件 order by 列名asc|desc limit num offset start;
假设需要查询的是该条数据的用体重排名的前两位:
select*from student order by weight asc limit 2 offset 0;
最终查询的结果为:
3.更新操作
语法:update 表名 set 列名=值 where条件order by子句 limit num;
注:如果没有指定相关的条件可能会出现将整个表格都进行了修改
假设:将体重小于60的人的所有的体重改为1;
update student set weight=1 where weight<60;
最终的执行结果:
5条语句进行了修改;
用全查列进行查看相关的结果情况:
select*from student;
4.删除操作
语法:delete from 表名where 条件 order by 子句 limit num;
注:若没有限制可能会出现将整个表格都进行删除的操作
例如删除weigh<60的数据;
delete from student where weight <60;
最终的结果为:
5条数据发生了已修改
进行查看:
删除了其中的5条数据所以还有15条数据进行展现;
四、数据库约束
1.非空约束:not NULL 标记一个字段是否可以为空,指定这个约束的字段不可以为空
2.唯一约束:unique标记一个字段的内容在当前列中唯一,不能重复,但是可以为null
3.主键约束:primary key在约束的方式上相当于not null+unique
4.默认约束:DEFAULT当一个字段没有值时(为null),不指定列的时候,就默认值进行填充
5.外键约束:foreign key一个表中的字段与另一个表当中的主键建联系,当对表中的数据进行增删查改的时候数据库会帮助我么进行检查
五、表的设计
三大范式:
1.第一范式:要求在表中的第一列不可以再分,有一个简单的方法,数据库中提供的数据类型可以描述这个字段不满足第一范式就是不是关系型数据库
2.第二范式:在第一范式的基础上,消除部分函数依赖,只能出现在有复合主键的表中(有多个候选键),如果有一字段只依赖于复合主键中的某一列,就需要把这个数据移除。单独建表
注:不满足第二范式会出现一些异常
数据冗余,更新异常,删除异常,新增异常
3.第三范式:在第二范式的基础上,消除传递依赖
六、关系模型
1.一对一关系:各自先建立各自的表,在其中的一张表上加上一个字段完成对另一个表的引用
2.一对多关系:各自先建立各自的表,在这一方设置一个主键,在多者一方加一个字段,两表建立引用关系
3.多对多关系:各自先建立各自的表,另外新加一种表关系
七、聚合函数
1.count(列*):统计结果的条数
select count(weight) from student;
上述的最终结果
2.sum(列)函数——求和;
3.avg(列)——求平均值;
4.min(列)——最小值;
5.max(列)——最大值;
他们的用法与上述的第一个的用法是类似的
八、联合查询
1.内连接
三种写法:
方式一:Select*from table1,table2 where table1.xxx=table2.xxx;
方式二:Select*from table1 join table2 on table1.xxx=table2.xxx;
方式三:Select*from table1 inner join table2 on table1.xxx=table2.xxx;
其中需要注意的是在整个过程当中他的整体流程
a.先计算参与表连接的笛卡尔积
b.通过连接条件过滤无效数据
c.加入查询条件得到想要的结果行
d.精简列名得到最终想要查询的列
假设:需要在定义一个表格
进行联合查询创建一个关于学生的成绩表:
create table if not exists score(
id bigint,
name varchar(30),
chinese int,
math int,
foreign key (id) references student(id)
);
在里面进行插入数据:
INSERT INTO score (id, name, chinese, math)
SELECT s.id, s.name, FLOOR(RAND() * 100), FLOOR(RAND() * 100)
FROM student s
LIMIT 20;
运行结果:
假设查出学生的所有的信息:
select*from score,student where score.id = student.id;
最后的结果为:
2.外连接
分为左外连接和右外连接
语法:Select*from table1 left join table2 on table1.xxx=table2.xxx;
Select*from table1 right join table2 on table1.xxx=table2.xxx;
Select*from student left join score on student.id=score.id;
最后的运行结果为:
3.自连接
语法:Select*from table1 t1, table1 t2 where t1.xxx=t2.xxx;
需要时自行使用
原文地址:https://blog.csdn.net/2302_81290080/article/details/144354882
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!