关系型数据库mysql(2)SQL语句

目录

一.SQL语句简介

1.1SQL语言

1.2SQL语句分类

1.3SQL分类

1.4SQL 语言规范

二.数据库基本操作

2.1查看数据库中的库信息

2.2查看数据库中的表信息

数据库内查看

数据库外查看

2.3显示数据库的结构(字段)

​编辑

2.4 字段属性

2.5常见的数据类型

2.6 char 和 varchar 的区别

 三.数据库管理(增删改查)

3.1数据库的创建

3.2表的创建

3.3插入数据

 3.4查找数据库表中的数据

3.5修改表中的数据 

3.6删除表中的数据

 危险:删除一定要加条件,不然会删除整个表!!!

 3.7删除指定的表

3.8删除指定的库 

四. 表结构的管理

4.1 修改表名

4.2 扩展表结构(增加字段) 

 4.3 修改字段名,添加唯一键 change

​编辑 4.4 删除字段 drop

4.5 克隆表

方式一:like方法

方式二:Show create table方法

区别

4.6临时表

 4.7清除表的三种方式

delete清空 

truncate清空 

drop清空 

区别

五.数据库用户管理 

5.1. 登录用户的管理

5.2查看用户密码的信息

5.3  登录用户用户名的更改 (重命名)

5.4修改用户密码

​编辑 5.5删除登录用户

5.6 修改其他用户密码 

5.7 忘记root密码的解决方法 

修改 /etc/my.cnf 配置文件,免密登录mysql 

重启数据库服务 

免密登录之后,修改数据库用户中的 root 密码 

退出并登录测试新密码

​编辑撤销添加的免密码认证设置,重启数据库服务

​编辑 六.数据库用户权限管理

6.1常见的用户权限

6.2查看用户已有权限的操作 

6.3 授权操作

对存在的用户进行授权

 对不存在的用户进行创建并授权 

 撤销用户权限

6.4用户远程登录 

用户授权

使用Navicat图形化工具远程连接 

七.总结

查看数据库、数据表和表结构的操作

创建库和表的操作及删除库和表的操作

 数据表的增、删、改、查等操作

数据库表的清空表、临时表和克隆表操作

清空表

临时表

克隆表

数据库的用户授权相关操作

数据库用户管理

数据库授权


一.SQL语句简介

1.1SQL语言

  • Structured Query Language的缩写,即结构化查询语言
  • 关系型数据库的标准语言
  • 用于维护管理数据库
  • 包括数据查询,数据更新,访问控制,对象管理等功能

1.2SQL语句分类

  • DDL:数据定义语言

用于创建数据库对象,如库、表、索引等。

例如:CREATE,DROP,ALTER 等

  • DML:数据操纵语言

用于对表中的数据进行管理。

例如: SELECT、UPDATE、INSERT、DELETE 等。

  • DQL:数据查询语言

于从数据表中查找符合条件的数据记录。

例如: SELECT

  • DCL:数据控制语言

用于设置或者更改数据库用户或角色权限

例如: GRANT,REVOKE

1.3SQL分类

  • 数据库:database

  • 表:table,行:row 列:column

  • 索引:index

  • 视图:view

  • 存储过程:procedure

  • 存储函数:function

  • 触发器:trigger

  • 事件调度器:event scheduler,任务计划

  • 用户:user

  • 权限:privilege

1.4SQL 语言规范

  • 在数据库系统中,SQL 语句不区分大小写,建议用大写

  • SQL语句可单行或多行书写,默认以 " ; " 结尾

  • 关键词不能跨多行或简写

  • 用空格和TAB 缩进来提高语句的可读性

  • 子句通常位于独立行,便于编辑,提高可读性

二.数据库基本操作

2.1查看数据库中的库信息

show databases

 

2.2查看数据库中的表信息

数据库内查看
use 数据库名
show tables

数据库外查看
show tables from 数据库名

 

库外查看要指定具体的数据库名

2.3显示数据库的结构(字段)

describe [数据库名]表名、可缩写成:  desc [数据库名.]表名;

由于屏幕占比问题与字段数量问题,会导致有些表结构的效果呈现并不好。(默认查看为横向的查看 ) 

desc  表名\G;

2.4 字段属性

 Field:字段名称
