MYSQL学习

1 检测(limit)

select * from Book limit 1,2;

在表book中从第一行开始向后边查出2行输出

在这里插入图片描述

2 排序(order by)

select * from Book order by Bprice desc,Bnum;

按照价格降序排序,当价格一致时按照数量来升序排序(价格为第一排序规则,数量为第二)

在这里插入图片描述

select * from Book order by Bnum,Bprice;

按照数量和价格升序排序,

在这里插入图片描述

select * from Book order by Bnum,Bprice desc limit 3;

按照数量和价格降序排序后只显示前三行的内容

在这里插入图片描述

3 更新(update)

update Book set Bprice=50 where Bno=56204;
update 表名 set 字段名1='',字段名2='',... where 字段名 = '';//更新多个字段

把Book表中Bno=56204的Bprice更新成50

在这里插入图片描述

4 过滤数据(where语句的使用)

操作符说明
=等于
<>不等于
!=不等于
<下雨
<=小于等于
>大于
>=大于等于
between and在指定的两个值之间**(这个是闭区间)**

完成的数据表

在这里插入图片描述

查看pro_id<>1002的pro_name和pro_price

select pro_name,pro_price from products where pro_id<>1002;

在这里插入图片描述

查看pro_price>=6.3的数据

select pro_name,pro_price from products where pro_price>=6.3;

在这里插入图片描述

查看价格在3.2到9.12之间的商品,晒选出来后按照价格降序排列

在同时使用where和order by语句的时候,应该让order by位于where之后,不然的话会出现错误

select pro_name,pro_price from products where pro_price between 3.2 and 9.12 order by pro_price desc;

在这里插入图片描述

查看价格为空商品的id

select pro_id from products where pro_price is null;

在这里插入图片描述

5 数据过滤(where 、and、 or、in、not in)

5.1 AND操作符

select pro_name,pro_price from products where pro_id = 1002 and Pro_price >=5;

查看pro_id=1002且pro_price>=5的商品

在这里插入图片描述

5.2 OR操作符和IN操作符

OR操作符

select pro_name,pro_price from products where pro_id = 1002 or pro_id = 1003;

查看id为1002或者是1003的商品

在这里插入图片描述

select pro_name,pro_price from products where (pro_id = 1002 or pro_id = 1003) and pro_price >= 5;

查看id为1002或者是1003且价格都要大于5的商品

解释:加括号的原因,因为AND的优先级大于OR,但是括号的优先级大于AND和OR

在这里插入图片描述

IN操作符

**解释:**IN操作符用来指定条件范围,范围中的每个条件都可以进行匹配,值都在IN后边的括号里边并用逗号隔开

select pro_name,pro_price from products where pro_id in(1002,1003)  and pro_price >= 5;

查看id为1002或者是1003且价格都要大于5的商品

在这里插入图片描述

**说明:**我们可以看出在这个语句中IN和OR的作用完全一样,但是用IN操作符我们可以更加直观的看出来。

5.3 NOT IN操作符

其实NOT IN和IN的用法差不多

 select pro_id,pro_name,pro_price from products where pro_id not in(1002,1003) order by pro_price;

查看处理id为1002和1003以为的商品,并按价格升序排列

在这里插入图片描述

6 通配符(’%’、’_’)

6.1 通配符 ‘%’

select pro_id,pro_name from products where pro_name like 'k%';

查询出名字以字符’K’开头的商品信息。

解释:‘K%’ 表示告诉MySQL接受K之后的任意字符,不管它有多少字符

在这里插入图片描述

select pro_id,pro_name from products where pro_name like '%F%';

查询出名字中含有字符F的商品

解释:‘%F%’ 表示匹配名字中任何位置有字符F的文本的信息,不管它之前和之后出现什么字符。

在这里插入图片描述

select pro_id,pro_name from products where pro_name like 'F%D';

查询名字中以字符F开头,以字符D结尾的商品

在这里插入图片描述

6.2 通配符 ‘_’

通配符 ‘_’ 只能匹配一个字符,而且是必须要匹配一个字符,不能多也不能少

select pro_id,pro_name from products where pro_name like 'SFS_'; 

使用通配符 ‘_’ 查询的结果

在这里插入图片描述

使用通配符 ‘%’ 查询的结果

select pro_id,pro_name from products where pro_name like 'SFS%';

在这里插入图片描述

7 正则表达式(regexp)

select pro_id,pro_name from products where pro_name regexp 'SD' order by pro_name

查询名字中含有SD的商品

**和like相比:**如果用 like 的话需要在’SD’的前后都加上通配符’%'才可以

在这里插入图片描述

select pro_id,pro_name from products where pro_name regexp '.000' order by pro_name;

#上边代码等同于
select pro_id,pro_name from products where pro_name regexp '1000|2000' order by pro_name;

解释:“|” 相当于or

**说明:**这里使用正则表达式.000,. 是正则表达式语言的一个特殊字符,它表示匹配任意一个字符,因此1000和2000都匹配回来了。

在这里插入图片描述

正则表达式是不区分大小写的,如果想要区分大小写可以加上关键字BINARY,例如: where pro_name regexp binary 'HGFD .000’

select pro_id,pro_name from products where pro_name regexp '[1-3] ton' order by pro_name;

解释:[1-3] ton 等于 ‘1 ton |2 ton |3 ton’

在这里插入图片描述

select pro_name from products where pro_name regexp '^S';

查看pro_name字段中以‘S’开头的所有数据

在这里插入图片描述

select pro_name from products where pro_name regexp 'D$';

查看pro_name字段中以‘D’结尾的所有数据

在这里插入图片描述

select pro_name from products where pro_name regexp '[[:digit:]]{4}';

[:digit:]是0-9 {4}表示是个[0-9] [[:digit:]]{4}等同于[0-9] |[0-9] |[0-9]|[0-9]

在这里插入图片描述

8、事务处理

开始事务:begin或者是start transaction

创建保护节点:savrpoint 节点名称

提交事务:commit

回滚:rollback

事务必须满足的四个条件(ACID):原子性(也称为不可分割个性)、一致性、隔离性(也称为独立性)、持久性

  • 原子性:一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。
  • 一致性:在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的资料必须完全符合所有的预设规则,这包含资料的精确度、串联性以及后续数据库可以自发性地完成预定的工作。
  • 隔离性:数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。事务隔离分为不同级别,包括读未提交(Read uncommitted)、读提交(read committed)、可重复读(repeatable read)和串行化(Serializable)。
  • 持久性:事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢

在MySQL命令默认设置下,事务时自动提交的,所以要先把自动提交事务给关掉。

**或者使用开始事务的两条命令:begin或者是start transaction**来开启事务

查看事务是否是开启的

show variables like 'autocommit'

在这里插入图片描述

关闭事务可以用

set autocommit = 0; #禁止自动提交
set autocommit = 1; #开启自动提交

在这里插入图片描述

下面看一个例子,是通过向一个空表中插入数据,通过使用创建保护节点来回滚

在这里插入图片描述

在这里插入图片描述

这个例子是通过commit提交事务来回滚的

在这一步commit保证了数据的持久性,它将数据写进了磁盘中。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值