day28_mysql

news2024/10/5 13:09:28

今日内容

零、 复习昨日
一、函数[了解,会用]
二、事务[重点,理解,面试]
三、索引[重点,理解,面试]
四、存储引擎
五、数据库范式
六、其他

零、 复习昨日

见晨考

一、函数

  • 字符串函数
  • 数学函数
  • 日期函数
  • 日期-字符串转换函数
  • 流程函数

1.1 字符串函数

函数解释
CHARSET(str)返回字串字符集
CONCAT (string2 [,... ]) 连接字串
INSTR (string ,substring )返回substring在string中出现的位置,没有返回0
UCASE (string2 )转换成大写
LCASE (string2 )转换成小写
LEFT (string2 ,length )从string2中的左边起取length个字符
LENGTH (string )string长度
REPLACE (str ,search_str ,replace_str )在str中用replace_str替换search_str
STRCMP (string1 ,string2 )逐字符比较两字串大小,
SUBSTRING (str , position [,length ])从str的position开始,取length个字符
LTRIM (string2 )
RTRIM (string2 ) trim
去除前端空格或后端空格
-- 今天讲的这些函数,可以应用在CRUD中都行
-- =========== 字符串函数 ============
select charset('abc'); -- 返回字符集
select charset('abc') from dual; -- from dual,只是为了补全sql语句
-- concat(str1,....) 连接字符串 【重要】
select concat('a','1','b','2') from dual;
select concat('a','1','b','2'),sid,sname from stu;
select concat(sid,sname),sid,sname from stu;
select concat('我叫',sname,',今年',age,'明年',age+1,'岁') from stu;
-- instr(string,substring),返回substring在string中出现的位置,没有返回 0
select instr('java','c');
select instr(sname,'三') from stu;

-- 转大写,转小写
select ucase('abc'),lcase('abc');
-- left(string2,length) 从 string2 中的左边起取 length 个字符
select left('java',2)
select left(sname,1) from stu; -- 取出姓氏

-- length 获得长度 , utf8中,一个中文三个字节
select length(sname),sname from stu;
select length('abc');

-- 替换
-- REPLACE (str ,search_str ,replace_str ) 在 str 中用 replace_str 替换 search_str
select replace('java','av','AV');
select replace(sname,'三','叁') from stu;

