03_MySQL基本SQL语句讲解
#课程目标
- 能够创建、删除数据表
- 能够对表里的==数据记录==进行==增加、删除、修改、查询操作==
- 能够==创建、删除用户==
- 能够给==用户授权并回收权限==
- 了解delete和truncate语句的区别
#一、数据库基本操作
##1、查看数据库相关信息
mysql> show databases; 查看所有数据库 mysql> show schemas; 查看所有数据库 mysql> use 数据库名; 指定数据库,类似于进入到某个库里进行操作 mysql> show tables; 查看所有表 mysql> show variables; 查看变量 mysql> show variables like '%char%'; mysql> show variables like '%data%'; mysql> show engines; 查看存储引擎 说明:";"号代表一条sql语句结束,所以,每条SQL语句结束都需要加";"
2、服务器字符集设置
注意:只要是永久更改,必然更改配置文件!
[mysqld] basedir=/mysql_3306 datadir=/mysql_3306/data socket=/tmp/mysql.sock character-set-server=utf8mb4 collation-server=utf8mb4_general_ci
3、创建库(==create database==)
创建db1库 create database db1; 创建db1库并指定默认字符集 create database db1 default charset gbk; 如果存在不报错(if not exists) create database if not exists db1 default character set utf8; 说明:不能创建相同名字的数据库!
##4、更改数据库信息(==alter database==)
更改db1库的默认字符集 alter database db1 default character set gbk; alter database db2 default charset utf8;
##5、删除数据库(==drop database==)
删除db1库 drop database db1;
#二、数据表基本操作
##1、创建表(==create table==)
###㈠ 语法格式
create table 表名 (字段1,字段2,...) create table 表名 (字段1 数据类型(字符长度),字段2,...) create table 表名 (字段1 数据类型(字符长度) 约束条件,字段2,...)
###㈡ 示例
创建t1表,id列整型,name列字符串 int(10) varchar(30) create table t1 (id int,name varchar(10)); 创建t2表,id列整型,并且为主键,name列字符串 create table t2 (id int key,name varchar(20) not null,......) 查看表的结构 desc t1; describe t2;
##2、插入记录(==insert into==)
以下是往表里插入数据的几种不同方法 insert into 表名 set 字段1=xx,字段2=xx; insert into t1 set id=3,name='li'; insert into 表名 values(值1,值2),(值1,值2) insert into t1 values(1,'zhang'),(2,'wang'); insert into 表名 (指定字段1,指定字段2) values(字段1值,字段2值); insert into t2 (id,name) values(3,'li'); insert into t1 select * from t2; insert into t1(name) select name from t2; 说明: 1.插入的数据来自于另外一张表 2.一定要保证两张表的结构一致(插入表里字段数和后面表查找出来的字段要相匹配) 3.两张表结构完全一致;或者人造让两边字段一致 查询表里所有记录 select * from t1;
##3、删除记录(==delete from==)
删除表里所有的记录 delete from 表名;delete from t1; truncate 表名; 根据条件删除 delete from t1 where id>3; 注意: truncate不能加where条件删除数据;只能全部删除表里的所有记录。
##4、更新记录(==update 表名==)
###㈠ 语法
update 表名 set 字段1=新值,字段2=新值,... where条件;
###㈡ 示例
update t1 set name='harry' where id=1; update t1 set name='jack',id=33 where id=3; update t1 set id=222,name='wanger' where id=2;
##5、更改表属性信息(==alter table==)
增加一列成为第一列 alter table t2 add id int first; 在id后面增加一列叫id2 alter table t2 add id2 int after id; alter table t1 add sex varchar(10) not null;删除id2这个列 alter table t2 drop id2;修改列名和数据类型 alter table t2 change id ID bigint; 修改列的数据类型 alter table t2 modify ID int;查看数据库有哪些存储引擎 show engines; 修改表的存储引擎 alter table t2 engine MyISAM; 查看修改存储引擎是否成功 show create table t2; 修改表的默认字符集 alter table t2 default charset=utf8;
##6、重命名或移动表(==rename table==)
移动表到另一个库里并重命名 rename table db01.t1 to db02.t11; 或者 alter table db01.t1 rename db02.t11;只重命名表名不移动 rename table tt1 to tt2; 或者 alter table tt1 rename tt2;
##7、删除表(==drop table==)
drop table 表名;
##8、delete/truncate/drop区别
-
delete:删除==数据记录==
-
数据操作语言(DML)
-
在事务控制里,DML语句要么commit,要么rollback
-
删除==大量==记录速度慢,==只删除数据==不回收高水位线
-
可以==带条件==删除
-
-
truncate:删除==所有数据记录==
-
数据定义语言(DDL)
-
==不在==事务控制里,DDL语句执行前会提交前面所有未提交的事务
-
清里大量数据==速度快==,回收高水位线(high water mark)
-
==不能带条件删除==
-
-
drop:删除==数据库对象==
-
数据定义语言(DDL)
-
数据库对象包括库、表、用户等
-
#三、用户管理
##1、创建用户(==create user==)
注意:MySQL中不能单纯通过用户名来说明用户,必须要加上主机。如==jack@10.1.1.1==
###㈠ 语法
创建用户不设置密码 create user 'user'@'host';创建用户设置密码 create user 'user'@'host' identified by 'password';说明:用户的信息保存在mysql数据库中的user表中,验证用户是否创建成功如下: select user,host from mysql.user;
###㈡ 示例
create user 'tom'@'localhost' identified by '123'; create user 'harry'@'localhost' identified by '123'; create user 'tom'@'10.1.1.1' identified by '123'; create user 'jack'@'%' identified by '123';
###㈢ 用户主机表示方式
'user'@'localhost' 表示user只能在本地通过socket登录数据库 'user'@'192.168.0.1' 表示user用户只能在192.168.0.1登录数据库 'user'@'192.168.0.0/24' 表示user用户可以在该网络任意的主机登录数据库 'user'@'%' 表示user用户可以在所有的机器上登录数据库;本机为匿名用户
2、删除用户(==drop user==)
㈠ 语法
drop user 用户;
㈡ 示例
删除'user01'@'localhost'用户 mysql> drop user 'user01'@'localhost'; 默认删除user01从任意主机登录 mysql> drop user 'user01'; mysql> drop user 'user01'@'%';重命名用户名 mysql> rename user 'harry'@'10.1.1.%' to 'harry'@'10.1.1.1';删除一个匿名用户 mysql> drop user ''@'localhost';删除mysql中的匿名用户 mysql> delete from mysql.user where user=''; 删除root用户从本机::1登录(::1表示IPv6地址) mysql> delete from mysql.user where user='root' and host='::1'; mysql> flush privileges;注意:如果tcp/ip登录,服务器端口不是默认3306,则需要加端口号
3、用户权限管理(==grant==)
㈠ 权限说明
所有权限说明MySQL :: MySQL 5.7 Reference Manual :: 6.2.2 Privileges Provided by MySQL
USAGE 无权限,只有登录数据库,只可以使用test或test_*数据库 ALL 所有权限以下权限为指定权限 select/update/delete/super/replication slave/reload...with grant option 选项表示允许把自己的权限授予其它用户或者从其他用户收回自己的权限
###㈡ 权限保存位置
mysql.user 所有mysql用户的账号和密码,以及用户对全库全表权限(*.*) mysql.db 非mysql库的授权都保存在此(db.*) mysql.table_priv 某库某表的授权(db.table) mysql.columns_priv 某库某表某列的授权(db.table.col1) mysql.procs_priv 某库存储过程的授权
###㈢ 给用户授权
####① 语法
grant 权限1,权限 on 库.表 to 用户@主机 grant 权限(列1,列2,...) on 库.表 to 用户@主机
####② 用户授权示例
给tom@10.1.1.1用户授予查看db01库里所有表权限 mysql> grant select on db01.* to 'tom'@'10.1.1.1'; 刷新权限表 mysql> flush privileges;给tom@10.1.1.1用户授予修改db01库的ID字段的权限 mysql> grant update(ID) on db01.tt1 to 'tom'@'10.1.1.1'; mysql> flush privileges; 查看当前用户权限 mysql> show grants; 查看指定用户权限 mysql> show grants for 'tom'@'10.1.1.1';
③ 使用grant创建用户
说明:5.7以后==不推荐==,未来会被弃用!
grant all on *.* to 'harry'@'10.1.1.%' identified by '123';
####④ with grant option选项
with grant option:用户是否可以下放和回收权限grant all on *.* to 'amy'@'10.1.1.%' identified by '123' with grant option; grant all on *.* to 'harry'@'10.1.1.%' identified by '123'; 测试harry用户和amy用户是否可以将自己的权限下放: harry用户登录:mysql> grant select on db01.* to 'tom'@'10.1.1.1'; ERROR 1044 (42000): Access denied for user 'harry'@'10.1.1.%' to database 'db01'amy用户登录: mysql> grant select on db01.* to 'tom'@'10.1.1.1';
####⑤ 总结
-
创建用户方法
-
create user...
==需要单独grant授权== -
grant xxx
==直接创建用户并授权==
-
-
扩展补充
-
从MySQL 5.7.6开始,不赞成使用grant修改密码;使用 ALTER USER来代替。
ALTER USER 'jeffrey'@'localhost' IDENTIFIED BY 'mypass';
-
###㈣ 回收用户权限
revoke 权限 on 库.表 from 用户; 撤消指定的权限 mysql> revoke update on db01.tt1 from 'tom'@'10.1.1.1'; 撤消所有的权限 mysql> revoke select on db01.* from 'tom'@'10.1.1.1';
#四、查询语句
##1、常见符号
符号 | 说明 |
---|---|
% | 匹配0个或任意多个字符 |
_(下划线) | 匹配单个字符 |
like | 模糊匹配 |
= | 等于,精确匹配 |
> | 大于 |
< | 小于 |
>= | 大于等于 |
<= | 小于等于 |
!=和<> | 不等于 |
! 和 not | 逻辑非 |
|| 和 or | 逻辑或 |
&& 和 and | 逻辑与 |
between...and.... | 两者之间 |
in (....) | 在... |
not in (....) | 不在 |
##2、其他关键字
符号 | 说明 |
---|---|
regexp | 使用正则来匹配 |
order by | 排序 |
asc | 升序排列 |
desc | 降序排列 |
group by | 聚合 |
having | 筛选 |
distinct | 去除重复的行 |
##3、查询举例
###㈠ 基本简单查询
select 字段1,字段2,... from 表名;查看所有数据 select * from emp; 查看指定列 select empno,ename,job,sal from emp; 给列指定别名 select empno 工号,ename 姓名,job 工作,sal 工资 from emp; 或者 select empno as 工号,ename as 姓名,job as 工作,sal as 工资 from emp;
###㈡ 带where条件查询
支持逻辑运算符,支持正则表达式 select * from t3 where english >60 && english <90; select * from t3 where math >= 60 and english >= 60; select * from t3 where math >= 60 or english >= 60; select * from t3 where math >= 60 and not english >= 60;select * from t3 where name regexp '^h'; select * from t1 where name regexp '.*[0-9]'; select * from t1 where name regexp '.*[0-9]+.*'; select * from t1 where name regexp '.*[0-9]{2}.*' ;sal不在3000与5000之间的记录 select * from emp where sal not between 3000 and 5000;sal在500-1000或者3000-5000之间 select * from emp where sal >= 3000 and sal <= 5000 or sal >=500 and sal <=1000;
###㈢ 排序
默认按照deptno列升序排列 select * from emp order by deptno; 指定按照deptno列升序排列 select * from emp order by deptno asc; 指定deptno列按降序排列 select * from emp order by deptno desc;
###㈣ 去重
select distinct deptno from emp;
###㈤ group by和having
####① group by
根据给定==数据列==的查询结果进行分组统计,最终得到一个==分组汇总表==
注:一般情况下group by需与==统计函数==一起使用才有意义
常见统计函数 | 说明 |
---|---|
max | 求最大值 |
min | 求最小值 |
sum | 求和 |
avg | 求平均值 |
count | 求总行数 |
-
举例说明
查找每个部门的最高工资: select deptno,max(sal) from emp group by deptno; 每个部门最大工资和部门人数: select deptno,max(sal),count(*) from emp group by deptno; +--------+----------+----------+ | deptno | max(sal) | count(*) | +--------+----------+----------+ | 10 | 5000.00 | 3 | | 20 | 3000.00 | 5 | | 30 | 2850.00 | 6 | +--------+----------+----------+ 查找10号和20号部门最大工资和人数 select deptno,max(sal),count(*) from emp where deptno in (10,20) group by deptno; +--------+----------+----------+ | deptno | max(sal) | count(*) | +--------+----------+----------+ | 10 | 5000.00 | 3 | | 20 | 3000.00 | 5 | +--------+----------+----------+
####② having
-
having与where类似,根据条件对==数据==进行过滤筛选
-
where==针对表中的列==发挥作用,查询数据
-
having==针对查询结果集==发挥作用,筛选数据
举例说明
查询员工数大于5个的部门编号和最大工资及员工数 select deptno,max(sal),count(*) from emp group by deptno having count(*)>5; 查询底薪+提成大于2000的员工相关信息 select empno,ename,sal+ifnull(comm,0) sum from emp having sum >2000; 查询每个部门最大工资的员工信息 select ename,empno,deptno,sal from emp where (deptno,sal) in (select deptno,max(sal) from emp group by deptno) ; +-------+-------+--------+---------+ | ename | empno | deptno | sal | +-------+-------+--------+---------+ | BLAKE | 7698 | 30 | 2850.00 | | SCOTT | 7788 | 20 | 3000.00 | | KING | 7839 | 10 | 5000.00 | | FORD | 7902 | 20 | 3000.00 | +-------+-------+--------+---------+ 4 rows in set (0.00 sec)查询20和30号部门基本工资加提成大于2000的人员信息 select deptno,empno,ename,sal+ifnull(comm,0) sum from emp where deptno in(30,20)having sum >2000;
-
IFNULL函数扩展
IFNULL()函数: MySQL中的IFNULL函数类似于Oracle中的NVL函数,其表达式为:IFNULL(expr1,expr2),如果第一个参数不为空,则返回第一个参数,否则返回第二个参数。 ifnull(comm,0)IFNULL(expr1,expr2) If expr1 is not NULL, IFNULL() returns expr1; otherwise it returns expr2.IF()函数: IF(expr1,expr2,expr3)类似于Oracle中的NVL2函数,如果第一个表达式的值为TRUE(不为0或null),则返回第二个参数的值,否则返回第三个参数的值IF(expr1,expr2,expr3) If expr1 is TRUE (expr1 <> 0 and expr1 <> NULL), IF() returns expr2. Otherwise, it returns expr3.NULLIF()函数: NULLIF(expr1,expr2),如果expr1=expr2为真,返回null;否则返回expr1NULLIF(expr1,expr2) Returns NULL if expr1 = expr2 is true, otherwise returns expr1. This is the same as CASE WHEN expr1 = expr2 THEN NULL ELSE expr1 END.
###㈥ 合并列函数(concat)
select concat(user,' ',password) as 用户名和密码 from mysql.user; create table t3(path1 varchar(255),homedir varchar(255)); insert into t3 set path1='/www/itcast',homedir='u01'; select concat(path1,'/', homedir) from t3; select concat(path1,'/', homedir) as '家目录' from t3;
###㈦ 分页函数(limit)
用法:limit 起始位置,偏移量 起始位置从0开始 select * from t1 limit n; 显示前n行 select * from t1 limit n,m; 显示n+1行至表中的n+m行select * from t1 limit 10; 显示前10行 select * from t1 limit 10,10; 显示11至20行 select * from t1 limit 1; 显示第1行 select * from t1 limit 0,2; 显示第1,2行 select * from t1 limit 2,2; 显示3,4行 select * from t1 limit 4,2; 显示5,6行 select * from t1 limit 6,2; 显示第7,8行
###㈧ 多表联合查询
常规查询表: select * from emp,dept where emp.deptno=dept.deptno;select dept.deptno,dept.dname,emp.ename,emp.job from emp,dept where emp.deptno=dept.deptno;select e.ename,e.job,e.hiredate,d.dname,e.deptno from emp e,dept d where e.deptno=d.deptno;表的连接:纵向连接/内连接/左连接/右连接左连接(以左表为标准连接右表): left join=left [outer] join select emp.ename,emp.job,dept.deptno from dept left join emp on emp.deptno=dept.deptno;右连接(以右表为标准连接左表): right join= right [outer] join select emp.ename,emp.job,dept.deptno from dept right join emp on emp.deptno=dept.deptno;内连接:取多表之间的交集 inner join select emp.ename,emp.job,dept.deptno from emp inner join dept on emp.deptno=dept.deptno;纵向连接:合并【表结构相同】 select name,math,english,'' as 'chinese' from t2 union select name,math,english,chinese from t3;
###㈨ 四则运算
select 1+2; select 1-3; select 1*4; select 1/4; select 1 + 1, (10-1)/3, 2*2/2; select 1 + 1 from dual; dual表,俗称万能表 乘幂需要调用函数:-3表示2的三次幂取倒数 mysql> select pow(2,3),power(2,3),pow(2,-3),power(2,-3); +----------+------------+-----------+-------------+ | pow(2,3) | power(2,3) | pow(2,-3) | power(2,-3) | +----------+------------+-----------+-------------+ | 8 | 8 | 0.125 | 0.125 | +----------+------------+-----------+-------------+ 1 row in set (0.00 sec)
#五、扩展常见的数据类型
##1、数值类型
常见的数值类型
###㈠ 整数类型(精确值)
###㈡ 定点类型(精确值)
-
DECIMAL和NUMERIC
DECIMAL
和NUMERIC
类型的存储==精确的数值数据==。使用这些类型时,重要的是要保留==精确的精度==,例如使用货币数据。在MySQL中, NUMERIC
被作为DECIMAL
来应用,所以下面的举例DECIMAL
同样适用于 NUMERIC
。
-
举例说明
salary DECIMAL(5,2) 在上面的例子中,薪水字段的类型为decimal,表示精确的数字。其中,5代表精度,2代表刻度。 精度表示数值存储的有效位数,刻度表示小数点后面可存储的位数。 DECIMAL(5,2)能够存储五位数和两位小数的任何值,因此可以存储在salary 列中的值的范围-999.99是 999.99特殊注意: DECIMAL(M)和DECIMAL(M,0)是相等的,存储长度取决于M的值,默认情况下M值为10.刻度为0表示没有小数。
###㈢ 浮点类型(近似值)
-
FLOAT和DOUBLE
FLOAT
和DOUBLE
类型代表近似数字数据值。MySQL对于单精度值使用四个字节,对于双精度值使用八个字节。 FLOAT
单精度浮点数精确到约7位小数,DOUBLE
双精度浮点数精确到大约15位小数 。FLOAT
类型会随着数值的增大精度会减小。
-
举例说明
FLOAT(M,D),其中,M表示存储的有效位数,D代表小数点后面的位数;即整数位数+小数部分不能超过M值。 colum1 FLOAT(7,4) 上面例子中,如果你插入为999.00009到cloum1列,那么mysql在存储时会四舍五入变为999.0001插入。
-
对比总结
数值类型 | 精度 | 存储空间 | 精确性 |
---|---|---|---|
FLOAT | 单精度 | 4字节 | 低 |
DOUBLE | 双精度 | 8字节 | 低,比float高 |
DECIMAL | 高精度 | 变长 | 高 |
##2、字符串类型
常见的字符类型
###㈠ CHAR类型
CHAR类型的字符串为定长.长度范围是0到255之间的任何值.占用定长的存储空间,不足的部分用==空格==填充;读取时删掉后面的空格。
name char(10)
-
存储空间
CHAR(==M==)类型的存储空间和字符集有关系,一个中文在utf8字符集中占用3个bytes、gbk占用2个bytes、数字和字符统一用一个字符表示。
-
存储机制
在不够M长度时,MySQL在存储数据时,需要填充特殊的空格.
-
举例说明
name CHAR(M),M表示字符数
###㈡ VARCHAR类型
VARCHAR是==变长存储==,仅使用必要的存储空间.
name varchar(10)
-
存储空间
VARCHAR(M)类型的存储空间和字符集有关系,一个中文在utf8字符集中占用3个bytes、gbk统一占用2个bytes、数字和字符一个字符表示。
-
存储机制
VARCHAR(M)字段存储实际是从第二个字节开始存储,然后用1到2个字节表示实际长度,剩下的才是可以存储数据的范围,因此最大可用存储范围是65535-3=65532字节;
第一个字节标识是否为空.(长度小于255字节,使用一个字节来表示长度;大于255字节使用两个字节来表示长度)。
###㈢ 其他
BLOB:保存二进制的大型数据(字节串),没有字符集,eg:图片、音频视频等。
TEXT:保存非二进制字符串(字符串);有一个字符集。
BINARY和VARBINARY:类似CHAR和VARCHAR;保存字节字符串,而不是字符字符串,这意味着它们没有字符集
##3、时间类型
###㈠ DATE类型
The DATE
type is used for values with a date part but no time part. MySQL retrieves and displays DATE
values in'YYYY-MM-DD'
format. The supported range is '1000-01-01'
to '9999-12-31'
.
###㈡ DATETIME
The DATETIME
type is used for values that contain both date and time parts. MySQL retrieves and displaysDATETIME
values in 'YYYY-MM-DD HH:MM:SS'
format. The supported range is '1000-01-01 00:00:00'
to '9999-12-31 23:59:59'
.
###㈢ TIMESTAMP
The TIMESTAMP
data type is used for values that contain both date and time parts. TIMESTAMP
has a range of '1970-01-01 00:00:01'
UTC to '2038-01-19 03:14:07'
UTC.
注意:
Invalid DATE
, DATETIME
, or TIMESTAMP
values are converted to the “zero” value of the appropriate type ('0000-00-00'
or '0000-00-00 00:00:00'
).
无效的日期,日期时间等会被替换成‘0000-00-00’或‘0000-00-00 00:00:00’
###㈣ TIME
MySQL retrieves and displays TIME
values in 'HH:MM:SS'
format (or 'HHH:MM:SS'
format for large hours values).TIME
values may range from '-838:59:59'
to '838:59:59'
.
说明:小时部分可以是这么大,因为可以使用TIME类型不仅代表一个时间(必须小于24小时),而且可以表示运行时间或两个事件之间的时间间隔(可能大于24小时,甚至负数)。
==注意:==
TIME这一列如果存储缩写,需要注意mysql的解释方式。无效的时间值会被转换成'00:00:00' 。
'11:12'
means '11:12:00'
, not '00:11:12'
.
'12'
and 12
are interpreted as '00:00:12'
.
###㈤ YEAR
YEAR(4)
and YEAR(2)
differ in display format, but have the same range of values.
For 4-digit format, MySQL displays YEAR
values in YYYY
format, with a range of 1901
to 2155
, or 0000
.
For 2-digit format, MySQL displays only the last two (least significant) digits; for example, 70
(1970 or 2070) or 69
(2069).
无效的值将会被转换成'0000'.
六、课后练习
1、将SQL脚本(demo.sql)导入到数据库中
2、根据如下要求写出查询语句
1)查询英语前三名
2)查询总分,以降序排列
3)查询总分第一名
4)查询英语最高分的姓名及分数
5)查询总成绩的平均分第一名
相关文章:

