Mysq_Note4

1.科学计算,字符串处理,和条件判断

1.1数学函数

12
ROUND(X,D)X 表示要处理的数,D 表示保留的小数位数,处理的方式是四舍五入。ROUND(X) 表示保留 0 位小数
CEIL()向上取整
FLOOR()向下取整
ABS()绝对值
MOD()取余

注意:

1.round(x,0)中的x为负数时五入的值会更小,四舍得值会更大

1.2字符函数

函数含义
concat(s1,s2)表示把字符串 s1、s2……拼接起来,组成一个字符串
cast(表达式 as char)表示将表达式的值转换成字符串
char_length(字符串)表示获取字符串的长度
space表示获取一个由n个空格组成的字符串

注意:

1,每个汉字打印的时候占两个字符长度,但是这个函数获取的是汉字的个数

1.3条件判断函数

函数含义
ifnull(v1,v2)表示如果 V1 的值不为空值,则返回 V1,否则返回 V2
if(表达式,v1,v2)如果表达式为真(TRUE),则返回 V1,否则返回 V2
isnull(字段)判断字段是否为空

1.4思考题

1.如果不用 FLOOR()计算会员积分,有没有其他办法来实现会员积分的计算

以假设actualvalue>=0,这样的话就可以使用求余函数MOD来代替FLOOR:
FLOOR(acutalvalue)替换成actualvalue - MOD(actualvalue,1)

2.索引

2.1定义

相当于图书馆的检索目录,它是帮助MySQL系统快速检索数据的一种存储结构

2.2优点

我们可以在索引中按照查询条件,检索索引字段的值,然后快速定位数据记录的位置,这样就不需要遍历整个数据表

2.3单字索引

创建单字索引

方法一

create index 索引名 on table 表名 (字段);

方法二

create table 表名(
字段 数据类型,
{index | key }索引(字段)    
)

方法三

alter table 表名 add {index | key} 索引名 (字段)

单字段索引的作用原理

EXPLAIN SELECT
quantity,price,transdate
FROM
demo.trans
WHERE
transdate > '2020-12-12'
AND transdate < '2020-12-13'
AND itemnumber = 100
字段含义解释
id1
select_typesimple
tabletrans
partitionsnull
typerange使用索引查询特定范围的数据记录
possible_keysindex_trans可以选择的索引是 index_trans
keyindex_trans实际选择的索引是 index_trans
key_len6
refNULL
rows5411表示需要读取的记录数
filtered10.00
extraUsing index condition; Using where; Using MRR第一个是执行时使用了索引
第二个是执行时通过 WHERE 条件筛选
第三个是使用了顺序磁盘读取的策略

注意

1.在选择索引字段的时候,要选择那些经常被用做筛选条件的字段

2.1.如果有多个索引,而这些索引的字段同时作为筛选字段出现在查询中的时候,MySQL 会选择使用最优的索引来执行查询操作

2.4组合索引

创建组合索引

方法一

create index 索引 on 表名(字段1,字段2,...)

方法二

create table 表名(
字段 数据类型,
{index | key }索引名(字段1,字段2,...)
)

方法三

alter table 表名 add {index | key} 索引 (字段1,字段2,...)

组合段索引的作用原理

1.组合索引的多个字段是有序的,遵循左对齐的原则 , 筛选的条件也要遵循从左向右的原则,如果中断,那么断点后面的条件就没有办法利用索引了

2.如果筛选的是一个范围,如果没有办法无法精确定位也相当于中断索引的使用

3.如果只用组合索引的一部分,效果没有单字段索引那么好

4.MySQL 最多支持由 16 个字段组成的组合索引

2.5总结

删除索引

DROP INDEX 索引名 ON 表名;

删除主键索引

ALTER TABLE 表名 DROP PRIMARY KEY

优缺点

优点缺点
提升查询的效率索引需要单独占用存储空间
数据操作上的开销

2.6思考

1.假如我有一个单品销售统计表,包括门店编号、销售日期(年月日),商品编号,销售数量,销售金额,成本,毛利,而用户经常需要对销售情况进行查询,你会对这个表建什么样的索引呢为什么?

我会选择门店编号,销售日期,商品编号,销售金额这些字段分别创建索引,理由是这些字段经常会被用作筛选条件

3.事务

3.1定义

DML 操作 : Data Manipulation Language 的缩写,包括 SELECT、INSERT、UPDATE 和 DELETE

start transaction begin (开始事务)
一组DML语句
commit (提交事务)
rollback (事务回滚)

3.2 事务的四种特性

特性含义
原子性(atomicity)事务中的操作要么全部执行,要么全部不执行
一致性(consistency)表示数据的完整性不会因为事务的执行而破坏
隔离性(isolation)不同事务之间互不干扰
持久性(durability)事务对数据的修改是永久有效的

注意

1.事务中即使有错误的语句,任然往下执行

  1. row_count为-1表示sql执行失败

示例

delimiter //
create procedure demo.mytest()
begin
--定义sql操作发生错误时自动回滚
declare exit handle for sqlexception rollack
--开始事务
start transaction
insert into demo.mytrans values(1,5);
UPDATE demo.inventory SET invquantity = invquantity - 5;
commit;

end
//
delimiter ;

3.3事务的隔离性

隔离等级含义
read uncommited可以读取事务中还未提交的被更改的数据
read commited只能读取事务中已经提交的被更改的数据
repeatable read表示一个事务中,对一个数据读取的值,永远跟第一次读取的值一致,不受其他事务中数据操作的影响.这也是 MySQL 的默认选项
表示任何一个事务,一旦对某一个数据进行了任何操作,那么,一直到这个事务结束,MySQL 都会把这个数据锁住,禁止其他事务对这个数据进行任何操作

注意

1.涉及到金额,建议采用最高级别SERIALIZABLE

2.不支持DDL语句进行事务回滚

3.read committed甚至于read uncommitted,可以用于展示大量数据的应用中,这样的场景中数据一致性的重要性较低,但可以节省锁的开销,提高查询的效率, repeatable read主要用于关键数据的处理,比如并发的数据修改操作,一般要用到repeatable read,甚至是serializable

3.4 思考题

1.事务就是确保事务中的数据操作,要么全部正确执行,要么全部失败,你觉得这句话对吗?为什么

这种说法是不对的,事务会确保事务处理中的操作要么全部执行,要么全部不执行,执行中遇到错误,是继续还是回滚,则需要程序员来处理
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值