-- SUBSTRING (str , position [,length ] 截取
select substring('java',2); -- 从第2位,取到末尾
select substring('java',2,2); -- 从第2位,取2个
-- 取出stu表中姓名,姓,名
select sname 姓名 ,left(sname,1),substring(sname,2)from stu;
-- 插入时截取部分数据插入
insert into stu (sname) value('java');
insert into stu (sname) value(substring('java',2,2));
-- 更新时取部分数据更新
update stu set sname = left('史密斯',1) where sid = 1011

-- ltrim rtrim trim 虑空
select ltrim(' java '),rtrim(' java '),trim(' java ');
select length(' java '),length(ltrim(' java ')),length(rtrim(' java ')),length(trim(' java '));
-- 插入时使用虑空
insert into pet(id,nick,weight)
values(64,trim(' jerry '),1)

2.2 数学函数

函数解释
ABS (number2 )绝对值
CEILING (number2 )向上取整
FLOOR (number2 )向下取整
FORMAT (number,decimal_places ) 保留小数位数
LEAST (number , number2 [,…])求最小值
MOD (numerator ,denominator )求余
RAND([seed]) RAND([seed]),seed是种子,可不写.写了随机数固定
ROUND(x,[d]) 将x四舍五入,d是保留的位数,可不写
TRUNCATE(X,D)截取
-- =========== 数学函数 ============
select abs(-1);
select ceiling(1.1),floor(1.1);
-- 数字格式化 fromat(x,d) x是原始数据,d是保留的小数位数(会四舍五入)
select format(100,1);
select format(100.15,1);
select format(100.14,1);

select avg(score) from stu;
select format(avg(score),1) from stu;

-- 数字格式化truncate(x,d) x是原始数据,d是保留的小数位数(不会四舍五入)
select truncate(100.9,0);
select truncate(100.19,1);
select truncate(100.11,1);

-- 四舍五入 round(x[,d]) x是必填,原始数据
select round(100.91); -- 默认是将小数四舍五入后变整数
select round(100.91,1); -- 参数2是保留小数位数
select round(100.99,1); 
select round(100.999,2); 

-- 随机数 rand() 0-1之间的小数
select rand();
select ceiling(rand() * 30);
insert into tb_1 (age) values (ceiling(rand() * 30))

2.3 日期函数【重要】

函数解释
SYSDATE()当前时间
ADDTIME (date2 ,time_interval )将time_interval加到date2
CURRENT_DATE ( )当前日期
CURRENT_TIME ( )当前时间
CURRENT_TIMESTAMP ( )当前时间戳
DATE (datetime )返回datetime的日期部分
DATE_ADD (date2 , INTERVAL d_value d_type )在date2中加上日期或时间
DATE_SUB (date2 , INTERVAL d_value d_type )在date2上减去一个时间
DATEDIFF (date1 ,date2 )两个日期差
NOW ( )当前时间
YEAR|MONTH|DATE (datetime )年月日
-- =========== 日期函数 ============
-- 获得当前日期时间
select now(); -- now() 当前日期和时间
select sysdate(); -- sysdate()当前系统日期和时间
select current_date(); -- 获得当前日期
select current_time();-- 获得时分秒
select current_timestamp();-- 获得当前时间戳
update tb_order set order_time = now() where oid = 1;

-- 单独获得年,月,日
select year(now());
select year('1970-01-01');
select year(order_time) from tb_order
select month('1970-01-01');
select day('1970-01-01');
-- 查询2023年的订单
select * from tb_order where year(order_time) = 2000

-- 日期运算
-- 时间相加 ADDTIME(date2,time_interval)将time_interval加到date2
select addtime('10:01:58',3); -- 加时间,单位是秒
select addtime('10:01:58','02:01:03'); -- 加时分秒

-- 日期相加 adddate(date2,days),只能加天
select adddate('2000-01-01',1);-- 加日期,单位是天
-- 日期相加,date_add(date2,INTERVAL 值 单位 )
select date_add('2000-01-01',interval 1 day);
select date_add('2000-01-01',interval 1 month);
select date_add('2000-01-01',interval 1 year);
-- 日期相减 date_sub(date2 , INTERVAL d_value d_type )
select date_sub('2000-10-03',interval 1 day);
select date_sub('2000-10-03',interval 1 month);
select date_sub('2000-10-03',interval 1 year);
-- 日期之差 datediff(date,date2) 多少天
select datediff('2022-05-08',now())
-- 当月生日人数
select count(*) from t10 where month(birthday) = month(now())

2.4 日期字符串转换函数【重要】

函数解释说明
date_format(日期,模板)日期 --> 字符串格式化
str_to_date(字符串,模板)字符串 --> 日期解析

常见的模板:

  • %Y-%m-%d 2000-01-02
  • %Y年%m月%d日 2000年02月02日

%Y:代表4位的年份

%y:代表2为的年份

%m:代表月, 格式为(01……12)

%c:代表月, 格式为(1……12)

%d:代表月份中的天数,格式为(00……31)

%e:代表月份中的天数, 格式为(0……31)

%H:代表小时,格式为(00……23)

%k:代表 小时,格式为(0……23)

%h: 代表小时,格式为(01……12)

%I: 代表小时,格式为(01……12)

%l :代表小时,格式为(1……12)

%i: 代表分钟, 格式为(00……59)

%r:代表 时间,格式为12 小时(hh:mm:ss [AP]M)

%T:代表 时间,格式为24 小时(hh:mm:ss)

%S:代表 秒,格式为(00……59)

%s:代表 秒,格式为(00……59)

-- =========== 日期/字符串转换函数 ============
/*
 日期 --> 字符串  date_format(date,'%Y-%m-%d')
 字符串 --> 日期 str_to_date('datestr','%Y-%m-%d') 
 ---------------------
 日期模板
 %Y年 %m月 %d日
 %H时 %i分钟 %S秒
*/
select date_format(now(),'%Y年%m月%d日')
select str_to_date('2022年11月18日','%Y年%m月%d日')

insert into t10 (id,birthday) value (1,str_to_date('2020-01-01','%Y-%m-%d'))

2.5 流程函数【重要!!】

函数解释
IF(expr1,expr2,expr3)如果expr1为真,则返回expr2,否则返回expr3
IFNULL(expr1,expr2)如果 expr1不是NULL,则返回expr1,否则返回expr2; 一般用来替换NULL值,因为NULL值是不能参加运算的
CASE [value] WHEN [value1] THEN[result1]… ELSE[default] END如果value等于value1, 返回result1,否则返回default
CASE WHEN [expr1] THEN [result1]… ELSE [default] END如果expr是真, 返回result1,否则返回default
-- inst(string,substring) 查找substring在string中的位置,找不到返回0
select if(instr('java','big') > 0,'存在','不存在');
-- 查询学生姓名,已经是否名字含三
select 
	sname,
	if(instr(sname,'三') > 0,'是','否') 
		as 是否含三
from stu;
-- ================== 流程函数 ================
select if(1>0,'真','false') from dual;

-- 获得所有人的平均分
select sum(score) / count(sid) from stu;
select avg(if(score is null,0,score)) from stu;
-- 查询学生学号,成绩,以及是否及格(>=60)
select sid , score , if(score >= 60,'及格','不及格') 是否及格 from stu;
-- 查询学生学号,成绩,假如没有成绩显示缺考
select sid , if(score is null,'缺考',score) from stu;

-- 计算年龄大于50的人数
select count(sid) from stu where age > 50
select count(if(age < 50,null,sid)) from stu

-- 查询学生学号,成绩,假如没有成绩显示缺考
select sid , ifnull(score,'缺考') from stu;
-- 范围判断
-- CASE WHEN [expr1] THEN [result1]… ELSE [default] END	如果expr是真, 返回result1,否则返回default
-- 查询学生id,姓名,成绩,及等级(60以下不及格,60-70,及格,71-80,中等,81-90良好,91-100优秀)
select sid,sname,score,case
when score < 60 then '不及格'
when score <= 70 then '及格'
when score <= 80 then '中等'
when score <= 90 then '良好'
else '优秀'
end as 等级
from stu

二、事务[面试]

事务 transaction tx

2.1 介绍

什么是事务?

事务是一个原子操作。是一个最小执行单元。可以由一个或多个SQL语句组成,在同一个事务当中,所有的SQL语句都成功执行时,整个事务成功,有一个SQL语句执行失败,整个事务都执行失败。(同时成功,或同时失败)


场景:

银行转账操作,A账号要给B账户转钱. A原有1000块,B原有1000块.A转账给B 100元

A的钱要减少,B的钱要增多

update A set money = money - 100 where id = a

-- 服务器出现异常,导致后面的sql没有执行

update B set money = money + 100 where id = b

2.2 mysql中事务

  • 目前使用的mysql支持事务操作
  • mysql中的事务是每个sql语句都是单独事务,且自动提交事务的
    • 通过命令查询当前事务的提交方式 SHOW VARIABLES like ‘autocommit’
    • 通过命令设置自动提交关闭 set autocommit = off / 或者= 0 关
    • set autocommit = on / 或者= 1 开
  • 事务的操作
    • 开启事务 start transaction 或者 begin
    • 提交事务 commit
    • 回滚事务 rollback

2.3 演示事务

准备数据

CREATE TABLE `account` (
 `id` int(50) NOT NULL,
 `name` varchar(50) NOT NULL,
 `money` int(255) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO account VALUES(1,'张三',1000);
INSERT INTO account VALUES(2,'李四',1000);
-- =============================================
-- 开启事务
start transaction;
-- 开始转账
update account set money = money - 100 where id = 1
-- 出大事了,后面执行不了
update account set money = money + 100 where id = 2
-- 如果一切正常,提交事务
commit;
-- 服务器出现异常,要回滚
rollback;
-- 查询当前事务提交方式
SHOW VARIABLES  like 'autocommit';
-- 手动控制事务,自动提交关闭
set autocommit = off;

-- ============= java 伪代码 ==================
try{
 conn.setAutocommit(false); -- 自动提交,开启手动事务
 conn.execute("update ....")
 System.out.print(1/0)
 conn.execute("update ....")
 conn.commit();   -- 提交
}catch(Exception e) { -- 如果有异常
 conn.rollback();  -- 回滚
}

-- 后面学框架,只需要配置一下就ok

2.4 事务特性

事务的特性(ACID)

  • 原子性(Atomicity):指事务的整个操作是一个整体,要么都成功,要么都失败
  • 一致性(Consistency):事务必须使数据库从一个一致性状态变换到另外一个一致 性状态。转账前和转账后的总金额不变。
  • 隔离性(Isolation):事务的隔离性是多个用户并发访问数据库时,数据库为每一 个用户开启的事务,不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离。
  • 持久性(Durability):指一个事务一旦被提交,它对数据库中数据的改变就是永 久性的,接下来即使数据库发生故障也不应该对其有任何影响。

image-20230508161105254

2.5 事务的隔离机制

数据库有不同的隔离机制/隔离级别

  1. 读未提交-READ UNCOMMITTED: 赃读、不可重复读、虚读都有可能发生。

  2. 读已提交-READ COMMITTED: 避免赃读。不可重复读、虚读都有可能发生。

    (oracle 默认的)

  3. **可重复读-**REPEATABLE READ:避免赃读、不可重复读。虚读有可能发生。

    (mysql 默认),行锁

  4. **串行化-**SERIALIZABLE: 避免赃读、不可重复读、虚读。

    串行化,其实是表锁

查看当前数据库的隔离级别: SELECT @@TX_ISOLATION;

更改当前的事务隔离级别:

SET [glogal | session] TRANSACTION ISOLATION LEVEL 四个级别之一。

赃读:指一个事务读取了另一个事务未提交的数据。

对于两个事物 T1, T2, T1 读取了已经被 T2 更新但还没有被提交的字段.  之后, 若 T2 回滚, T1读取的内容就是临时且无效的.  

不可重复读:在一个事务内读取表中的某一行数据,多次读取结果不同。一个事务读取到了另一个事务提交后的数据。(update)

  对于两个事物 T1, T2, T1 读取了一个字段, 然后 T2 更新了该字段.  之后, T1再次读取同一个字段, 值就不同了.  

虚读(幻读):是指在一个事务内读取到了别的事务插入的数据,导致前后读取不一致。 (insert)

对于两个事物 T1, T2, T1 从一个表中读取了一个字段, 然后 T2 在该表中  插入了一些新的行. 之后, 如果 T1 再次读取同一个表, 就会多出几行

总结

1 什么是事务
2 mysql事务怎么操作
3 事务什么特点
4 什么是事务隔离
5 有哪些级别,简单解释
6 mysql默认什么级别

三、 索引[面试]

是什么?

​ 索引是一种数据结构,可以更方便查询数据.

作用?

​ 提高查询效率.

索引的分类

  • 主键索引:在数据表的主键字段创建的索引,这个字段必须被 primary key 修饰, 每张表只能有一个主键
  • 唯一索引:在数据表中的唯一列创建的索引(unique),此列的所有值只能出现一次, 可以为 NULL
  • 普通索引:在普通字段上创建的索引,没有唯一性的限制
  • 复合索引:两个及以上字段联合起来创建的索引
  • 全文索引

索引的使用

  • 创建普通索引
    • create index 索引名 on 表名(列);
    • ps: 如果表中已经有大量数据,再创建索引,也很耗时
  • 命中索引, select 语句中 where条件得使用索引列
  • 删除 drop index 索引名 on 表名;

演示

准备了一个表,表有300w条数据, 没有索引时查询

select count(id) from tb_index_test;

select * from tb_index_test where id = 2341234;

-- 模糊查询不会命中索引
select * from tb_index_test where name like '%2341234%';
-- 命中索引
select * from tb_index_test where name = '测试2341234';

-- 创建索引
create index name_index on tb_index_test(name);
-- 删除索引
drop index name_index on tb_index_test

image-20221119104759575

索引优缺点

  • 优点: 根据索引查数据很快

  • 缺点: 索引建立,删除,更新很慢. 如果对索引列经常增删改,也会效率很慢

    ​ 索引本身也是一种数据结构,也会占磁盘空间

索引使用需要注意:

  • 不是给所有列都加索引,哪些列经常会当做条件去查询,那就设置索引
  • 如何命中索引? where后的条件要使用索引字段
  • 索引建立后,尽量不要对索引列进行增删改,因为修改该列同时也要修改索引

mysql索引的底层结构是B+树, 后续慢慢了解一下

扩展阅读:
MySQL | 稀客大大 (heyige.cn)
MYSQL索引连环18问 | 稀客大大 (heyige.cn)

MySQL索引
敖 丙的博客-CSDN博客

四、存储引擎[了解]

存储引擎是数据库存储数据的一种格式.

引擎分类

image-20221119110954812

MyISAM 和 InnoDB 的区别有哪些:

  • InnoDB 支持事务,MyISAM 不支持
  • InnoDB 支持外键,而 MyISAM 不支持
  • InnoDB 是聚集索引,数据文件是和索引绑在一起的,必须要有主键,通过主键索引效率很高;MyISAM 是非聚集索引,数据文件是分离的,索引保存的是数据文件的指针,主键索引和辅助索引是独立的。
  • Innodb 不支持全文索引,而 MyISAM 支持全文索引,查询效率上 MyISAM 要高;
  • InnoDB 不保存表的具体行数,MyISAM 用一个变量保存了整个表的行数。
  • MyISAM 采用表级锁(table-level locking);InnoDB 支持行级锁(row-level locking)和表级锁,默认为行级锁。

五、数据库设计三范式

第一范式:要求数据表中的字段(列)不可再分(原子性)

image-20221119111716760

第二范式:不存在非关键字段对关键字段的部分依赖

ps: 主要是针对联合主键,非主键不能只依赖联合主键的一部分

  • 联合主键,即多个列组成的主键

image-20221119112344955

image-20221119112416639

第三范式:不存在非关键字段之间的传递依赖

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EUiU9VpI-1683549024240)(C:/Users/qiush/AppData/Roaming/Typora/typora-user-images/image-20230317174509549.png)]

