Mysql数据库的SQL语言详解

news2024/9/22 15:33:37

目录

一、数据库的基础操作

1、数据库的基本查看和切换

1.1 查看数据库信息

1.2 切换数据库

1.3 查看数据库中的表信息

1.4 查看数据库或数据库中表的结构(字段)

1.5 数据类型 

1.5.1 整数型

1.5.2 浮点型(float和double)

1.5.3 定点数

1.5.4 字符串

1.5.5 日期和时间类型

1.6 数据类型的修饰符

1.6.1 适用所有类型的修饰符

1.6.2 适用数值型的修饰符

2、使用SQL语言管理数据库

2.1 SQL语言的概述

2.2 管理数据库(DDL)

2.2.1 创建库或表

2.2.2 删除库或表

2.3 管理表中的数据(DML)

2.3.1 表中插入数据

2.3.2 修改表中的数据

2.3.3 删除表中的数据 

2.4 查询表中的数据(DQL)

2.4.1 未指定条件查询

2.4.2 指定条件查询

2.5 修改表名和表结构(DCL)

2.5.1 修改表名

2.5.2 修改表结构

二、数据库的高级操作

1、清空表命令的区别

1.1 drop table 表名

1.2 truncate table 表名

1.3 delete from 表名

2、创建临时表

3、克隆表

三、数据库用户管理

1、登录用户管理

1.1 新建并查看用户

1.2 修改用户的用户名和密码

1.2.1 修改用户的用户名

1.2.2 修改用户密码

1.3 删除用户

1.4 忘记root密码解决方法

2、登录用户权限管理

2.1 常见的用户权限

2.2 查看用户已有权限

2.3 授权操作

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

2.3.2 对存在的用户进行授权

2.4 撤销用户权限


一、数据库的基础操作

1、数据库的基本查看和切换

1.1 查看数据库信息

show databases;      #查看数据库信息

1.2 切换数据库

use  数据库名;         #切换至具体的数据库

1.3 查看数据库中的表信息

show tables;                     #查看当前所处数据库的表信息
show tables in 数据库名;         #查看指定数据库的表信息

1.4 查看数据库或数据库中表的结构(字段)

describe(简写:desc)  表名               #查看当前所处数据库的指定表的结构
describe(简写:desc)  数据库.表名        #查看指定数据库中表的结构

describe(简写:desc)  表名\G             #查看当前所处数据库的指定表的结构
describe(简写:desc)  数据库.表\G        #查看指定数据库中表的结构

1.5 数据类型 

MySQL支持多种内置数据类型,分别为数值类型、日期/时间类型、字符串(字符)类型

数据类型参考链接:https://dev.mysql.com/doc/refman/8.0/en/data-types.html

1.5.1 整数型
  • tinyint(m) :1个字节 范围(-128~127) 有一个正或负的表示符

  • smallint(m): 2个字节 范围(-32768~32767)

  • mediumint(m) :3个字节 范围(-8388608~8388607)

  • int(m): 4个字节 范围(-2147483648~2147483647)

  • bigint(m) :8个字节范围(+-9.22*10的18次方)

上述数据类型,如果加修饰符unsigned后,则最大值翻倍

如:tinyint unsigned的取值范围为(0~255)

1.5.2 浮点型(float和double)
  • float(m,d) :单精度浮点型 8位精度(4字节) m总个数,d小数位, 注意: 小数点不占用总个数
  • double(m,d) :双精度浮点型 m16位精度(8字节) m总个数,d小数位, 注意: 小数点不占用总个数

如:一个字段定义为float(6,3),如果插入一个数123.45678,实际数据库里存的是123.456,但总个数还以实际为准,即6位

1.5.3 定点数

在数据库中存放的是精确值,存为十进制 decimal(5.2) 100.01 - 999.99

格式 decimal(m,d) 表示 最多 m 位数字,其中 d 个小数,小数点不算在长度内,参数m<65 是总个数,d<30且 d<m 是小数位

如: decimal(6,2) 总共能存6位数字,末尾2位是小数,字段最大值 9999.99 (小数点不算在长度内)