03_MySQL基本SQL语句讲解
#课程目标 能够创建、删除数据表能够对表里的数据记录进行增加、删除、修改、查询操作能够创建、删除用户能够给用户授权并回收权限了解delete和truncate语句的区别 #一、数据库基本操作 ##1、查看数据库相关信息 mysql> show databases; 查看所有数据库 mysql>…...
【C语法学习】28 - 字符测试函数
文章目录 1 isalnum()函数2 isalpha()函数3 islower()函数4 isupper()函数5 isdigit()函数6 isxdigit()函数7 iscntrl()函数8 isgraph()函数9 isspace()函数10 isblank()函数11 isprint()函数12 ispunct()函数13 tolower()函数14 toupper()函数 1 isalnum()函数 isalnum()函数…...

极兔快递查询,极兔快递单号查询,对需要的单号记录进行备注
批量查询极兔快递单号的物流信息,对需要的快递单号记录进行备注。 所需工具: 一个【快递批量查询高手】软件 极兔快递单号若干 操作步骤: 步骤1:运行【快递批量查询高手】软件,并登录 步骤2:点击主界面左…...
树的序列化与反序列化
1 序列化与反序列化 二叉树的序列化与反序列化 1.1 实现思路 方式一:前序遍历 通过前序遍历方式实现二叉树的序列化将结果存入队列中要注意空节点也要存null 方式二:层序遍历 层序遍历也是用队列实现注意从左到右,遇到空节点存null 1.2 …...

