您的位置:首页 > 财经 > 金融 > Mysql的指令及使用

Mysql的指令及使用

2024/11/16 12:49:37 来源:https://blog.csdn.net/qq_35639854/article/details/140506174  浏览:    关键词:Mysql的指令及使用

Mysql的安装可以去官网,本文使用的统一为5.7版本!

本文主要是Mysql的使用,主要是熟悉指令和功能为主!

首先我们要知道Mysql数据库的结构!

1.Mysql基础操作

一个数据库拥有多个库,一个库可以有多个表。

所以我们先学第一个指令create database 名字;

这样我们就可以建立一个库了!

 

例如

然后如果我们要看的数据库则可以使用show databases;

 如果你想删除一个数据库则可以drop database 名字;(慎用!!!)

然后我们如果想用那个数据库就是use 名字;

然后我们选中库以后就可以对数据表进行操作了!

以下是其分类

然后我们就可以来学表操作了!

同样如果我们想查看表也可以使用show tables;

如果我们想具体看一个表的结构可以用desc +名字;

(注意:int后面的11指的是打印的时候占据的最大位宽)

同样也可以删除表,使用drop table +表名;

2.Mysql增删改查(CRUD)

1.新增

insert into 表名 value();

也可以多条插入。

2.查看

select 列名(或者用*代表全部) from 表名;

如果要插入日期,可以如下写法(会被mysql自动传化)。

并且在这个查询过程中还可以进行简单的数学运算,如下图。(这个只是临时表,不会影响数据本体)

取别名

并且也可以去别名

如果我们要得到的是某列数据有多少种结果,我们就需要去查就可以在select后加上distinct.

排序

同样我们经常需要对数据进行排序,则可以使用order by

例如下图就是按照id进行排序(默认是升序)

那如何变成降序呢?只要在后面加上desc即可!

那大家肯定会有疑问,如果对字符串进行排序呢?

答案如下

可是mysql不支持这个功能!

那如果想引入多种排序规则该怎么做呢?方法如下!

筛选

那除了排序之外,我们查询的时候也经常需要进行条件筛选,那又该怎么办呢?

mysql也同样有自己的运算符!

那如果我们要加入限制,该怎么使用呢?只需要在查询的后面用where+条件即可!如下图。

(别名不能被where感知到,即where后面不能用别名)

模糊匹配

分页查询

3.修改

接下来我们来讲修改的语句。

4.删除

delete from 表名 where 条件

3.数据库约束

约束写在创建表的时候写在类型的后面。

下图以not null为例。

主键

 

可是我们每一次插入的时候,不能都要先查一下最后一个id是谁吧,不然太麻烦了。

所以我们就有自增主键的存在了。

外键约束

比如如果我们想用班级id代替代替班级名,那么显然必须保证id和班级一一对应。

所以可以使用foreign key (字段名) references 表名(列名)

(被索引(references)的表必须有主键(本质是内部创建了索引)才可以被引用)

这样父表和子表就会相互约束,子表中不能出现父表中没有对应的值,同样父表中也不能删除子表中存在的值。

4.增删查改进阶操作

如果我们想把查出来的结果也插入到表中该怎么办?

就可以把select和insert组合使用!(保证列数和类型匹配即可)

(可以不同操作之间进行套娃,比如select和select等等,此处不过多枚举了)

5.聚合函数

常见聚合函数

常见的统计总数、计算平均值等操作,可以使用聚合函数来实现,常见的聚合函数有

比如我们要统计行数就可以用count(),写在select后面即可,使用如下

求和函数sum(对字符串无意义),使用如下

其余的就不再过多赘述

GroupBy

如下图

如果我们想查老师的平均工资,直接对salary求平均值显然是不准确的。

所以就需要GroupBy进行分组

GroupBy会按照选定的列将相同的进行分组,这样就准确了。如下图

那么我们能不能对分组查询的进行条件筛选呢?当然可以,不过关键字被更换了。

where会在分组前进行筛查,having会在分组后进行筛查。

下图就是过滤掉分组后工资小于20000的

而下图则先排除张三,算出平均值后再根据having进行筛选

6.联合查询

使用也很简单,直接用select即可,不过from后面跟着要笛卡尔积的两张表即可。

内连接

接下来我们来讲什么叫内外连接。首先看下图两张表。

内连接即是两张表中数据会按照特定条件一一对应,如果没有对应的则不会查询出来。(如下图)

外连接

外连接则是必须保证左表的数据必须出现,哪怕右表没有匹配,则对应为空

右外连接同理

全外连接(mysql不支持,有的数据库支持,这里只是提一下)

子查询

 子查询是指嵌入在其他sql语句中的select语句,也叫嵌套查询(尽量少使用,套娃太多很容易出错),样例如下。

7.合并查询

在实际应用中,为了合并多个 select 的执行结果,可以使用集合操作符 union union all 。使用 UNION 和UNION ALL 时,前后查询的结果集中,字段需要一致。
union
该操作符用于取得两个结果集的并集。当使用该操作符时,会自动去掉结果集中的重复行。
例如下图
union all
该操作符用于取得两个结果集的并集。当使用该操作符时,不会去掉结果集中的重复行。

8.索引