1.5.4 字符串
类型大小用途
char0-255 bytes定长字符串
varchar0-65535 bytes变长字符串
tinyblob0-255 bytes不超过 255 个字符的二进制字符串
tinytext0-255 bytes短文本字符串
blob0-65 535 bytes二进制形式的长文本数据
text0-65 535 bytes长文本数据
mediumblob0-16 777 215 bytes二进制形式的中等长度文本数据
mediumtext0-16 777 215 bytes中等长度文本数据
longblob0-4 294 967 295 bytes二进制形式的极大文本数据
longtext0-4 294 967 295 bytes极大文本数据

char和varchar的比较:

参考:https://dev.mysql.com/doc/refman/8.0/en/char.html
charvarchar
存储固定长度的字符串存储可变长度的字符串
存储时会根据定义的长度固定占用空间,如果存储的字符串长度小于定义的长度,会在后面补空格存储时根据实际数据长度动态分配空间,只占用实际数据长度加上一定的长度描述开销
适用于存储长度固定的数据,比如固定长度的代码或者状态适用于存储长度可变的数据,比如变长的描述文本或者用户名
如果存储的数据大部分是相同长度的,使用CHAR可能比较高效如果存储的数据长度变化较大,使用VARCHAR可以节省空间

如:

Valuechar(4)Storage RequiredvarcharStorage Required
''''4 bytes''1 byte
'ab''ab'4 bytes'ab'3 bytes
'abcd''abcd'4 bytes'abcd'5 bytes
'abcdefgh''abcd'4 bytes'abcd'5 bytes
  • char(n) 若存入字符数小于n,则以空格补于其后,查询之时再将空格去掉,所以char类型存储的字符串末尾不能有空格,varchar不限于此
  • char(n) 固定长度,char(4)不管是存入几个字符,都将占用4个字节,varchar是存入的实际字符数+1个字节,所以varchar(4),存入3个字符将占用4个字节
  • 如果存入n多个字符数,则char(n)和varchar(n)就会截取前n个
  • char类型的字符串检索速度要比varchar类型的快

拓展:varchar(50) 能存放几个 UTF8 编码的汉字?

答:mysql 5.0以上版本 varchar(50) 指的是50字符,无论存放的是数字、字母还是 utf8 编码的汉字,都可以存放50个 

1.5.5 日期和时间类型

表示时间值的日期和时间类型为datetime、date、timestamp、time和year

每个时间类型有一个有效值范围和一个"零"值,当指定不合法的MySQL不能表示的值时使用"零"值

类型大小 ( bytes)范围格式用途
date31000-01-01/9999-12-31YYYY-MM-DD日期值
time3'-838:59:59'/'838:59:59'HH:MM:SS时间值或持续时间
year11901/2155YYYY年份值
datetime81000-01-01 00:00:00/9999-12-31 23:59:59YYYY-MM-DD HH:MM:SS混合日期和时间值
timestamp41970-01-01 00:00:00/2038结束时间是第 2147483647 秒,北京时间 2038-1-19 11:14:07,格林尼治时间 2038年1月19日 凌晨 03:14:07YYYYMMDD HHMMSS混合日期和时间值,时间戳

1.6 数据类型的修饰符

1.6.1 适用所有类型的修饰符
名称说明
null数据列可包含NULL值,默认值
not null数据列不允许包含NULL值,*为必填选项
default默认值
primary key主键,所有记录中此字段的值不能重复,且不能为NULL
unique key唯一键,所有记录中此字段的值不能重复,但可以为NULL
character setname 指定一个字符集
1.6.2 适用数值型的修饰符
名称作用
auto_increment自动递增,适用于整数类型
unsigned无符号

2、使用SQL语言管理数据库

2.1 SQL语言的概述

什么是SQL语言: 

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

SQL中的名词:

  • 数据库:database
  • 表:table,行:row 列:column
  • 索引:index
  • 视图:view
  • 存储过程:procedure
  • 存储函数:function
  • 触发器:trigger
  • 事件调度器:event scheduler,任务计划
  • 用户:user
  • 权限:privilege

数据库对象和命名:

  • 数据库的组件(对象)

数据库、表、索引、视图、用户、存储过程、函数、触发器、事件调度器等。

  • 命名规则

①必须以字母开头,后续可以包括字母,数字和三个特殊字符(# _ $)
②不要使用MySQL的保留字,如 table、select、show、databases。
③数据库名、表名、用户名区分大小

SQL语言规范:

  • 在数据库系统中,SQL 语句不区分大小写,建议用大写。
  • SQL语句可单行或多行书写,默认以 " ; " 结尾。
  • 关键词不能跨多行或简写。
  • 用空格和TAB 缩进来提高语句的可读性。
  • 子句通常位于独立行,便于编辑,提高可读性。

SQL语言的分类: 

  • DDL:数据定义语言(Data Definition Language),用于创建数据库对象,如库、表、索引等。

如:create,drop,alter等。

  • DML:数据操纵语言(Data Manipulation Language),用于对表中的数据进行管理。

如:select、update、insert、delete 等。

  • DQL:数据查询语言( Data Query Languag ),用于从数据表中查找符合条件的数据记录。

如:select

  • DCL:数据控制语言(Data Control Language),用于设置或者更改数据库用户或角色权限

如:grant,revoke

  • TCL:事务控制语言(Transaction Control Language),用于管理数据库中的事务。 TCL经常被用于快速原型开发、脚本编程、GUI和测试等方面。

如: commit,rollback,savepoint

2.2 管理数据库(DDL)

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

2.2.1 创建库或表
#创建新的数据库
create database 数据库名;

#创建数据库中新的表
create table (字段1 数据类型,字段2 数据类型[,...][,PRIMARY KEY (主键名)]);
#主键一般选择能代表唯一性的字段不允许取空值(NULL),一个表只能有一个主键
create database xgy;
show databases;
use xgy;

create table dianzi (id int not null,name char(10) not null,score decimal(4,2),passwd char(50) default'',primary key (id));

create table tongxin (id int not null,name char(10) not null,score decimal(4,2),passwd char(50) default'',primary key (id));
#创建表名为tongxin的表:且第一列为id、数据类型为整型,不能为空;第二列为name、数据类型为固定长度的字符类型为10字节,不能为空;第三列为score、数据类型为指定长度数组、第四列为passwd、数据类型为固定长度的字符类型为50字节,默认可为空;指定主键为id列

show tables;

desc dianzi;

2.2.2 删除库或表
#删除指定的数据库
drop  database 数据库名;

#删除当前数据库中的指定表
drop table 表名;
#删除指定的数据库中的表
drop table 数据库名.表名;

2.3 管理表中的数据(DML)

对表中的数据进行管理,用来插入、删除和修改数据库中的数据

2.3.1 表中插入数据
insert into 表名(字段1,字段2[,...]) values (字段1的值,字段2的值,...);
insert into 表名 values (字段1的值,字段2的值,...);
#指定字段插入对应的字段值
insert into dianzi(id,name,score,passwd) values(1,'cxy',88,'123456');
#不指定字段,按创建表时的字段,对应插入字段的值
insert into dianzi values(2,'zly',95,password('654321'));
#其中password指加密显示密码
select * from dianzi;    #查询表中所有数据

2.3.2 修改表中的数据
UPDATE 表名 SET 字段名1=字段值1[,字段名2=字段值2] [WHERE 条件表达式];
#改score值
update dianzi set score=70 where name='cxy';
select * from dianzi;
update dianzi set score=90 where id='1';
select * from dianzi;

#改name值
update dianzi set name='xz' where id='2';
update dianzi set name='wuq' where score='90.00';
select * from dianzi;

2.3.3 删除表中的数据 
delete from 表名 where 条件表达式;      #删除具体的一条数据
delete from 表名;     #删除表里所有的数据,但字段和结构还存在
delete from dianzi where name='xz';
select * from dianzi;
delete from dianzi;
select * from dianzi;

2.4 查询表中的数据(DQL)

SELECT 字段名1,字段名2[,...] FROM 表名[WHERE 条件表达式];
2.4.1 未指定条件查询
select * from 表名[\G]            #查询当前所处库中表里的数据
select * from 库名.表名[\G]       #查询指定数据库中表里的数据

2.4.2 指定条件查询
select 字段名1,字段名2,……  from 表名 where 条件表达式;
select * from dianzi;
select name,score from dianzi;
select name,score from dianzi where name='cqq';
select score from dianzi where name='cqq';

#行显示
select * from dianzi limit 3;
select * from dianzi limit 3,2;
select id,name from dianzi limit 3;

2.5 修改表名和表结构(DCL)

2.5.1 修改表名
#修改表名
alter table 旧表名 rename 新表名;

2.5.2 修改表结构

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

alter table 表名 add 字段名 varchar(50) default '地址不详';
#default '地址不详':表示此字段设置默认值为地址不详,可与NOT NULL配合使用
alter table dianzi add address varchar(50) default '地址不详';
desc dianzi;
select * from dianzi;

update dianzi set address='江苏南京' where id='1';

(2)修改字段(列)名,添加唯一键

alter table 表名 change 旧列名 新列名 数据类型 [unique key];
#unique key:唯一键(特性:唯一,但可以为空,空值只允许出现一次)   
#Primary key:唯一且非空(主键一般选择能代表唯一性的字段不允许取空值(NULL),一个表只能有一个主键。)
alter table dianzi change name mingzi varchar(15) unique key;

insert into dianzi values(4,'zly',55,password('444444'),'浙江杭州');
insert into dianzi values(4,'cqq',55,password('444444'),'浙江杭州');

(3)删除字段

alter table 表名 drop 字段名;

(4)修改字段类型

alter table 表名 modify column 字段名 类型;
#数据库中表字段是varchar(50),修改类型可以用modify(谨慎修改类型,可能会导致原有数据出错)
alter table dianzi modify column mingzi char(20);
desc dianzi\G;

二、数据库的高级操作

1、清空表命令的区别

特性/命令drop table 表名truncate table 表名delete from 表名
语言类属于DDL属于DDL属于DML
回滚恢复不可回滚(无法恢复)不可回滚(无法恢复)可回滚(可恢复)
是否带where不可带where不可带where

可带where

删除情况表内容和结构删除表内容删除(结构保留)表结构保留,表内容视where执行情况
删除速度删除速度快删除速度快删除速度慢,需要逐行删

1.1 drop table 表名

drop table语句用于完全删除表,包括表结构和所有数据。执行drop table将永久删除整个表,需要小心使用,因为数据无法恢复

1.2 truncate table 表名

truncate清空表后,没有返回被删除的条目

truncate table语句用于从表中删除所有行,但保留表的结构。它比delete语句更快,因为它不是逐行删除,而是直接删除整个表的数据,ID会从1开始重新记录

insert into tongxin(name,score,passwd) value('mimi',54,password('123456'));

1.3 delete from 表名

delete清空表后,返回的结果内有删除的记录条目

delete工作时是一行一行的删除记录数据的;如果表中有自增长字段,使用delete from删除
所有记录后,再次新添加的记录会从原来最大的记录ID后面继续自增写入记录

insert into tongxin(name,score,passwd) value('mimi',54,password('123456'));

2、创建临时表

可以创建临时数据库(Temporary Database)来存储临时数据或执行临时操作。临时数据库是在当前连接会话中创建的数据库,当会话结束时,临时数据库会自动删除,不会保留数据或数据库结构。这对于需要临时存储数据或执行临时操作而不想在数据库中永久保存这些数据时非常有用

create temporary table 表名 (字段1 数据类型,字段2 数据类型[, ...]
create temporary table class (id int(4) zerofill primary key auto_increment,name varchar(15) not null,cardid int(18) not null unique key,work varchar(60));

#int(4) zerofill:表示若数值不满4位数,则前面用"0"填充,例0001
#auto_increment:表示此字段为自增长字段,即每条记录自动递增1,默认从1开始递增;自增长字段数据不可以重复;自增长字段必须是主键;如添加的记录数据没有指定此字段的值且添加失败也会自动递增一次
#unique key:表示此字段唯一键约束,此字段数据不可以重复:一张表中只能有一个主键,但是一张表中可以有多个唯一键
#not null:表示此字段不允许为NULL

insert into class values(1,'xyh',32011063,'student');
insert into class values(2,'lyq',13425576,'player');
insert into class values(3,'cht',13425576,'cooker');
insert into class values(3,'cht',14257396,'cooker');

insert into class(name,cardid,work) values('whr',87654321,'teacher');

当退出数据库再重新进入,临时数据库会自动删除,不会保留数据或数据库结构

3、克隆表

克隆表是基于现有表结构和数据创建一个全新的表,新表与原表具有相同的结构和数据,但是它们是独立的

方法一:建议迁移数据时使用

create table dianzi2 like dianzi;      #复制dianzi表的格式字段
insert into dianzi2 select * from dianzi;      #复制dianzi表中的数据内容

方法二:建议备份数据时使用

create table dianzi3 (select * from dianzi);     #一条命令实现复制字段和内容,不包括结构

三、数据库用户管理

1、登录用户管理

1.1 新建并查看用户

create user '用户名'@'来源地址' [identified by [password] '密码'];
 
#说明
#'用户名':指定将创建的用户名
#'来源地址':指定新创建的用户可在哪些主机上登录,可使用IP地址、网段、主机名的形式,本地用户可用localhost,允许任意主机登录,可用通配符%
#'密码':若使用明文密码,直接输入'密码',插入到数据库时由Mysql自动加密
若使用加密密码,需要先使用select password('密码');获取密文,再在语句中添password '密文';
若省略“identified by"部分,则用户的密码将为空(不建议使用)

明文密码创建登录用户:

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

create user 'dh'@'localhost' identified by '123456';
use mysql;
select * from user\G;      #查看登录用户详细信息

加密密码创建登录用户:

select password('123456');    #先获取加密的密码​
create user 'xz'@'localhost' identified by password '*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9';

select user,authentication_string,Host from user;   
#查看用户信息,创建后的用户保存在mysql数据库的user表里

1.2 修改用户的用户名和密码

1.2.1 修改用户的用户名
rename user 'xz'@'localhost' to 'xxy'@'localhost';

1.2.2 修改用户密码

修改当前用户密码:

 set password = password('abc123');

修改指定用户密码: 

普通用户只有修改自身密码的权限;root用户是超级管理员,它不仅可以修改自身密码,还能修改其他用户的密码

set password for 'cxy'@'localhost'=password('123456');

1.3 删除用户

drop user 'xxy'@'localhost';

1.4 忘记root密码解决方法

该操作必须是在数据库本机且为root用户,才可进行

(1)修改 /etc/my.cnf 配置文件,添加免密登录mysql,并重启数据库服务

[root@localhost ~]#vim /etc/my.cnf
[mysqld]
skip-grant-tables    
#添加,使登录mysql不使用授权表
[root@localhost ~]#systemctl restart mysqld.service

(2)无密码登录之后,修改数据库用户中的 root 密码

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

(3)登录测试新密码

(4)撤销添加的免密码认证设置,重启数据库服务

[root@localhost ~]#vim /etc/my.cnf
[mysqld]
#skip-grant-tables    
#撤销添加的免密码认证设置
[root@localhost ~]#systemctl restart mysqld.service

2、登录用户权限管理

2.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  查看主从服务器状态的权限服务器管理
relication slave        主从复制的权限服务器管理
show databases           查看数据库的权限服务器管理
shutdown             关闭数据库的权限服务器管理
super            超级权限  服务器管理
all [privilege]    所有权限    
usage没有任何权限   

2.2 查看用户已有权限

查看当前用户(自己)的权限:

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

查看其他用户的权限:

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

2.3 授权操作

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

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

grant 权限列表 on 数据库名.表名 to  '用户名'@'来源地址' identified by '密码';
如:grant all on *.* to  'xz'@'localhost' identified by '123';
#给用户xz授予本地登录的所有操作权限

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

use mysql;
select user,authentication_string,Host from user;
show grants for 'cxy'@'172.16.12.%';

mysql服务器本地连接查看: 

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

2.3.2 对存在的用户进行授权
grant all on xgy.dianzi to 'dh'@'localhost';
show grants for 'dh'@'localhost';

登录到被授权的用户进行测试: 

update dianzi set score=99 where id='1';
delete from dianzi where id='5';
select * from dianzi;

2.4 撤销用户权限

 revoke 权限列表/all on 库名.表名 from '用户名'@'来源地址';
 revoke all on xgy.dianzi from 'dh'@'localhost';

登录到用户dh进行测试:

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

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

相关文章

鸿蒙一次开发,多端部署(五)页面开发的一多能力介绍

本章介绍如何使用方舟开发框架“一多”能力&#xff0c;开发出在多设备上正常显示的页面。方舟开发框架推荐开发者使用声明式开发范式开发应用&#xff0c;故本章的内容和示例都主要基于声明式开发范式。本章主要包含如下内容&#xff1a; 布局能力 布局决定了页面中的元素按照…

Day75:WEB攻防-验证码安全篇接口滥用识别插件复用绕过宏命令填入滑块类

目录 图片验证码-识别插件-登录爆破&接口枚举 登录爆破 接口枚举 图片验证码-重复使用-某APP短信接口滥用 滑块验证码-宏命令-某Token&Sign&滑块案例 知识点&#xff1a; 1、验证码简单机制-验证码过于简单可爆破 2、验证码重复使用-验证码验证机制可绕过 3、…

九、C#桶排序算法

简介 桶排序是一种线性时间复杂度的排序算法&#xff0c;它将待排序的数据分到有限数量的桶中&#xff0c;每个桶再进行单独排序&#xff0c;最后将所有桶中的数据按顺序依次取出&#xff0c;即可得到排序结果。 实现原理 首先根据待排序数据&#xff0c;确定需要的桶的数量。…

pycharm中的Mark Directory As 里的 Sources Root、Excluded...

这里主要提到两个文件夹的作用&#xff0c;分别是Sources Root、Excluded 1、Sources Root 1、场景 平时使用pycharm&#xff0c;有时出现导包问题&#xff0c;将那个目录Mark Directory as sources root&#xff0c;然后就可以正常运行代码了 2、原理 其实主要就是将那个目录…

算法沉淀——贪心算法七(leetcode真题剖析)

算法沉淀——贪心算法七 01.整数替换02.俄罗斯套娃信封问题03.可被三整除的最大和04.距离相等的条形码05.重构字符串 01.整数替换 题目链接&#xff1a;https://leetcode.cn/problems/integer-replacement/ 给定一个正整数 n &#xff0c;你可以做如下操作&#xff1a; 如果…

Svg Flow Editor 原生svg流程图编辑器(三)

系列文章 Svg Flow Editor 原生svg流程图编辑器&#xff08;一&#xff09; Svg Flow Editor 原生svg流程图编辑器&#xff08;二&#xff09; Svg Flow Editor 原生svg流程图编辑器&#xff08;三&#xff09; 实现对齐辅助线 在 logicFlow 中&#xff0c;辅助线的实现是通…

《云计算:数字时代的引擎》

在数字化时代&#xff0c;云计算技术以其强大的计算能力和灵活的应用方式&#xff0c;成为推动各行各业发展的引擎。本文将围绕云计算的技术进展、技术原理、行业应用案例、面临的挑战与机遇以及未来趋势进行详细探讨。 云计算的技术进展 云计算的技术进展涵盖了多个方面&…

Spring框架本身自带的一些好用的工具类

1 Assert 很多时候&#xff0c;我们需要在代码中做判断&#xff1a;如果不满足条件&#xff0c;则抛异常。 有没有统一的封装呢? 其实Spring给我们提供了Assert类&#xff0c;它表示断言。 1.1 断言参数是否为空 断言参数是否空&#xff0c;如果不满足条件&#xff0c;则…

Day23 集合

Day23 集合 一、含义 集合是Java API所提供的一系列类&#xff0c;可以用于动态存放多个对象 (集合只能存对象)集合与数组的不同在于&#xff0c;集合是大小可变的序列&#xff0c;而且元素类型可以不受限定&#xff0c;只要是引用类型。(集合中不能放基本数据类型&#xff0c…

flutter实现视频播放器,可根据指定视频地址播放、设置声音,进度条拖动,下载等

需要装依赖&#xff1a; gallery_saver: ^2.3.2video_player: ^2.8.3 实现代码 import dart:async; import dart:io;import package:flutter/material.dart; import package:gallery_saver/gallery_saver.dart; import package:path_provider/path_provider.dart; import pac…

前端框架推荐 Arco Design

Arco Design - 企业级产品的完整设计和开发解决方案 预览地址&#xff1a;Arco Design Pro - 开箱即用的中台前端/设计解决方案 一 开发 有vue3、React版本。 文档地址&#xff1a;Arco Design - 企业级产品的完整设计和开发解决方案 还配有对应脚手架&#xff1a;GitHub -…

sonarqube使用指北(二)-如何启动一次完整的本地扫描

一、引言 上一篇文章之后 我们应该已经成功的部署了sonarqube程序,这一篇文章我们就来进行一次简单的本地扫描。 优点: 安全性:你可以在任何你信任的环境下执行扫描工作,而不是依赖外部安全能力即时反馈: 开发者可以在编写代码时获得即时反馈,了解其代码的质量和潜在问题…

【Godot4.2】随机数应用案例 - 制作骰子组件

概述 在学习随机数之后&#xff0c;我们就来用随机数实现骰子。 初期&#xff1a;不要拘泥于形式。只要表现了随机&#xff0c;骰子可以不必做成骰子的样子。刚开始因为技术力的原因&#xff0c;可能无法实现比较真实和动态的骰子效果&#xff0c;但是这并不意为着不可以做出…

MATLAB | R2024a更新了哪些好玩的东西?

Hey 好久不见&#xff0c;大家一看三月中下旬这个时间节点也应该能猜到这篇更新什么内容&#xff0c;没错MATLAB R2024a正式版发布啦啦拉拉&#xff0c;直接来看看有啥我认为比较有意思的更新点吧&#xff1a; 1 极坐标表达式绘制 将会使用使用fpolarplot函数来替换ezpolar&a…

探索数据结构:顺序栈与链式栈的原理、实现与应用

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;数据结构与算法 贝蒂的主页&#xff1a;Betty’s blog 1. 栈的定义 栈简单来说就是一种只允许在一端进行操作(插入与删除&…

将OpenCV与gdb驱动的IDE结合使用

返回&#xff1a;OpenCV系列文章目录&#xff08;持续更新中......&#xff09; 上一篇&#xff1a;OpenCV4.9.0开源计算机视觉库在 Linux 中安装 下一篇&#xff1a;将OpenCV与gcc和CMake结合使用 ​ 能力 这个漂亮的打印机可以显示元素类型、、标志is_continuous和is_subm…

【论文阅读】基于多特征融合的智能合约缺陷检测方法

摘要&#xff1a; 1、预处理&#xff1a;颜色标记、词汇提取、字符转换、合约之间的继承关系的提取 2、 使用融合模型进行特征提取&#xff08;BERT、CNN、BiLSTM&#xff09; 3、使用node2vec随机游走算法&#xff0c;将合约之间的继承关系作为输入得到合约关系的特征向量。 4…

通过 Socket 手动实现 HTTP 协议

你好&#xff0c;我是 shengjk1&#xff0c;多年大厂经验&#xff0c;努力构建 通俗易懂的、好玩的编程语言教程。 欢迎关注&#xff01;你会有如下收益&#xff1a; 了解大厂经验拥有和大厂相匹配的技术等 希望看什么&#xff0c;评论或者私信告诉我&#xff01; 文章目录 一…

如何让uni-app开发的H5页面顶部原生标题和小程序的顶部标题不一致?

如何让标题1和标题2不一样&#xff1f; 修改根目录下的App.vue&#xff08;核心代码如下&#xff09; <script>export default {onLaunch() {// 监听各种跳转----------------------------------------[navigateTo, redirectTo, reLaunch, switchTab, navigateBack, ].…

[论文笔记] ChatDev:Communicative Agents for Software Development

Communicative Agents for Software Development&#xff08;大模型驱动的全流程自动化软件开发框架&#xff09; 会议arxiv 2023作者Chen Qian Xin Cong Wei Liu Cheng Yang团队Tsinghua University论文地址https://arxiv.org/pdf/2307.07924.pdf代码地址https://github.com/O…