定长子网划分和变长子网划分问题_二叉树解法_通俗易懂_配考研真题
引入:定长子网划分和变长子网划分的基本概念 定长子网划分和变长子网划分的基本概念 目前常用的子网划分,是基于CIDR的子网划分,也就是将给定的CIDR地址块划分为若干个较小的CIDR地址块。 定长子网划分: 使用同一个子网掩码来划分子网,因…...
ruoyi 前后分离部署502
ruoyi 前后分离部署502 我使用了nginx部署前端,使用docker部署。nginx文件如下: server {listen 8086; #设置端口listen [::]:8086; #设置端口server_name localhost;#access_log /var/log/nginx/host.access.log main;location / {root /…...
【Python】多年数据分成不同sheet
需求: excel文件中包含多年数据,其中一列列名为“年”,要保存一个新excel,将年数值不同的行保存在不同的sheet文件中,每个sheet文件第一行仍为原数据第一行,并且每个sheet名为对应的年的值。 拆分年份数据…...

Cache学习(3):Cache地址映射(直接映射缓存组相连缓存全相连缓存)
1 Cache的与存储地址的映射 以一个Cache Size 为 128 Bytes 并且Cache Line是 16 Bytes的Cache为例。首先把这个Cache想象成一个数组,数组总共8个元素,每个元素大小是 16 Bytes,如下图: 现在考虑一个问题,CPU从0x0654…...

GIT | 基础操作 | 初始化 | 添加文件 | 修改文件 | 版本回退 | 撤销修改 | 删除文件
GIT | 基础操作 | 初始化 | 添加文件 | 修改文件 | 版本回退 | 撤销修改 | 删除文件 文章目录 GIT | 基础操作 | 初始化 | 添加文件 | 修改文件 | 版本回退 | 撤销修改 | 删除文件前言一、安装git二、git基本操作2.1 初始化git2.2 配置局部生效2.3 配置全局生效 三、认识工作区…...

HCIA-RS基础-距离矢量路由协议
前言: 动态路由协议根据寻径方式可以分为距离矢量路由协议和链路状态路由协议。本文将详细介绍距离矢量路由协议的原理,并阐述其中一个重要概念——路由环路,同时介绍如何避免路由环路的方法。通过学习本文,您将能够深入理解距离矢…...
Python与设计模式--简单工厂模式
2-Python与设计模式–简单工厂模式 一、快餐点餐系统 想必大家一定见过类似于麦当劳自助点餐台一类的点餐系统吧。在一个大的触摸显示屏上,有三类可以选择的上餐品: 汉堡等主餐、小食、饮料。当我们选择好自己需要的食物,支付完成后&#x…...

四、防火墙-NAT Server
学习防火墙之前,对路由交换应要有一定的认识 NAT Server1.1.基本原理1.2.多出口场景下的NAT Server1.3.源进源出 —————————————————————————————————————————————————— NAT Server 一般对用户提供一些可访问的…...
Rust - cargo项目里多个二进制binary crate的编译运行
目录 foo - Cargo.toml - src - - main.rs - - bin - - - other-bin.rs将除默认入口文件外待作为二进制crate处理的文件放在src/bin目录下 方法一: 命令行增加配置项 --bin xxx cargo run --bin foo // 注意! 这里是包名,不是main cargo run --bin o…...

python爬虫教程:selenium常用API用法和浏览器控制
文章目录 selenium apiwebdriver常用APIwebelement常用API 控制浏览器 selenium api selenium新版本(4.8.2)很多函数,包括元素定位、很多API方法均发生变化,本文记录以selenium4.8.2为准。 webdriver常用API 方法描述get(String url)访问目标url地址&…...

2024年天津天狮学院专升本食品质量与安全专业《分析化学》考纲
2024年天津天狮学院食品质量与安全专业高职升本入学考试《分析化学》考试大纲 一、考试性质 《分析化学》专业课程考试是天津天狮学院食品质量与安全专业高职升本入学考试 的必考科目之一,其性质是考核学生是否达到了升入本科继续学习的要求而进行的选拔性考试。《…...

2023年亚太地区数学建模大赛 C 题
我国新能源电动汽车的发展趋势 新能源汽车是指以先进技术原理、新技术、新结构的非常规汽车燃料为动力来源(非常规汽车燃料指汽油、柴油以外的燃料),将先进技术进行汽车动力控制和驱动相结合的汽车。新能源汽车主要包括四种类型:…...
TDlib readme
不同开发语言使用TDlib的连接入口:td/example/README.md at master tdlib/td (github.com) 如golang:td/example/README.md at master tdlib/td (github.com)...
紧急救援【Dijkstra】
作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图。在地图上显示有多个分散的城市和一些连接城市的快速道路。每个城市的救援队数量和每一条连接两个城市的快速道路长度都标在地图上。当其他城市有紧急求助电话给你的时候,你的任务是带领你的…...

「Verilog学习笔记」数据累加输出
专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点,刷题网站用的是牛客网 在data_out准备好,valid_b拉高时,如果下游的ready_b为低,表示下游此时不能接收本模块的数据,那么,将会拉低ready…...

typeof,instanceof
1.typeof typeof运算符返回的结果是以小写的字符串表示的变量的类型 2.instanceof instanceof运算符用于判断右边构造函数的原型对象是否在左边对象的原型链上 let arr[]let obj{}let datenew Dateconsole.log(arr instanceof Array)console.log(arr instanceof Object)conso…...

XML Group端口详解
在XML数据映射过程中,经常需要对数据进行分组聚合操作。例如,当处理包含多个物料明细的XML文件时,可能需要将相同物料号的明细归为一组,或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码,增加了开…...

【kafka】Golang实现分布式Masscan任务调度系统
要求: 输出两个程序,一个命令行程序(命令行参数用flag)和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽,然后将消息推送到kafka里面。 服务端程序: 从kafka消费者接收…...

RocketMQ延迟消息机制
两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数,对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后…...

Unity3D中Gfx.WaitForPresent优化方案
前言 在Unity中,Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染(即CPU被阻塞),这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案: 对惹,这里有一个游戏开发交流小组&…...

家政维修平台实战20:权限设计
目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系,主要是分成几个表,用户表我们是记录用户的基础信息,包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题,不同的角色…...

视频字幕质量评估的大规模细粒度基准
大家读完觉得有帮助记得关注和点赞!!! 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用,因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型(VLMs)在字幕生成方面…...
WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)
一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解,适合用作学习或写简历项目背景说明。 🧠 一、概念简介:Solidity 合约开发 Solidity 是一种专门为 以太坊(Ethereum)平台编写智能合约的高级编…...
【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)
升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点,但无自动故障转移能力,Master宕机后需人工切换,期间消息可能无法读取。Slave仅存储数据,无法主动升级为Master响应请求ÿ…...

Android15默认授权浮窗权限
我们经常有那种需求,客户需要定制的apk集成在ROM中,并且默认授予其【显示在其他应用的上层】权限,也就是我们常说的浮窗权限,那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...
【JavaSE】绘图与事件入门学习笔记
-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角,以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向,距离坐标原点x个像素;第二个是y坐标,表示当前位置为垂直方向,距离坐标原点y个像素。 坐标体系-像素 …...