六、其他

ER图 Entry-relationship 实体关系图

  • 属性是椭圆
  • 实体是矩形
  • 关联是实线
  • 关联关系是菱形

image-20230508174249029

数据库还有视图、触发器、存储过程、存储函数、权限控制,用户管理等知识,自行学习。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/503317.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一个简单的watch以及ESModule导入和解构的区别

背景 最近写了个很有意思的方法&#xff0c;感觉还蛮不错的就分享一下。起先是我在写calss组件的时候遇到一个问题&#xff0c;我需要监听一个导入的值&#xff0c;导入的值最开始是undefined&#xff0c;经过异步操作以后会得到一个新的值&#xff0c;而我需要在这个class组件…

[echarts] legend icon 自定义的几种方式

echarts 官方配置项 地址 一、默认 图例项的 icon circle, rect, roundRect, triangle, diamond, pin, arrow, none legend: {top: 5%,left: center,itemWidth: 20,itemHeight: 20,data: [{icon: circle, name: 搜索引擎},{icon: rect, name: 直接访问},{icon: roundRect, n…

分布式系统---MapReduce实现(Go语言)

一、说明 本次实验是基于MIT-6.824的课程&#xff0c;详情请参见官网主页下载源代码 二、MapReduce原理 2.1 经典的分布式模型 MapReduce是经典的分布式模型。通过Map函数和Reduce函数实现。 分布式计算&#xff0c;就是利用多台机器&#xff0c;完成一个任务。关于分布式…

算法第一天力扣---2651. 计算列车到站时间

1.题目要求&#xff1a; 给你一个正整数 arrivalTime 表示列车正点到站的时间&#xff08;单位&#xff1a;小时&#xff09;&#xff0c;另给你一个正整数 delayedTime 表示列车延误的小时数。 返回列车实际到站的时间。 注意&#xff0c;该问题中的时间采用 24 小时制。 示…

让ChatGPT猜你喜欢——ChatGPT后面的推荐系统

Chat GPT的大热&#xff0c;让人们的视线又一次聚焦于“人工智能”领域。通过与用户持续对话的形式&#xff0c;更加丰富的数据会不断滚动“雪球”&#xff0c;让Chat GPT的回答变得越来越智能&#xff0c;越来越接近用户最想要的答案。ChatGPT能否颠覆当下的推荐系统范式&…

第三章 灰度变换与空间滤波

第三章 灰度变换与空间滤波 3.1背景知识 ​ 空间域指图像平面本身。变换域的图像处理首先把一幅图像变换到变换域&#xff0c;在变换域中进行处理&#xff0c;然后通过反变换把处理结果返回到空间域。空间域处理主要分为灰度变换与空间滤波。 3.1.1 灰度变换和空间滤波基础 …

cmcc_simplerop

1,三连 2&#xff0c;IDA分析 溢出点&#xff1a; 偏移&#xff1a;0x144(错误) 这里动态重新测试了一下偏移&#xff1a; 正确偏移&#xff1a;0x20 3&#xff0c;找ROP 思路&#xff1a; 1、找系统调用号 2、ROPgadget找寄存器 3、写入/bin/sh ROPgadget --binary simpler…

7-2使用Redis构建任务队列

目录 7-2使用Redis构建任务队列 第1关&#xff1a;先进先出任务队列 1、rpush/lpush命令&#xff1a;rpush(name,values[values…]) 2、blpop&#xff1a;blpop(keys, timeout)和 lpop/rpop&#xff1a;lpop(name) 删并返回删除值 3、lpushx/rpushx&#xff1a;lpushx(name…

使用CKKS全同态求近似倒数(近似乘法逆元)

求倒数的算法 两个数互为倒数&#xff0c;是说这两个数乘起来等1.比如a和b互为倒数&#xff0c;那么ab1. 5的倒数是0.2&#xff0c;我们可以很简单的求出来&#xff0c;但是如何在密文域中求一个数的倒数呢&#xff1f; 文章《An investigation of complex operations with …

C#自适应布局

注意事项&#xff1a;不要在Form1中添加任何布局&#xff0c;页面背景不设置图片 步骤&#xff1a; 1、在项目中添加AutoWindowsSize.cs类&#xff0c;内容如下&#xff1a; using System; using System.Collections.Generic; using System.ComponentModel; using System.Da…

2.2 掌握 NumPy 矩阵与通用函数

2.2 掌握 NumPy 矩阵与通用函数 2.2.1 创建NumPy矩阵创建NumPy矩阵矩阵的运算矩阵的属性 2.2.2 掌握ufunc函数1、常用的ufunc函数运算2、ufunc函数的广播机制 2.2.1 创建NumPy矩阵 创建NumPy矩阵 1、使用mat函数创建矩阵&#xff1a; matr1 np.mat(“1 2 3;4 5 6;7 8 9”) 2…

casbin轻量级的基于配置的授权框架

简介 Casbin是一个强大的、高效的开源访问控制框架&#xff0c;其权限管理机制支持多种访问控制模型。 Casbin提供了一个执行者 根据提供给执行者的策略和模型文件验证传入的请求。再根据对应的配置授权策略&#xff0c;验证请求判断释放那些行动。 在 Casbin 中, 访问控制模…

由于找不到vcomp140.dll无法继续执行代码,解决方法全攻略

如何解决找不到vcomp140.dll错误&#xff1f;在使用某些软件或者游戏的时候&#xff0c;你可能会遇到下面的错误提示&#xff1a;“由于找不到vcomp140.dll&#xff0c;无法继续执行代码”。这个错误提示通常表示你的电脑缺少一个或多个DLL文件&#xff0c;而这些文件是软件和游…

「字节跳动测试开发面经」一二三面+hr面+超级全资料+复习资料

​ 说在前面&#xff0c;面试时最好不要虚报工资。本来字节跳动是很想去的&#xff0c;几轮面试也通过了&#xff0c;最后没offer&#xff0c;自己只想到几个原因&#xff1a; 1、虚报工资&#xff0c;比实际高30%&#xff1b; 2、有更好的人选&#xff0c;这个可能性不大&am…

【Linux】软件包管理器 yum和编辑器-vim的基本使用

文章目录 一、yum背景知识1.商业生态2.开源生态3.Linux软件生态本土化 二、yum的基本使用1.什么是软件包2.查看软件包3.安装软件4.卸载软件5.rzsz 三、vim的基本使用1.vim的基本概念2.vim的基本操作3.vim命令模式命令集4.vim末(底)行模式命令集5.操作总结 四、简单vim配置1.vim…

C++学习day--10 条件判断、分支

1、if语句 if 语句的三种形态 形态1&#xff1a;如果。。。那么。。。 #include <iostream> using namespace std; int main( void ) { int salary; cout << " 你月薪多少 ?" ; cin >> salary; if (salary < 20000) { cout <&…

浅谈整除分块

例题一 ∑ i 1 n ⌊ n i ⌋ \sum_{i1}^n \lfloor\frac n i\rfloor\\ i1∑n​⌊in​⌋ 首先很容易想到直接求解&#xff0c;对于较大的数据&#xff0c; O ( n ) O(n) O(n)做法无法通过。 注意到函数 y ⌊ n x ⌋ y\lfloor\dfrac n x\rfloor y⌊xn​⌋的图像如下&#xff1a…

Hive语言

一、Hive的DDL语言&#xff08;数据库、数据表的增删改查操作) 二、Hive的DQL语言&#xff08;数据库查询语言&#xff09; 2.1Hive七子句 聚合函数&#xff1a;count()、sum()、max()、min()、avg()可以单独使用。(缩写&#xff1a;cs mm a) 2.1.1 分区查询与分区裁剪 SELEC…

OpenGL(九)——颜色

目录 一、前言 二、简单光源 三、光照场景 3.1 创建光源 3.2 光源顶点着色器 3.3 光源片段着色器 3.4 物体片段着色器 3.5 光源位置 一、前言 我们看到的物体颜色是通过光照在物体&#xff0c;然后反射到人眼成像&#xff0c;具体而言是物体不能吸收的颜色。如白光照射…

C++学习day--09 字符串比较、运算符

1、项目练习 第 1 节 项目需求、项目实现 项目实现&#xff1a; #include <iostream> #include <Windows.h> #include <string> using namespace std; int main( void ) { string name; string pwd; std::cout << " 请输入账号&am…