type:数据类型
Null :是否允许为空
Key :主键
Type:数据类型
Null :是否允许为空
key :主键
Default :默认值
Extra :扩展属性,例如:标志符列(标识了种子,增量/步长)1 2
id:1 3 5 7

2.5常见的数据类型

类型说明
int整型,用于定义整数类型的数据
fload单精度浮点4字节32位,准确表示到小数点后六位
double双精度浮点8字节64位
char固定长度的字符类型,用于定义字符类型数据。
varchar可变长度的字符类型
text文本
image图片
decimal(5,2)5个有效长度数字,小数点后面有2位。指定长度数组

2.6 char 和 varchar 的区别

CHAR(4)存储需求VARCHAR(4)存储需求
''' '4个字节''1个字节
'ab''ab '4个字节'ab '3个字节
'abcd''abcd'4个字节'abcd'5个字节
abcdefgh''abcd'4个字节'abcd'5个字节

char

char的长度是不可变。char如果存入数据的实际长度比指定长度要小 会补空格至指定长度 如果存入的数据的实际长度大于指定长度,低版本会被截取高版本会报错。

varchar

varchar长度是可变的,默认会加一个隐藏的结束符,因此结束符会多算一个字节。

对比

  • varchar比char节省磁盘空间。
  • 但varchar类型的数据读写速度比char慢,因为char是连续的磁盘空间,而varchar在多次增删改查中会产生一些磁盘空间碎片

 三.数据库管理(增删改查)

3.1数据库的创建

create database dashuju;

3.2表的创建

#格式CREATE TABLE 表名(字段1 数据类型,字段2 数据类型[,...] [,PRIMARY KEY (主键名)]);create table class (id int not null,name char(15) not null,score decimal(4,2),passwd char(45) default'',primary key (id));#解释
id 字段:这是一个整数类型(int)字段,标记为"not null",表示该字段不允许存储NULL值。同时,它被指定为主键(primary key),这意味着每一行的id字段值必须是唯一的,通常用于唯一标识表中的每一条记录。name 字段:这是一个固定长度字符类型(char(15))字段,同样不允许存储NULL值。这意味着每个name字段的值必须是一个最多包含15个字符的字符串,若实际输入的字符数少于15个,剩余部分会被填充为空格以达到15个字符的长度。score 字段:这是一个十进制类型(decimal(4,2))字段,用于存储带小数点的分数。"(4,2)"表示该字段可以存储最大共4位数字,其中包含2位小数,例如0.00到999.99之间的数值。passwd 字段:这是一个固定长度字符类型(char(45))字段,用于存储密码信息,默认值(default)被设置为空字符串('')。这意味着如果没有为passwd字段提供值,它将自动填充一个空字符串。当这条SQL语句被执行后,数据库中将创建一个名为class的表,包含id、name、score和passwd这四个字段。

主键:共同点:字段的值都是唯一的,不允许有重复值。 

3.3插入数据

方式一:指定字段插入数据

​#为指定字段插入值INSERT INTO 表名(字段1,字段2[,...]) VALUES (字段1的值,字段2的值,...);    
#注意字段的属性not null,则必须为该字段插入值
insert into class (id,name,score,passwd) values(1,'张三',90,PASSWORD('123456'));

 大写的PASSWORD表明用密文表示

如果不加 PASSWORD,直接按照字段顺序插入 

为所有字段插入值
insert into 表名 values (所有字段的值);   
#每个字段值用逗号相隔;

这时密码由明文表示 

 3.4查找数据库表中的数据

 SELECT * FROM 表名;      #查询表中所有记录​#按条件查找数据记录,且只显示指定字段的值SELECT 字段名1,字段名2[,...] FROM 表名 [WHERE 条件表达式];​#mysql的分页语句:select * from 表名 limit 2; select * from 表名 limit 2,3;       
#显示第2行后的前3行(即显示第3~5行)

显示class表中的所有信息 

 

显示表中name=lisi的信息 (附带条件)

 显示表中id=2的信息 (附带条件)

 显示class表中第一行的信息

 

显示ky35表中第一行后的前两行,即显示2和3行 

3.5修改表中的数据 

UPDATE 表名 SET 字段名1=字段值1[,字段名2=字段值2] [WHERE 条件表达式];

 #如若不指定条件 那么修改更新的数据信息就是数据表中所有信息

#将数据表ky35中所有score字段都修改为90

#where代表条件判断 更新ky35数据表中的score段 id为2的用户信息的score字段修改为92

3.6删除表中的数据

 DELETE FROM 表名 [WHERE 条件表达式];     #删除一定要加条件,不然会删除整个表

 危险:删除一定要加条件,不然会删除整个表!!!

指定条件删除ky35表中id=2的数据 

 不加条件就是删除整个表,切勿删库

 3.7删除指定的表

DROP TABLE 数据库名.表名;
或
USE 库名;
DROP TABLE 表名;

删除了大数据库中的class表

3.8删除指定的库 

DROP DATABASE 数据库名;

删除了大数据库

四. 表结构的管理

4.1 修改表名

 ALTER TABLE 旧表名 RENAME 新表名

将原先的表ky35改名为ky36

4.2 扩展表结构(增加字段) 

 ALTER TABLE 表名 ADD 字段名 数据类型;

#修改数据表ky36内容 新增Phone的数据列 字段字节长度为11位 默认值为15252526801

 

 alter table ky36 add Phone varchar(11) default '15252526801';后还可以跟约束 例如not null为非空

 4.3 修改字段名,添加唯一键 change

 ALTER TABLE 表名 CHANGE 旧字段名 新字段名 [数据类型] [约束];

 

修改phone为num,并更换数据类型和添加约束 

 4.4 删除字段 drop

 ALTER TABLE 表名 DROP 字段名;

删除指定字段num 

4.5 克隆表

方式一:like方法
create table 新表名 like 旧表名;
#通过LIKE方法,复制旧表的结构生成新表insert into 新表名 (select * from 旧表名);     
#再将旧表数据导入新表

 将ky36复制到ky37

这时我们可以查看到ky37和ky36的结构一样 

将源表ky36的数据导入到ky37中 

方式二:Show create table方法
 create table 新表名 (select * from 旧表名);

和方法一对比,方法二并不能保持原有表的结构 

区别

第一种 迁移表  表的结构、属性、约束、数据都有

第二种  备份数据 表的复制内容(数据)

如果想将数据迁移到其他地方使用Like备份方法;

如果想只备份数据的内容可以使用第二种方法。

4.6临时表

临时建立的表,用于保存一些临时数据,不会长期存在(下次重新进入数据库即不存在)

如果在退出连接之前,也可以可执行增删改查等操作,比如使用DROP TABLE语句手动直接删除临时表。

CREATE TEMPORARY TABLE 表名(字段1 数据类型,字段2 数据类型[, ...] [, PRIMARY KEY (主键名)]);

临时表创建和正常表格一样

create temporary table class1 (id int(6) zerofill primary key auto_increment,name varchar(20) not null,cardid int(18) not null unique key,hobby varchar(30),haoma int(11));#解释
这条SQL语句用于创建一个临时表class1,临时表只在当前会话期间存在,会话结束后自动删除。临时表的具体结构如下:id 字段:整数类型(int),设置了宽度为6且自动填充零(zerofill),这意味着即使实际值小于6位数,也会在其前面填充零以使总长度达到6位。同时,该字段被定义为主键(primary key)和自动递增(auto_increment),这意味着每当插入新行时,id字段的值会自动加1,且每一行的id值在整个临时表中必须是唯一的。name 字段:变长字符串类型(varchar(20)),不允许存储NULL值(not null),最多可存储20个字符长度的字符串。cardid 字段:整数类型(int),宽度为18,也不允许存储NULL值。该字段还被定义为唯一键(unique key),即在cardid列中的所有值必须独一无二,不可重复。hobby 字段:变长字符串类型(varchar(30)),可以存储最多30个字符长度的兴趣爱好描述,允许存储NULL值。haoma 字段:整数类型(int),宽度为11,可以存储不超过11位的整数电话号码,允许存储NULL值。执行这条SQL语句后,将在当前数据库会话中创建一个临时表class1,具备上述五个字段和相应的约束条件。

 

建好临时表class1却看不到 

可以查询出临时表class1

插入数据 

退出mysql后重新登陆 

这时再查询时,会发现临时表已经被释放了,因为临时表是存在内存中的,一旦推出就会被释放 

 4.7清除表的三种方式

delete清空 
 delete from 表名;
truncate清空 
 truncate table 表名;  
drop清空 
drop table 表名;  
区别

delete 清空属于按照行清空,一行一行进行,效率低,速度慢(对于表数据较多的情况) truncate 相当于删除表数据,保留表结构,重新创建一个与原表结构相同的表 

当数据表中有自增型约束字段时,delete 清除表数据后,在插入数据时,自增字段的数值会接着被删除表数据的最后一个自增数,计数。(eg:被删除表数据最后一行id(自增),为10,再创建时,该id从11开始)。truncate 清空后,自增型字段会从1开始计数。

当不再需要一张表的时候使用Drop;想保留部分数据的时候使用Delete,并且带上Where语句;保留表而删除所有数据的时候用Truncate 

五.数据库用户管理 

5.1. 登录用户的管理

明文密码创建用户格式:


CREATE USER '用户名'@'来源地址' [IDENTIFIED BY [PASSWORD] '密码'];
  • 来源地址:可以指定为localhost本机,也可以指定%(代表任意地址),或者指定为192.168.241.%(代表192.168.241网段的主机都可以登录)
  • IDENTIFIED BY:不能省略,如果省略,用户密码将为空(不建议使用)
  • 密码:若使用明文密码,直接输入密码即可,键入到数据库中数据库会自动加密;若使用加密密码,需要先使用Select PASSWORD('密码')命令,来获取加密密码,再将获取到的加密密码添加到PASSWORD中

新建一个用户名为zk,地址为本机,密码为123的用户

加密密码创建用户:

 SELECT PASSWORD('密码');    #先获取加密的密码​CREATE USER 'zk1'@'localhost' IDENTIFIED BY PASSWORD '加密的密码';

查看用户信息,创建后的用户保存在mysql数据库的user表里

use mysql;select user,authentication_string,Host from user;

5.2查看用户密码的信息

用户信息存放在 mysql 数据库下的 user 表(MySQL 服务下存在一个系统自带的 mysql 数据库)。

 

找到了我们创建的用户zk,并且发现他的密码自动生成了密文 

5.3  登录用户用户名的更改 (重命名)

rename user 'zk'@'locahost' to 'zk2'@'localhost'

 

 

5.4修改用户密码

 set password = password('123');

 5.5删除登录用户

drop user 'zk2'@'localhost';

5.6 修改其他用户密码 

set password for 'zk1'@'locahost' = password('123456');

普通用户只有修改自身密码的权限

root用户是超级管理员,它不仅可以修改自身密码,还能修改其他用户的密码。 

5.7 忘记root密码的解决方法 

在数据库本机的root用户才可执行

修改 /etc/my.cnf 配置文件,免密登录mysql 

 在服务端里面添加:

使登录mysql不使用授权表,添加到23行:skip-grant-tables

重启数据库服务 

免密登录之后,修改数据库用户中的 root 密码 

update mysql.user SET AUTHENTICATION_STRING = PASSWORD('123') where user='root'
#用于更新MySQL数据库系统表mysql.user中的用户root的密码。AUTHENTICATION_STRING是MySQL 5.7.0以后版本中用于存储密码的字段名

flush privileges;   #刷新数据库配置

 

退出并登录测试新密码
撤销添加的免密码认证设置,重启数据库服务

加上#注释掉这一行 

 六.数据库用户权限管理

6.1常见的用户权限

权限   权限说明   权限级别
CREATE    创建数据库、表或索引的权限    数据库、表或索引
DROP   删除数据库或表的权限    数据库或表
GRANT OPTION      赋予权限选项 数据库或表
REFERENCES   引用权限    数据库或表
ALTER    更改表的权限   数据表
DELETE     删除表数据的权限  数据表
INDEX     操作索引的权限   数据表
INSERT    添加表数据的权限   数据表
SELECT   查询表数据的权限   数据表
UPDATE   更新表数据的权限   数据表
CREATE VIEW      创建视图的权限 视图
SHOW VIEW      查看视图的权限 视图
ALTER ROUTINE    更改存储过程的权限   存储过程
CREATE ROUTINE   创建存储过程的权限    存储过程
EXECUTE    执行存储过程权限   存储过程
FILE     服务器主机文件的访问权限  文件管理
CREATE TEMPORARY TABLES      创建临时表的权限 服务器管理
LOCK TABLES   锁表的权限   服务器管理
CREATE USER     创建用户的权限 服务器管理
RELOAD       执行 flush privileges, refresh, reload 等刷新命令的权限服务器管理
PROCESS       查看进程的权限 服务器管理
REPLICATION CLIENT      查看主从服务器状态的权限  服务器管理
REPLICATION SLAVE      主从复制的权限 服务器管理
SHOW DATABASES    查看数据库的权限   服务器管理
SHUTDOWN     关闭数据库的权限   服务器管理
SUPER    超级权限    服务器管理
ALL [PRIVILEGES]    所有权限
USAGE       没有任何权限  

6.2查看用户已有权限的操作 

show grants;
#查看当前用户(自己)的权限

root用户拥有所有权限,以及给别人授权的权限 

show grants for 'zk1'@'locahost';#查看其他用户的权限

 只拥有登陆权限,默认还拥有更改自己密码

6.3 授权操作

[NO_AUTO_CREATE_USER], 即在grant语句中禁止创建空密码的账户,使用grant语法创建用户必须带上 “identified by”关键字设置账户密码,否则就被认为是非法的创建语句。  

对存在的用户进行授权
GRANT 权限列表 ON 数据库名.表名 TO '用户名'@'来源地址' [IDENTIFIED BY '密码'];
  • 权限列表:  用于列出授权使用的各种数据库操作,以逗号进行分隔如"select, insert,update"。 使用"all"表示所有权限(实际上部分权限仍无法使用,只包括大部分权限),可授权执行任何操作。
  • 数据库名.表名:  用于指定授权操作的数据库和表的名称,其中可以使用通配符*。 例如,使用"mysql.*" 表示授权操作的对象为mysql数据库中的所有表。  ​  '用户名'@'来源地址':  用于指定用户名称和允许访问的客户机地址,即谁能连接、能从哪里连接。 来源地址可以是域名、IP地址,还可以使用“%”通配符,表示某个区域或网段内的所有地址。
  • IDENTIFIED BY:  用于设置用户连接数据库时所使用的密码字符串。在新建用户时,若省略"IDENTIFIED BY"部分,则用户的密码将为空。
grant select,insert on yunjisuan.ky35 to 'zk1'@'locahost';show grants for 'zk1'@'locahost';

赋予了用户zk1 查询ky35表和插入表数据的权限

 对不存在的用户进行创建并授权 
 GRANT ALL PRIVILEGES ON *.* TO  '用户名'@'来源地址' IDENTIFIED BY '密码';

 创建了用户zk2,并赋予了他所有权限

 撤销用户权限
 revoke 权限列表/ALL on 库名.表名 from '用户名'@'来源地址';

*.*代表任意库的任意表

6.4用户远程登录 

用户授权
 grant all privileges on *.* to 'zk2'@'192.168.209.%' identified by '123';

使用Navicat图形化工具远程连接 

七.总结

查看数据库、数据表和表结构的操作

  • 查看数据库show databases
  • 查看数据表show tables
  • 查看表结构describe tablename或desc tablename

创建库和表的操作及删除库和表的操作

  • 创建库create database databasename
  • 创建表create table tablename
  • 删除库drop database databasename
  • 删除表drop table tablename

 数据表的增、删、改、查等操作

  • 数据表增:Insert into tablename
  • 数据表改:update tablename set 指定内容
  • 数据表删:delete from tablename
  • 数据表查:select(*、where、limit、\G)
  • 数据表结构名称改:alter table tablename rename 新名称
  • 数据表扩展结构增:alter table tablename add 扩展名
  • 数据表字段内容改:alter table tablename change 原结构字段名称 新结构字段名称
  • 数据表字段内容删:alter table tablename drop 指定结构字段

数据库表的清空表、临时表和克隆表操作

清空表
  • delete from tablename
  • truncate table tablename
  • drop from tablename
临时表

create temporary tabletablename

克隆表
  • Like方法:create table 新表 like旧表------->insert into 新表 select *from旧表
  • Show create table方法:create table 新表(select * from 旧表)

数据库的用户授权相关操作

数据库用户管理
  • 新建用户:create user '用户名'@'localhost(或者指定IP)' identified by '密码'
  • 重命名:rename user '旧用户名'@'localhost(或者指定IP)' to '新用户名'@'localhost(或者指定IP)'
  • 删除用户:drop user '用户名'@'localhost(或者指定IP)'
  • 修改当前密码:set password = password('密码')
  • 修改其他用户密码:set password for '用户名'@'localhost' = password('新密码');
  • 修改密码:update mysql.user set authentication_string = password('abc123') where user='root'
  • 修改密码:flush privileges------>set password for root@localhost=password('123123')
数据库授权
  • 授权:grant 权限列表 ON 数据库名.表名 to '用户名'@'来源地址' identified by '密码'
  • 查看权限:show grants '用户名'@'来源地址'
  • 撤销权限:revoke 权限列表 on 数据库名.表名 from '用户名'@'来源地址'

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

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

相关文章

解决方案:如何安装neo4j软件

文章目录 一、安装JDK二、安装neo4j 一、安装JDK 第一步先安装JDK,因为neo4j环境需要JDK,过程比较多,截图如下: 安装JDK网址 https://www.oracle.com/java/technologies/downloads winR,输入cmd,再输入j…

Linux V4L2 应用编程

V4L2:Video4Linux2,是 Linux 内核中的一个框架,提供了一套用于视频设备驱动程序开发的 API。它是一个开放的、通用的、模块化的视频设备驱动程序框架,允许 Linux 操作系统和应用程序与各种视频设备(如摄像头、视频采集…

外推蜘蛛池的优势及优势?

源码介绍: 适用使用范围: 外推蜘蛛池、站群 演示地址:以截图为准 运行环境:php 其余注释:什么是蜘蛛池? 蜘蛛池是一个利用大平台权重来获取百度收录和排名的程序。 程序员通常称其为“蜘蛛池”。 这是一个可以快速…

Spring-声明式事务实例(有详细注释)

前提知识 Spring-IOC容器注解方式使用https://blog.csdn.net/m0_61160520/article/details/136784799?spm1001.2014.3001.5501切点表达式https://blog.csdn.net/m0_61160520/article/details/136782885?spm1001.2014.3001.5501 案例 1.创建项目 2.导入依赖 <dependen…

Cache缓存:HTTP缓存策略解析

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

select , poll, epoll思维导图

目录 1. 总的框架结构 2. select 3. poll 4. epoll 1. 总的框架结构 2. select

SpringCloud-Gateway服务网关

一、网关介绍 1. 为什么需要网关 Gateway网关是我们服务的守门神&#xff0c;所有微服务的统一入口。 网关的核心功能特性&#xff1a; 请求路由 权限控制 限流 架构图&#xff1a; 权限控制&#xff1a;网关作为微服务入口&#xff0c;需要校验用户是是否有请求资格&am…

使用阿里云服务器搭建网站教程,超简单10分钟网站上线

使用阿里云服务器快速搭建网站教程&#xff0c;先为云服务器安装宝塔面板&#xff0c;然后在宝塔面板上新建站点&#xff0c;阿里云服务器网aliyunfuwuqi.com以搭建WordPress网站博客为例&#xff0c;来详细说下从阿里云服务器CPU内存配置选择、Web环境、域名解析到网站上线全流…

基于python+vue分类信息服务平台移动端的设计与实现flask-django-php-nodejs

分类信息服务平台是在Android操作系统下的应用平台。为防止出现兼容性及稳定性问题&#xff0c;框架选择的是django&#xff0c;Android与后台服务端之间的数据存储主要通过MySQL。用户在使用应用时产生的数据通过 python等语言传递给数据库。通过此方式促进分类信息服务平台信…

蓝桥杯单片机快速开发笔记——PCF8591的DAC模拟电压输出

一、原理分析 PCF8591电压信号探测器&#xff1a;http://t.csdnimg.cn/R38tC IIC原理&#xff1a;http://t.csdnimg.cn/v4dSv IIC指令&#xff1a;http://t.csdnimg.cn/RY6yi HC573/HC138&#xff1a;http://t.csdnimg.cn/W0a0U 数码管&#xff1a;http://t.csdnimg.cn/kfm9Y 独…

鸿蒙OpenHarmony开发实战:【MiniCanvas】

介绍 基于OpenHarmony的Cavas组件封装了一版极简操作的MiniCanvas&#xff0c;屏蔽了原有Canvas内部复杂的调用流程&#xff0c;支持一个API就可以实现相应的绘制能力&#xff0c;该库还在继续完善中&#xff0c;也欢迎PR。 使用说明 添加MiniCanvas依赖 在项目entry目录执行…

Docker学习笔记 - 常用命令

目录 基本概念常用命令使用docker compose启动脚本创建自己的image Docker命令文档 1. 下载一个image 从hub.docker.com下载一个image。 docker pull [image name]下载时指定image的tag。 docker pull [image name]:<tag>举例&#xff0c;下载postgre的tag为alpine…

CPP容器vector和list,priority_queue定义比较器

#include <iostream> #include <bits/stdc.h> using namespace std; struct VecCmp{bool operator()(int& a,int& b){return a>b;/*** 对于vector和list容器&#xff0c;这里写了&#xff1e;就是从大到小* 对于priority_queue容器&#xff0c;这里写…

配置java8和java11以及输入version命令没反应问题

电脑重置重新安装java8和java11记录一下供自己观看 安装过程掠过我自己能看懂就行 需要记录一下 因为JDK11以后Oracle把JRE集成到了JDK中&#xff0c;在安装JDK11及更高版本的JDK时&#xff0c;默认是不会自动安装JRE的。在jdk11的安装目录下打开命令行窗口或者shift鼠标右键…

婚恋小程序开发的资质需要哪些?维护成本高吗?

随着互联网的高速发展&#xff0c;人们的生活方式也在发生着翻天覆地的变化。在这个变化中&#xff0c;婚恋市场也逐渐走向了线上&#xff0c;婚恋小程序应运而生。那么&#xff0c;开发一款婚恋小程序需要哪些资质呢&#xff1f;维护成本又高不高呢&#xff1f;本文将从这两个…

2024年新算法!PCA+CPO+K-means聚类,冠豪猪优化器(CPO)优化K-means,适合学习,也适合发paper

2024年新算法&#xff01;PCACPOK-means聚类&#xff0c;冠豪猪优化器&#xff08;CPO)优化K-means&#xff0c;适合学习&#xff0c;也适合发paper。 一、冠豪猪优化器 摘要&#xff1a;受冠豪猪(crest Porcupine, CP)的各种防御行为启发&#xff0c;提出了一种新的基于自然…

【C语言】结构体与位段

一、前言 我们之前学习过定义一个整型类型的变量又或者定义一个浮点型类型的变量...&#xff0c;这些变量可以描述一个整数又或者描述一个小数...&#xff0c;可无论是整数还是小数...&#xff0c;它们也只是简单对象。如果我们想要描述像一本书&#xff0c;一个人这种复杂对象…

【算法与数据结构】深入二叉树实现超详解

文章目录 &#x1f4dd;前言&#x1f320; 接口函数✏️ 实现函数&#x1f309;创建树的新节点&#x1f320;通过前序遍历的数组构建二叉树&#x1f309;包装通过前序遍历的数组构建二叉树&#x1f320;二叉树的销毁&#x1f320;层次遍历&#x1f320;第一种实现&#xff1a;不…

Android: Gradle 命令

一、查看整个项目依赖传递关系 x.x.x (*) 该依赖已经有了&#xff0c;将不再重复依赖。x.x.x -> x.x.x 该依赖的版本被箭头所指的版本代替。x.x.x -> x.x.x(*) 该依赖的版本被箭头所指的版本代替&#xff0c;并且该依赖已经有了&#xff0c;不再重复依赖。 1. gradlew ap…

002 高并发内存池_定长内存池设计

​&#x1f308;个人主页&#xff1a;Fan_558 &#x1f525; 系列专栏&#xff1a;高并发内存池 &#x1f339;关注我&#x1f4aa;&#x1f3fb;带你学更多知识 文章目录 前言一、设计整体框架二、New操作&#xff08;申请空间&#xff09;三、Delete操作&#xff08;用自由链…