1.1 概念
索引是一种特殊的文件,包含着对数据表里所有记录的引用指针。可以对表中的一列或多列创建索引, 并指定索引的类型,各类索引有各自的数据结构实现。
1.2 作用
数据库中的表、数据、索引之间的关系,类似于书架上的图书、书籍内容和书籍目录的关系。
索引所起的作用类似书籍目录,可用于快速定位、检索数据。
索引对于提高数据库的性能有很大的帮助。
1.3 使用场景
要考虑对数据库表的某列或某几列创建索引,需要考虑以下几点:
数据量较大,且经常对这些列进行条件查询。
该数据库表的插入操作,及对这些列的修改操作频率较低。
索引会占用额外的磁盘空间。
满足以上条件时,考虑对表中的这些字段创建索引,以提高查询效率。
反之,如果非条件查询列,或经常做插入、修改操作,或磁盘空间不足时,不考虑创建索引。
1.4 使用
创建主键约束( PRIMARY KEY )、唯一约束( UNIQUE )、外键约束( FOREIGN KEY )时,会自动创建 对应列的索引。
可以通过show index from 表名查看。
创建索引
对于非主键、非唯一约束、非外键的字段,可以创建普通索引
create index 索引名 on 表名(字段名)
删除索引

drop index 索引名 on 表名;

9.事务

1.事务的概念

事务指逻辑上的一组操作,组成这组操作的各个单元,要么全部成功,要么全部失败。 在不同的环境中,都可以有事务。对应在数据库中,就是数据库事务。

使用
(1)开启事务: start transaction;
(2)执行多条 SQL 语句
(3)回滚或提交: rollback/commit;
说明: rollback 即是全部失败, commit 即是全部成功。
如上图,只有全部实现成功才是成功,否则一个失败就全部操作失败,全部回滚复原!
3.事务隔离级别

如何理解隔离性 1
MySQL 服务可能会同时被多个客户端进程 ( 线程 ) 访问,访问的方式以事务方式进行
一个事务可能由多条 SQL 构成,也就意味着,任何一个事务,都有执行前,执行中,执行后的阶
段。而所谓的原子性,其实就是让用户层,要么看到执行前,要么看到执行后。执行中出现问题,
可以随时回滚。所以单个事务,对用户表现出来的特性,就是原子性。
但,毕竟所有事务都要有个执行过程,那么在多个事务各自执行多个 SQL 的时候,就还是有可能会
出现互相影响的情况。比如:多个事务同时访问同一张表,甚至同一行数据。
就如同你妈妈给你说:你要么别学,要学就学到最好。至于你怎么学,中间有什么困难,你妈妈不
关心。那么你的学习,对你妈妈来讲,就是原子的。那么你学习过程中,很容易受别人干扰,此
时,就需要将你的学习隔离开,保证你的学习环境是健康的。
数据库中,为了保证事务执行过程中尽量不受干扰,就有了一个重要特征:隔离性
数据库中,允许事务受不同程度的干扰,就有了一种重要特征:隔离级别
隔离级别
读未提交【 Read Uncommitted : 在该隔离级别,所有的事务都可以看到其他事务没有提交的
执行结果。(实际生产中不可能使用这种隔离级别的),但是相当于没有任何隔离性,也会有很多
并发问题,如脏读,幻读,不可重复读等,我们上面为了做实验方便,用的就是这个隔离性。
读提交【 Read Committed :该隔离级别是大多数数据库的默认的隔离级别(不是 MySQL
认的)。它满足了隔离的简单定义 : 一个事务只能看到其他的已经提交的事务所做的改变。这种隔离 级别会引起不可重复读,即一个事务执行时,如果多次 select , 可能得到不同的结果。
可重复读【 Repeatable Read : 这是 MySQL 默认的隔离级别,它确保同一个事务,在执行
中,多次读取操作数据时,会看到同样的数据行。但是会有幻读问题。
串行化【 Serializable : 这是事务的最高隔离级别,它通过强制事务排序,使之不可能相互冲突,
从而解决了幻读的问题。它在每个读的数据行上面加上共享锁,。但是可能会导致超时和锁竞争
(这种隔离级别太极端,实际生产基本不使用)
隔离级别如何实现:隔离,基本都是通过锁实现的,不同的隔离级别,锁的使用是不同的。常见有,表 锁,行锁,读锁,写锁,间隙锁(GAP),Next-Key (GAP+ 行锁 ) 等。不过,我们目前现有这个认识就行, 先关注上层使用。

10.JDBC编程

JDBC ,即 Java Database Connectivity java 数据库连接。是一种用于执行 SQL 语句的 Java API ,它是 Java中的数据库连接规范。这个 API java.sql.*,javax.sql.* 包中的一些类和接口组成,它为 Java开发人员操作数据库提供了一个标准的API ,可以为多种关系数据库提供统一访问。
首先要引入 数据库驱动包
https://mvnrepository.com/artifact/mysql/mysql-connector-java/5.1.49
点击上面的网址下载即可。
然后把jar包引入项目。
然后就可以进行远程操作了,比如下面就是一条插入的sql指令。
但是这个代码有个问题,如果有人把名字取成,'或者直接drop databases等操作,会产生不可想象的后果。
所以我们必须要能够避免这种情况,于是我们就可以使用替换去解决这个问题。
如果执行的是询问,则返回值就是那个表,使用如下。
至此,关于数据库的基本认识就差不多了,本文到此结束,感谢观看!

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com