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
保证了数据的持久性,它将数据写进了磁盘中。