mysql -速成

目录

1.概述

1.3SQL的优点

1.4 SQL 语言的分类

2. 软件的安装与启动

2.1  安装

 2.2 MySQL服务的启动和停止

2.3 MySQL服务的登录和退出

​编辑

2.4 mysql常用命令

2.5 图形化用户结构Sqlyong 

3.DQL 语言

        3.1 基础查询

 3.1.1、语法

3.1.2 特点

3.2 条件查询

3.2.1 语法

3.2.2 举例 

3.3 模糊查询

3.3.1 语法

3.3.2 举例

 3.4 排序查询

3.4.1 语法

3.4.2 举例

 3.5常见函数

3.5.1 语法

3.5.2 举例

3.5.2.1 单行函数

3.5.2.2 数学函数

  3.5.2.3 日期函数

3.5.2.4 其他函数

3.5.2.5 流程控制函数

 3.5.2.6 分组函数

3.6 分组查询

3.6.1语法:

3.6.2 举例

3.7 连接查询

3.7.1 语法

3.7.2 举例

3.7.2.1 sql 92 标准

3.7.2.2 sql 99 标准

 3.8 子查询

3.8.1 语法

3.8.2 举例 

 3.9 分页查询

3.9.1 语法

3.9.2 举例

 3.10 联合查询

4 DML 语言

4.1 插入

4.1.1 语法

4.1.2 举例 

 4.2 修改

4.2.1 语法

4.2.2 举例

 4.3 删除

4.3.1 语法

4.3.2 举例

5 DDL 

语法:

5.1 库的管理

5.2 表的管理

 5.3 常见的数据类型

5.3.1 整型 

5.3.2 浮点型​编辑

 ​编辑

 5.2.4 字符型

​编辑

 5.2.5 日期型

 5.4 常见约束

5.5 标识列 

 6 mysql 事务(TCL)

6.1 事务以及相关概念

6.2 事务的演示

7视图

7.1语法

7.2 举例


1.概述

        1.1数据库的好处

        保存数据 的容器:
        数组
        集合
        文件
        实现数据持久化
        •使用完整的管理系统统一管理,易于查询

1.2 数据库的概念
DB
数据库( database ):存储数据的“仓库”。它保存了一系列有组织的数据。
DBMS
数据库管理系统( Database Management System )。数据库是通过 DBMS 建和操作的容器
SQL
结构化查询语言( Structure Query Language ):专门用来与数据库通信的语

1.3SQL的优点

1、不是某个特定数据库供应商专有的语言,几乎所有DBMS都支持SQL
2、简单易学
3、虽然简单,但实际上是一种强有力的语言,灵活使用其语言元素,可以进行非常复杂和高级的数据库操作。

1.4 SQL 语言的分类

        
1、DML(Data Manipulation Language):数据操纵语句,用于添加、删除、修改、查询数据库记录,并检查数据完整性
  • INSERT:添加数据到数据库中
  • UPDATE:修改数据库中的数据
  • DELETE:删除数据库中的数据
  • SELECT:选择(查询)数据
  • SELECT是SQL语言的基础,最为重要
2、DDL(Data Definition Language):数据定义语句,用于库和表的创建、修改、删除。
  • CREATE TABLE:创建数据库表
  • ALTER TABLE:更改表结构、添加、删除、修改列长度
  • DROP TABLE:删除表
  • CREATE INDEX:在表上建立索引
  • DROP INDEX:删除索引
3、DCL(Data Control Language):数据控制语句,用于定义用户的访问权限和安全级别。
  • GRANT:授予访问权限
  • REVOKE:撤销访问权限
  • COMMIT:提交事务处理
  • ROLLBACK:事务处理回退
  • SAVEPOINT:设置保存点
  • LOCK:对数据库的特定部分进行锁定

2. 软件的安装与启动

2.1  安装

        首先下载SQLyog 和mysql的相关版本。

可以使用我的链接链接

https://pan.baidu.com/s/1hrwTpAtTRS7q0VsjmRePQg?pwd=2z3o 
提取码:2z3o

             MySQL

        

 点击安装,

一路安装,中间注意设置端口号和加入环境变量,记住安装的密码和端口号。即可,之后安装Sqlyog。
        

 2.2 MySQL服务的启动和停止


方式一:通过命令行
    net start 服务名

    net stop 服务名


方式二:计算机——右击——管理——服务

 Esc+shift+ctrl 选择点击mysql 右键关闭。

2.3 MySQL服务的登录和退出

        登录:mysql 【-h 主机名 -P 端口号】 -u 用户名 -p密码

        用户名和密码都是自己安装的时候的。

2.4 mysql常用命令

1.查看当前所有的数据库
show databases;
2.打开指定的库
use 库名
3.查看当前库的所有表
show tables;
4.查看其它库的所有表
show tables from 库名;
5.创建表
create table 表名(
列名 列类型,
列名 列类型,
);
6.查看表结构
desc 表名;
7.查看服务器的版本
方式一:登录到mysql服务端
select version();
方式二:没有登录到mysql服务端
mysql --version

mysql --V

       

 

###a)MySQL的语法规范 1.不区分大小写,但建议关键字大写,表名、列名小写

2.每条命令最好用分号结尾

3.每条命令根据需要,可以进行缩进 或换行

 4.注释 单行注释:#

注释文字 单行注释:-- 注释文字

多行注释:/* 注释文字 */

###b)SQL的语言分类

    DQL(Data Query Language):数据查询语言

        select

    DML(Data Manipulate Language):数据操作语言

        insert 、update、delete

    DDL(Data Define Languge):数据定义语言

        create、drop、alter

    TCL(Transaction Control Language):事务控制语言

        commit、rollback

2.5 图形化用户结构Sqlyong 

 运行,快捷键F9 所有的代码都运行。默认鼠标滚轮+ctrl 可以修改终端的的字体大小。

以后演示代码都会在Sqlyong 进行演示。

3.DQL 语言

        在学习之前需要将数据库中添加数据。才能接下来的学习。点击root@localhost 右键,执行sql 脚本。sql 文件。在次点击root@localhost 刷新。就可以看到增加了两个数据库。

链接:https://pan.baidu.com/s/1Ve_ruDuYwQkZSYDKUL5jpg?pwd=ydye 
提取码:ydye

首先主要使用myemployees;

 

 myemployees 库内部四张表。

 

点击+好可以新建一个查询分析器。

        3.1 基础查询

 3.1.1、语法

1、查询单个字段
select 字段名 from 表名;
2、查询多个字段
select 字段名,字段名 from 表名;
3、查询所有字段
select * from 表名
4、查询常量
select 常量值;
注意:字符型和日期型的常量值必须用单引号引起来,数值型不需要
5、查询函数
select 函数名(实参列表);
6、查询表达式
select 100/1234;
7、起别名
①as
②空格  (别名不能有空格,特殊用途,否则有歧义可以加上双引号)
8、去重
select distinct 字段名 from 表名;

9、+
作用:做加法运算
select 数值+数值; 直接运算
select 字符+数值;先试图将字符转换成数值,如果转换成功,则继续运算;否则转换成0,再做运算
select null+值;结果都为null

10、【补充】concat函数
功能:拼接字符
select concat(字符1,字符2,字符3,...);

11、【补充】ifnull函数
功能:判断某字段或表达式是否为null,如果为null 返回指定的值,否则返回原本的值
select ifnull(commission_pct,0) from employees;

12、【补充】isnull函数
功能:判断某字段或表达式是否为null,如果是,则返回1,否则返回0
 


3.1.2 特点


1、查询列表可以是字段、常量、表达式、函数,也可以是多个。
2、查询结果是一个虚拟表。

        

##########注意
1.选中代码F12 可以将写的代码格式化。
2库名,可以在sqlyong 上侧显示,如图显示myemployees.建议 在代码区使用use +库名在进行代码操作,避免问题。
3.使用字母键盘1 左侧的··着重号,可以用来避免表中属性和关键字重复,例如,表中有一个属性叫NAME ,SELECT 这种的和sql 本身的关键字重复,所以用着重号进行区分。

 代码如下。

USE myemployees ;

SELECT * FROM employees;
SELECT last_name FROM employees;
SELECT 
  last_name,
  first_name,
  salary,
  email 
FROM
  employees ;

常量查询。

 起别名:

        

 

 去重

        

 9 + 号的作用

查询员工的姓和名连接成一个字段,显示为姓名

        

3.2 条件查询

3.2.1 语法

条件查询:根据条件过滤原始表的数据,查询到想要的数据

    语法:

    select

        要查询的字段|表达式|常量值|函数

    from

        表

    where

        条件 ;

    分类:

    一、条件表达式

        示例:salary>10000

        条件运算符:

        > < >= <= = != <>

   

    二、逻辑表达式

    示例:salary>10000 && salary<20000

   

    逻辑运算符:

        and(&&):两个条件如果同时成立,结果为true,否则为false

        or(||):两个条件只要有一个成立,结果为true,否则为false

        not(!):如果条件成立,则not后为false,否则为true

3.2.2 举例 

查询员工工资大于12000 的员工信息有哪些

        

 查询部门部门编号不等90号的员工木你给和部门编号。

查询在10000-20000之间员工名,工资,奖金

 查询部门编号不是90 到110 之间,或者工资高于15000 的员工信息。

3.3 模糊查询

3.3.1 语法

        

3、模糊查询
like:一般搭配通配符使用,可以判断字符型或数值型
通配符:%任意多个字符,_任意单个字符

between a and b(包含临临界值 and 前后位置不能颠倒) 


in  :判断某字段的值是否属于in 列表中的某一项

特点:1.使用in 提高简洁度

            2.in 列表的值类型必须一致或者兼容。

             3. 列表内部不支持通配符


is null /is not null:用于判断null值,= != 不能判断null 值。is 和null 搭配不能配其他数

is null  PK  <=>(安全等于)
            普通类型的数值    null值        可读性
is null        ×            √        √
<=>        √            √        ×
 

3.3.2 举例

 查询员工名总包含字符a的员工信息(% 是通配符表示任意字符出现任意次)

 查询员工名中第三个字符为n,第5 个字符为l的员工名和工资。

 查询员工名中第二个字符为_的员工名

查詢員工编号在100 到120 之间的员工信息。

 查询员工的工种编号为IT_PROG,AD_VP,AD_PRES 中的一个的员工 名和工种编号

查询没有奖金的员工名和奖金率

 

 

 3.4 排序查询

3.4.1 语法

        一、语法
select 查询列表
from 表
where 筛选条件
order by 排序列表 【asc|desc】
 

3.4.2 举例

查询员工信息,要求工资从高到低进行排序

 从低到高

 排序+ 筛选:查询部门编号>=90,要求按入职时间先后进行排序

 按年薪的高低显示员工的信息和年薪【按表达式排序】

 按姓名的长度显示员工的姓名和工资[按函数排序]

 查询员工信息,按工资排序,按员工编号排序【多个字段进行排序】

 3.5常见函数

3.5.1 语法

功能:类似于java中的方法
好处:提高重用性和隐藏实现细节
调用:select 函数名(实参列表) 【from 表】;

特点:函数名?

          功能?

二、单行函数(做统计使用的,有成为统计函数,聚和函数)
1、字符函数
concat:连接
substr:截取子串
upper:变大写
lower:变小写
replace:替换
length:获取字节长度
trim:去前后空格
lpad:左填充
rpad:右填充
instr:获取子串第一次出现的索引
2、数学函数
ceil:向上取整
round:四舍五入
mod:取模
floor:向下取整
truncate:截断
rand:获取随机数,返回0-1之间的小数

3、日期函数

now:返回当前日期+时间
year:返回年
month:返回月
day:返回日
date_format:将日期转换成字符
curdate:返回当前日期
str_to_date:将字符转换成日期
curtime:返回当前时间
hour:小时
minute:分钟
second:秒
datediff:返回两个日期相差的天数
monthname:以英文形式返回月


4、其他函数
version 当前数据库服务器的版本
database 当前打开的数据库
user当前用户
password('字符'):返回该字符的密码形式
md5('字符'):返回该字符的md5加密形式

5、流程控制函数

①if(条件表达式,表达式1,表达式2):如果条件表达式成立,返回表达式1,否则返回表达式2
②case情况1
case 变量或表达式或字段
when 常量1 then 值1
when 常量2 then 值2
...
else 值n
end

③case情况2
case 
when 条件1 then 值1
when 条件2 then 值2
...
else 值n
end

三、分组函数
1、分类
max 最大值
min 最小值
sum 和
avg 平均值
count 计算个数

2、特点

①语法
select max(字段) from 表名;

②支持的类型
sum和avg一般用于处理数值型
max、min、count可以处理任何数据类型

③以上分组函数都忽略null
④都可以搭配distinct使用,实现去重的统计
select sum(distinct 字段) from 表;
⑤count函数
count(字段):统计该字段非空值的个数
count(*):统计结果集的行数
案例:查询每个部门的员工个数
1 xx    10
2 dd    20
3 mm    20
4 aa    40
5 hh    40

count(1):统计结果集的行数

效率上:
MyISAM存储引擎,count(*)最高
InnoDB存储引擎,count(*)和count(1)效率>count(字段)

⑥ 和分组函数一同查询的字段,要求是group by后出现的字段

3.5.2 举例

3.5.2.1 单行函数

        length() 函数

 

 

 concat() 函数

        

 upper() ,lower() 函数

 让姓大写,名小写进行拼接。

 substr() ,substring() 

 

 案例:

单一函数:

      upper() lower()  姓名中首字母大写,其他字符小写,然后用_拼接,显示出来

 instr() 函数获取子字符串第一次出现的时候所出现的索引。找不到返回0

 trim() 去前后空格

        

 

 lpad () 函数:左填充指定长度 的字符使得总长度是是你填入的值

 rpad() 右填充

replace() 替换函数

 

3.5.2.2 数学函数

round()四舍五入

 可以先算绝对值,再加符号 

 ceil() 向上取整 返回大于等于该参数的最小整数

 floor() 向下取整,返回小于等于该参数的最大整数。

 truncate() 截断

mod() 取余

 看被除数来决定余数的正负

 

  3.5.2.3 日期函数

now()  返回日期加时间

 curdate() 只有日期没有时间

 

日期格式化

查询入职日期是1992-4-3 的员工信息 

date_format 将日期转换成字符

 

 查询有奖金的员工名和入职日期(xx月/xx日/xx年)

3.5.2.4 其他函数

3.5.2.5 流程控制函数

if :if else 函数

        

 

  case函数: switch case 效果

        case 要判断的字段或者表达式

                 when 常量1 then 要显示的值1或语句1;

                 when 常量2 then 要显示的值2或语句2;

                .....

                else 要显示的值n或者语句n

        end;

/查询员工的工资,要求

部门号为30 ,显示的工资位工资的1.1倍

                40,           1.2倍

                50, 1.3 

       其他原工资

/

 case 使用2 

case 

        when 条件1 then 要执行的值1或者语句

        when 条件2 then 要执行的值2或者语句

         ....

        else 要显示 的值n

  end

查询员工的工资

如果大于20000 显示A

                15000 ,B

                10000,C

                其他,D

 3.5.2.6 分组函数

又称为统计函数或者组函数 sum ,avg,max 最大值,min 最小值 ,count() 计算个数简单的使用

 sum()

 

 

 

 参数支持哪里类型

特点

1.sum ,avg 一般用于处理数据类型

max,min,count 可以处理任何类型

2.所有分组函数都忽略null 值(直接逃过null 的数据,不参加计算)

 3 可以和distinct 搭配

 

4.count() 函数的 研究

count() 详细介绍

 效率的问题

效率:INNODEB myisam  count(*)和count(1) 差不多 ,比count(字段)高

        MYISAM ,count(*) 高

5.和分组函数一同查询的字段有限制

和分组函数一同查询的字段的要求是group by 后的字段,其他的都不行。

3.6 分组查询

3.6.1语法:

select 分组函数,分组后的字段
from 表
【where 筛选条件】
group by 分组的字段
【having 分组后的筛选】
【order by 排序列表】
二、特点

            使用关键字        筛选的表    位置
分组前筛选    where            原始表        group by的前面
分组后筛选    having        分组后的结果    group by 的后面

3.6.2 举例

查询每一个工种的最高工资

 查询每个位置上的部门个数

 添加筛选条件分组钱

案例:查询邮箱中包含a 字符的每个部门的平均工资

 查询有奖金每个领导手下的员工的最高工资

#添加复杂筛选条件

添加筛选,分组后

查询员工个数大于2 的部门

查询每个工种有奖金的员工的最高工资大于12000的工种编号和最高工资

 

 查询领导编号大于102 的每个领导手下的最低工资大于5000 的领导编号,以及其最低工资

总结:分组查询筛选条件分为两类,分组前筛选,分组后筛选

分组前:  数据源 原始表 位置 where +group by 前面 关键字 where

分组后: 数据源分组后的结果 having +group by 后面 关键字 having 

分组函数做条件,肯定放在having自句中:

能用分组前就用分组前的筛选。

#按表达式或者函数分组

案例:按员工姓名的长度分组,查询每一组员工的个数,筛选员工个数大于5 的有哪些

 #按多个字段分组

查询每个部门每个工种的员工的 平均工资

 #分组排序添加排序

 查询每个部门每个工种的员工的 平均工资,并且按照平均工资的高低进行排序

多层级筛选

       group by 支持单个字段分组,多个字段用,隔开,没有顺序,也可以用表达式

也可以添加排序,添加到最后。

3.7 连接查询

又称为多表查询,当查询的字段来自多个表时候,会用到多表查询。

3.7.1 语法

一、含义
当查询中涉及到了多个表的字段,需要使用多表连接
select 字段1,字段2
from 表1,表2,...;

笛卡尔乘积:当查询多个表时,没有添加有效的连接条件,导致多个表所有行实现完全连接
如何解决:添加有效的连接条件


二、分类

按年代分类:
    sql92:
        等值
        非等值
        自连接

        也支持一部分外连接(用于oracle、sqlserver,mysql不支持)
    sql99【推荐使用】
        内连接
            等值
            非等值
            自连接
        外连接
            左外
            右外
            全外(mysql不支持)
        交叉连接
            


三、SQL92语法
1、等值连接
语法:
    select 查询列表
    from 表1 别名,表2 别名
    where 表1.key=表2.key
    【and 筛选条件】
    【group by 分组字段】
    【having 分组后的筛选】
    【order by 排序字段】

特点:
    ① 一般为表起别名
    ②多表的顺序可以调换
    ③n表连接至少需要n-1个连接条件
    ④等值连接的结果是多表的交集部分


2、非等值连接
语法:
    select 查询列表
    from 表1 别名,表2 别名
    where 非等值的连接条件
    【and 筛选条件】
    【group by 分组字段】
    【having 分组后的筛选】
    【order by 排序字段】
3、自连接

语法:
    select 查询列表
    from 表 别名1,表 别名2
    where 等值的连接条件
    【and 筛选条件】
    【group by 分组字段】
    【having 分组后的筛选】
    【order by 排序字段】


四、SQL99语法
1、内连接
语法:
select 查询列表
from 表1 别名
【inner】 join 表2 别名 on 连接条件
where 筛选条件
group by 分组列表
having 分组后的筛选
order by 排序列表
limit 子句;

特点:
①表的顺序可以调换
②内连接的结果=多表的交集
③n表连接至少需要n-1个连接条件

分类:
等值连接
非等值连接
自连接


2、外连接
语法:
select 查询列表
from 表1 别名
left|right|full【outer】 join 表2 别名 on 连接条件
where 筛选条件
group by 分组列表
having 分组后的筛选
order by 排序列表
limit 子句;
特点:
①查询的结果=主表中所有的行,如果从表和它匹配的将显示匹配行,如果从表没有匹配的则显示null
②left join 左边的就是主表,right join 右边的就是主表
  full join 两边都是主表
③一般用于查询除了交集部分的剩余的不匹配的行

3、交叉连接

语法:
select 查询列表
from 表1 别名
cross join 表2 别名;

特点:
类似于笛卡尔乘积


 

3.7.2 举例

笛卡尔乘积:当查询多个表时,没有添加有效的连接条件,导致多个表所有行实现完全连接
如何解决:添加有效的连接条件

 正确写法:

分类:

年代分类

 sql92 标准 :仅支持内联

sql99 标准 :所有内连加外联加交叉

功能分类:

        内连接 

                        等值

                        非等值

                        自连接

        外连接

                        左外连接

                        右外连接

                        全外连接

        交叉链接

3.7.2.1 sql 92 标准

     查询女神名和男神名   

 查询员工名和对应的部门名

 查询工种号,工种名,工种名

 查询城市中第二个字符为‘o’的对应的部门名和城市名(添加筛选)

 添加分组

查询每个城市的部门个数

#案例2 查询出有奖金的 每个部门名和部门的领导编号以及该部门的最低工资

添加排序

        每个工种的工种名和员工的个数并且按照员工个数进行降序排序

实现三表连接

查询员工名,部门名和所在的城市

sql 92 标准

多表等值连接,为多表的交集部分

n表连接,至少n-1 链接条件

多表顺序没有要求,建议对表起别名

可以搭配所有句子使用

2.非等值连接

 案例1:查询员工的工资和工资级别

 

#自连接

查询员工名和上级的名称

3.7.2.2 sql 99 标准

内联,左外,右外,全外。

select 查询列表 from table1 表1 别名 【连接类型】 join 表2  别名 on 连接条件 where 筛选条件 【group by】 [having] [order by]

内联 inner 

左 left [outer]

 右 right[outer]

全 full

交叉 cross join

1 内连接

查询员工名,部门名

 查询名字中包含e的员工名和工种名(添加筛选)

        

      查询部门个数>3 的城市名和部门个数,(添加分组和筛选)

 查询哪个部分的员工个数大于3的部门名和员工个数,并按照个数进行排序(添加排序)

 查询员工名,部门名,工种名,并按部门名降序。

# 非等值连接

查询员工的工资级别

查询每个工资级别的个数>20的个数,并且按工资界别降序

 

 #自连接

查询员工的名字和上级的名字

 

# 二外连接 

一般外连接用于查询一个表中有,另一个表没有。需要分主从表

特点:

        查询结果为主表的中的所有记录,如果从表有匹配的,则显示匹配 的值

        如果没有匹配的则显示null

        外连接的的结果=内连接结果+主表中有而从表中没有的记录

左外中left  join左侧是主表

右外 right join右侧是主表

左右外,交换两个表可以实现同样的效果。

查询男朋友 不在男神表的女神名

查询男朋友不在男神表的女神名。(最好选择从表主键列)

        

 

 右外连接

 案例:

查询哪个部门没有员工

 # 全外连接

全外连接=内连接+表1有表2 没有,表2有但是表1没有的

#交叉连接

        笛卡尔乘积

 3.8 子查询

3.8.1 语法

一、含义
嵌套在其他语句内部的select语句称为子查询或内查询,
外面的语句可以是insert、update、delete、select等,一般select作为外面语句较多
外面如果为select语句,则此语句称为外查询或主查询

二、分类
1、按出现位置
select后面:
        仅仅支持标量子查询
from后面:
        表子查询
where或having后面:
        标量子查询  单行子查询
        列子查询  多行子查询
        行子查询  多行多列子查询
exists后面:
        标量子查询(只有一个结果)
        列子查询
        行子查询
        表子查询

2、按结果集的行列
标量子查询(单行子查询):结果集为一行一列
列子查询(多行子查询):结果集为多行一列
行子查询:结果集为多行多列
表子查询:结果集为多行多列


三、示例
where或having后面
1、标量子查询
案例:查询最低工资的员工姓名和工资
①最低工资
select min(salary) from employees

②查询员工的姓名和工资,要求工资=①
select last_name,salary
from employees
where salary=(
    select min(salary) from employees
);

2、列子查询
案例:查询所有是领导的员工姓名
①查询所有员工的 manager_id
select manager_id
from employees

②查询姓名,employee_id属于①列表的一个
select last_name
from employees
where employee_id in(
    select manager_id
    from employees
);

3.8.2 举例 

案例:#单行子查询

谁的工资比Abel 高

 返回job_id 与141号员工相同,salary 比143号员工多的员工的姓名,job_id 和工资

 返回公司工资最少的last_name,job_id,和salary

 题目:查询最低工资大于50号部门最低工资的部门id和其最低工资

#多行子查询

 返回location_id是1400或1700的部门中的所有员工姓名

 #案例2:返回其它工种中比job_id为'IT_PROG'部门任一工资低的员工的员工号、姓名、job_id以及salary

 

返回其它部门中比job_id为'IT_PROG'部门所有工资都低的员工的员工号、姓名、job_id以及salary

 #行子查询(一行多列,或者多行多列)

查询员工编号最小并且工资最高的员工信息

 

 #放在select 后面的(里面只支持一行一列)

查询每个部门的员工个数

 查询员工号=1贴2的部门名

 #放到from 后面 将子查询的结果充当一张表,必须起别名

#案例:查询每个部门的平均工资的工资等级
 

 

 exists 后面(相关子查询)

#案例1:查询有员工的部门名

 

 3.9 分页查询

3.9.1 语法

一、应用场景
当要查询的条目数太多,一页显示不全
二、语法

select 查询列表
from 表
limit 【offset,】size;
注意:
offset代表的是起始的条目索引,默认从0卡死
size代表的是显示的条目数

公式:
假如要显示的页数为page,每一页条目数为size
select 查询列表
from 表
limit (page-1)*size,size;
 

3.9.2 举例

select查询列表from表
【join type join表2on连接条件
where 筛选条件group by分组字段having分组后的筛选order by排序的字段】limit offset,size;
I
 

offset要显示条目的起始索引(起始索引从0开始)

size要显示的条目个数
 

#查询前五条员工信息

 #查询第11条道25条

#案例3:有奖金的员工信息,并且工资较高的前10名显示出来
 

 3.10 联合查询

3.10.1 语法

一、含义
union:合并、联合,将多次查询结果合并成一个结果

多表没有关系的首先考虑
二、语法
查询语句1
union 【all】
查询语句2
union 【all】
...

三、意义
1、将一条比较复杂的查询语句拆分成多条语句
2、适用于查询多个表的时候,查询的列基本是一致

四、特点
1、要求多条查询语句的查询列数必须一致
2、要求多条查询语句的查询的各列类型、顺序最好一致
3、union 去重,union all包含重复项
 

 #引入的案例:查询部门编号>90或邮箱包含a的员工信息()

 语法:
查询语句1

union
查询语句2

union

应用场景:
要查询的结果来自于多个表,且多个表没有直接的连接关系,但查询的信息一致时

4 DML 语言

4.1 插入

4.1.1 语法

一、方式一
语法:
insert into 表名(字段名,...) values(值,...);
特点:
1、要求值的类型和字段的类型要一致或兼容
2、字段的个数和顺序不一定与原始表中的字段个数和顺序一致
但必须保证值和字段一一对应
3、假如表中有可以为null的字段,注意可以通过以下两种方式插入null值
①字段和值都省略
②字段写上,值使用null
4、字段和值的个数必须一致
5、字段名可以省略,默认所有列

二、方式二
语法:
insert into 表名 set 字段=值,字段=值,...;
两种方式 的区别:
1.方式一支持一次插入多行,语法如下:
insert into 表名【(字段名,..)】 values(值,..),(值,...),...;
2.方式一支持子查询,语法如下:
insert into 表名
查询语句;

4.1.2 举例 

#——、插入语句/*
语法:
insert into表名(列名,...) values(值1,... ) ;
L出 /
 

#插入方式1

 #插入方式2

 

 #两种方式的对比

 4.2 修改

4.2.1 语法

        

一、修改单表的记录 ★
语法:update 表名 set 字段=值,字段=值 【where 筛选条件】;

二、修改多表的记录【补充】
语法:
update 表1 别名 
left|right|inner join 表2 别名 
on 连接条件  
set 字段=值,字段=值 
【where 筛选条件】;

4.2.2 举例

#修改单表的例

#案例1:修改beauty表中姓唐的女神的电话为13899888899

 #案例2:修改boys表中id好为2的名称为樊华,魅力值10

 #多表修改

案例:案例1:修改张无忌的女朋友的手机号为114

 #案例2:修改没有男朋友的女神的男朋友编号都为2号
 

 4.3 删除

4.3.1 语法

方式一: delete语法:
1、单表的删除【★】
delete from表名where筛选条件2、多表的删除【补充】
方式二:truncate
i语法:truncate table表名;I
 

4.3.2 举例

#方式一,delete

#案例1:删除手机号以9结尾的女神信息

#多表的的删除

 sql92错法:
delete表1的别名,表2的别名from表1别名,表2别名
where连接条件
and筛选条件;
sql99语法:
delete表1的别名,表2的别名from表1别名
inner l leftlright join表2别名on连接条件where筛选条件l

 #案例:删除张无忌的女朋友的信息

 #案例:册删除黄晓明的信息以及他女朋友的信息

 将魅力值>100的男神信息册除--只能全部删除

 - 

两种删除的区别

 

 

5 DDL 

数据定义语言,主要涉及库和表的管理和操作

语法:

一、创建库
create database 【if not exists】 库名【 character set 字符集名】;

二、修改库
alter database 库名 character set 字符集名;
三、删除库
drop database 【if exists】 库名;

=================================

一、创建表 ★
create table 【if not exists】 表名(
    字段名 字段类型 【约束】,
    字段名 字段类型 【约束】,
    。。。
    字段名 字段类型 【约束】 

)

二、修改表

1.添加列
alter table 表名 add column 列名 类型 【first|after 字段名】;
2.修改列的类型或约束
alter table 表名 modify column 列名 新类型 【新约束】;
3.修改列名
alter table 表名 change column 旧列名 新列名 类型;
4 .删除列
alter table 表名 drop column 列名;
5.修改表名
alter table 表名 rename 【to】 新表名;

三、删除表
drop table【if exists】 表名;

四、复制表
1、复制表的结构
create table 表名 like 旧表;
2、复制表的结构+数据
create table 表名 
select 查询列表 from 旧表【where 筛选】;

=================================

一、数值型
1、整型
tinyint、smallint、mediumint、int/integer、bigint
1         2        3          4            8

特点:
①都可以设置无符号和有符号,默认有符号,通过unsigned设置无符号
②如果超出了范围,会报out or range异常,插入临界值
③长度可以不指定,默认会有一个长度
长度代表显示的最大宽度,如果不够则左边用0填充,但需要搭配zerofill,并且默认变为无符号整型


2、浮点型
定点数:decimal(M,D)
浮点数:
    float(M,D)   4
    double(M,D)  8

特点:
①M代表整数部位+小数部位的个数,D代表小数部位
②如果超出范围,则报out or range异常,并且插入临界值
③M和D都可以省略,但对于定点数,M默认为10,D默认为0
④如果精度要求较高,则优先考虑使用定点数

二、字符型
char、varchar、binary、varbinary、enum、set、text、blob

char:固定长度的字符,写法为char(M),最大长度不能超过M,其中M可以省略,默认为1
varchar:可变长度的字符,写法为varchar(M),最大长度不能超过M,其中M不可以省略

三、日期型
year年
date日期
time时间
datetime 日期+时间          8      
timestamp 日期+时间         4   比较容易受时区、语法模式、版本的影响,更能反映当前时区的真实时间

===============================================

一、常见的约束
NOT NULL:非空,该字段的值必填
UNIQUE:唯一,该字段的值不可重复
DEFAULT:默认,该字段的值不用手动插入有默认值
CHECK:检查,mysql不支持
PRIMARY KEY:主键,该字段的值不可重复并且非空  unique+not null
FOREIGN KEY:外键,该字段的值引用了另外的表的字段

主键和唯一
1、区别:
①、一个表至多有一个主键,但可以有多个唯一
②、主键不允许为空,唯一可以为空
2、相同点
都具有唯一性
都支持组合键,但不推荐
外键:
1、用于限制两个表的关系,从表的字段值引用了主表的某字段值
2、外键列和主表的被引用列要求类型一致,意义一样,名称无要求
3、主表的被引用列要求是一个key(一般就是主键)
4、插入数据,先插入主表
删除数据,先删除从表
可以通过以下两种方式来删除主表的记录
#方式一:级联删除
ALTER TABLE stuinfo ADD CONSTRAINT fk_stu_major FOREIGN KEY(majorid) REFERENCES major(id) ON DELETE CASCADE;

#方式二:级联置空
ALTER TABLE stuinfo ADD CONSTRAINT fk_stu_major FOREIGN KEY(majorid) REFERENCES major(id) ON DELETE SET NULL;

二、创建表时添加约束
create table 表名(
    字段名 字段类型 not null,#非空
    字段名 字段类型 primary key,#主键
    字段名 字段类型 unique,#唯一
    字段名 字段类型 default 值,#默认
    constraint 约束名 foreign key(字段名) references 主表(被引用列)

)
注意:
            支持类型        可以起约束名            
列级约束        除了外键        不可以
表级约束        除了非空和默认    可以,但对主键无效

列级约束可以在一个字段上追加多个,中间用空格隔开,没有顺序要求

三、修改表时添加或删除约束
1、非空
添加非空
alter table 表名 modify column 字段名 字段类型 not null;
删除非空
alter table 表名 modify column 字段名 字段类型 ;

2、默认
添加默认
alter table 表名 modify column 字段名 字段类型 default 值;
删除默认
alter table 表名 modify column 字段名 字段类型 ;
3、主键
添加主键
alter table 表名 add【 constraint 约束名】 primary key(字段名);
删除主键
alter table 表名 drop primary key;

4、唯一
添加唯一
alter table 表名 add【 constraint 约束名】 unique(字段名);
删除唯一
alter table 表名 drop index 索引名;
5、外键
添加外键
alter table 表名 add【 constraint 约束名】 foreign key(字段名) references 主表(被引用列);
删除外键
alter table 表名 drop foreign key 约束名;


四、自增长列
特点:
1、不用手动插入值,可以自动提供序列值,默认从1开始,步长为1
auto_increment_increment
如果要更改起始值:手动插入值
如果要更改步长:更改系统变量
set auto_increment_increment=值;
2、一个表至多有一个自增长列
3、自增长列只能支持数值型
4、自增长列必须为一个key

一、创建表时设置自增长列
create table 表(
    字段名 字段类型 约束 auto_increment
)
二、修改表时设置自增长列
alter table 表 modify column 字段名 字段类型 约束 auto_increment
三、删除自增长列
alter table 表 modify column 字段名 字段类型 约束 


 

5.1 库的管理

        

存储位置

 进一步

 更改库的名字不安全,取消了

可以更改库的字符集 

删除库

5.2 表的管理

create table 表名(
列名列的类型【(长度)约束】列名列的类型【(长度)约束】列名列的类型【(长度)约束】,.--
列名列的类型【(长度)约束】
 

 创建表

 

 表的修改

#2.表的修改
#1修改列名
#2修改列的类型或约束

#3添加新列
#4删除列#

#5修改表名
 

1表名的修改

 2修改列的类型或约束

3添加新列

4 删除列#

 5修改表名

#表的删除

 通用写法

DROP DATABASEIFEX工STs 旧库名

;CREATE DATABASE新库名;
DROPTABLE工F EX工STS 旧表名

;CREATETABLE表名()
 

#表的复制

#只复制结构不复制内容

 #结构加内容

 #只复制部分

 
#只复制两个列的结果,没有数据

 5.3 常见的数据类型

数值型:
整型小数:
定点数浮点数
字符型:
较短的文本: char. varchar
较长的文本: text、blob(较长的二进制数据>
日期型:
 

5.3.1 整型 

 ##1.如何设置无符号和有符号

 #无符号

 

5.3.2 浮点型

 

 

 

 5.2.4 字符型

char 固定长度,varchar 是可变长度

 

enum

set

 5.2.5 日期型

 

 #设置时区

 总结

 

 5.4 常见约束

一、常见的约束
NOT NULL:非空,该字段的值必填
UNIQUE:唯一,该字段的值不可重复
DEFAULT:默认,该字段的值不用手动插入有默认值
CHECK:检查,mysql不支持
PRIMARY KEY:主键,该字段的值不可重复并且非空  unique+not null
FOREIGN KEY:外键,该字段的值引用了另外的表的字段

主键和唯一
1、区别:
①、一个表至多有一个主键,但可以有多个唯一
②、主键不允许为空,唯一可以为空
2、相同点
都具有唯一性
都支持组合键,但不推荐
外键:
1、用于限制两个表的关系,从表的字段值引用了主表的某字段值
2、外键列和主表的被引用列要求类型一致,意义一样,名称无要求
3、主表的被引用列要求是一个key(一般就是主键)
4、插入数据,先插入主表
删除数据,先删除从表
可以通过以下两种方式来删除主表的记录
#方式一:级联删除
ALTER TABLE stuinfo ADD CONSTRAINT fk_stu_major FOREIGN KEY(majorid) REFERENCES major(id) ON DELETE CASCADE;

#方式二:级联置空
ALTER TABLE stuinfo ADD CONSTRAINT fk_stu_major FOREIGN KEY(majorid) REFERENCES major(id) ON DELETE SET NULL;

二、创建表时添加约束
create table 表名(
    字段名 字段类型 not null,#非空
    字段名 字段类型 primary key,#主键
    字段名 字段类型 unique,#唯一
    字段名 字段类型 default 值,#默认
    constraint 约束名 foreign key(字段名) references 主表(被引用列)

)
注意:
            支持类型        可以起约束名            
列级约束        除了外键        不可以
表级约束        除了非空和默认    可以,但对主键无效

列级约束可以在一个字段上追加多个,中间用空格隔开,没有顺序要求

三、修改表时添加或删除约束
1、非空
添加非空
alter table 表名 modify column 字段名 字段类型 not null;
删除非空
alter table 表名 modify column 字段名 字段类型 ;

2、默认
添加默认
alter table 表名 modify column 字段名 字段类型 default 值;
删除默认
alter table 表名 modify column 字段名 字段类型 ;
3、主键
添加主键
alter table 表名 add【 constraint 约束名】 primary key(字段名);
删除主键
alter table 表名 drop primary key;

4、唯一
添加唯一
alter table 表名 add【 constraint 约束名】 unique(字段名);
删除唯一
alter table 表名 drop index 索引名;
5、外键
添加外键
alter table 表名 add【 constraint 约束名】 foreign key(字段名) references 主表(被引用列);
删除外键
alter table 表名 drop foreign key 约束名;


四、自增长列
特点:
1、不用手动插入值,可以自动提供序列值,默认从1开始,步长为1
auto_increment_increment
如果要更改起始值:手动插入值
如果要更改步长:更改系统变量
set auto_increment_increment=值;
2、一个表至多有一个自增长列
3、自增长列只能支持数值型
4、自增长列必须为一个key

一、创建表时设置自增长列
create table 表(
    字段名 字段类型 约束 auto_increment
)
二、修改表时设置自增长列
alter table 表 modify column 字段名 字段类型 约束 auto_increment
三、删除自增长列
alter table 表 modify column 字段名 字段类型 约束 


 

 #创建表时候添加约束

1添加列级约束

 

#查看stuinfo表中所有的索引,包括主键、外键、唯一
SHOW INDEX FROM stuinfo;

总结 

 2.添加表级约束

 主键和唯一的对比

 #外键

# 修改表的时候添加约束

 

 

总结

 #修改表的时候删除约束

5.5 标识列 

        

 #修改表的时候设置标识列

 

 6 mysql 事务(TCL)

6.1 事务以及相关概念

一、含义
事务:一条或多条sql语句组成一个执行单位,一组sql语句要么都执行要么都不执行
二、特点(ACID)
A 原子性:一个事务是不可再分割的整体,要么都执行要么都不执行
C 一致性:一个事务可以使数据从一个一致状态切换到另外一个一致的状态
I 隔离性:一个事务不受其他事务的干扰,多个事务互相隔离的
D 持久性:一个事务一旦提交了,则永久的持久化到本地

三、事务的使用步骤 ★
了解:
隐式(自动)事务:没有明显的开启和结束,本身就是一条事务可以自动提交,比如insert、update、delete
显式事务:具有明显的开启和结束

使用显式事务:
①开启事务
set autocommit=0;
start transaction;#可以省略

②编写一组逻辑sql语句
注意:sql语句支持的是insert、update、delete

设置回滚点:
savepoint 回滚点名;

③结束事务
提交:commit;
回滚:rollback;
回滚到指定的地方:rollback to 回滚点名;
四、并发事务
1、事务的并发问题是如何发生的?
多个事务 同时 操作 同一个数据库的相同数据时
2、并发问题都有哪些?
脏读:一个事务读取了其他事务还没有提交的数据,读到的是其他事务“更新”的数据
不可重复读:一个事务多次读取,结果不一样
幻读:一个事务读取了其他事务还没有提交的数据,只是读到的是 其他事务“插入”的数据
3、如何解决并发问题
通过设置隔离级别来解决并发问题
4、隔离级别
                    脏读        不可重复读        幻读
read uncommitted:读未提交     ×                ×              ×        
read committed:读已提交      √                ×              ×
repeatable read:可重复读     √                √              ×
serializable:串行化          √                √              √

事务

 

 

 #事务的创建

隐式事务:事务没有明显的开启和结束的标记
比如insert、update、 delete语句

显式事务:事务具有明显的开启和结束的标记
前提:必须先设置自动提交功能为禁用
 

步骤1:开启事务
set autocommit=0;
start transaction; 可选的
步骤2:编写事务中的sq1语句(select insert update delete)
语句1;
语句2;
步骤3:结束事务
commit;提交事务
rollback;回滚事务
 

 

 

 

6.2 事务的演示

       会开一个专题做一个演示(插入图片太多,写的时候太卡了这个博客)

7视图

7.1语法

一、含义
mysql5.1版本出现的新特性,本身是一个虚拟表,它的数据来自于表,通过执行时动态生成。
好处:
1、简化sql语句
2、提高了sql的重用性
3、保护基表的数据,提高了安全性
二、创建
create view 视图名
as
查询语句;


三、修改
方式一:
create or replace view 视图名
as
查询语句;
方式二:
alter view 视图名
as
查询语句

四、删除
drop view 视图1,视图2,...;
五、查看
desc 视图名;
show create view 视图名;
六、使用
1.插入
insert
2.修改
update
3.删除
delete
4.查看
select
注意:视图一般用于查询的,而不是更新的,所以具备以下特点的视图都不允许更新
①包含分组函数、group by、distinct、having、union、
②join
③常量视图
④where后的子查询用到了from中的表
⑤用到了不可更新的视图


七、视图和表的对比
        关键字        是否占用物理空间            使用
视图    view        占用较小,只保存sql逻辑        一般用于查询
表        table        保存实际的数据            增删改查


 

7.2 举例

 

 

创建

 

 修改和查看

 

视图和表的对比 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

N位分频器的实现

N位分频器的实现 一、 目的 使用verilog实现n位的分频器&#xff0c;可以是偶数&#xff0c;也可以是奇数 二、 原理 FPGA中n位分频器的工作原理可以简要概括为: 分频器的作用是将输入时钟频率分频,输出低于输入时钟频率的时钟信号。n位分频器可以将输入时钟频率分频2^n倍…

SQL-每日一题【620.有趣的电影】

题目 某城市开了一家新的电影院&#xff0c;吸引了很多人过来看电影。该电影院特别注意用户体验&#xff0c;专门有个 LED显示板做电影推荐&#xff0c;上面公布着影评和相关电影描述。 作为该电影院的信息部主管&#xff0c;您需要编写一个 SQL查询&#xff0c;找出所有影片…

【Spring框架】spring对象注入的三种方法

目录 1.属性注入问题&#xff1a;同类型的Bean存储到容器多个&#xff0c;获取时报错的问题&#xff1b;1.将属性的名字和Bean的名字对应上。2.使用AutoWiredQualifier来筛选bean对象&#xff1b; 属性注入优缺点 2.Setter注入Setter注入优缺点 3.构造方法注入&#xff08;Spri…

【Android知识笔记】UI体系(一)

Activity的显示原理 setContentView 首先开发者Activity的onCreate方法中通常调用的setContentView会委托给Window的setContentView方法: 接下来看Window的创建过程: 可见Window的实现类是PhoneWindow,而PhoneWindow是在Activity创建过程中执行attach Context的时候创建的…

0-超级计算机

超级计算机 概述主要特点处理能力并行处理大规模存储应用领域能耗云超算 中国超算流行体系结构片内异构节点内异构 概述 当谈到超级计算机时&#xff0c;我们指的是性能超高、处理能力强大的计算机系统。 它们通常由数以千计的处理器核心组成&#xff0c;并具备大规模的内存和…

小程序如何将商品添加到分类

​将商品添加到分类是非常重要的功能&#xff0c;可以让商家更方便地管理分类和商品。下面将具体介绍如何将产品添加到分类中。 步骤一&#xff1a;选中商品 在个人中心点击管理入口&#xff0c;然后找到“商品管理”菜单并点击。找到需要添加的商品&#xff0c;然后选中它。…

【网络安全带你练爬虫-100练】第15练:模拟用户登录

目录 一、目标1&#xff1a;理清逻辑 二、目标2&#xff1a;将每一步用代码进行表示 三、网络安全O 一、目标1&#xff1a;理清逻辑 模拟登录的基本流程 1、进入入口程序 2、读取目标URL 3、请求加上线程 4、确定请求数据包 5、请求格式的确认 6、数据的处理与判断 二、目标…

MixFormerV2: Efficient Fully Transformer Tracking

摘要 基于变压器的跟踪器在标准基准测试上取得了很强的精度。然而&#xff0c;它们的效率仍然是在GPU和CPU平台上实际部署的一个障碍。在本文中&#xff0c;为了克服这一问题&#xff0c;我们提出了一个完全变压器跟踪框架&#xff0c;称为MixFormerV2&#xff0c;没有任何密集…

我的2023上半年总结

Hi~C站的小伙伴们好久不见哇&#xff01;釉色终于回到C站&#xff0c;开始要输出了&#xff01;这一篇文章是我的2023上半年的总结&#xff0c;以此&#xff0c;致敬那段迷茫但又不曾被辜负的时光。 文章目录 总括——你愿意花五分钟时间读读我的文章吗学习——制定目标&#…

GB/T 25000.51解读——软件产品的性能效率怎么测?

GB/T 25000.51-2016《软件产品质量要求和测试细则》是申请软件检测CNAS认可一定会用到的一部国家标准。在前面的文章中&#xff0c;我们为大家整体介绍了GB/T 25000.51-2016《软件产品质量要求和测试细则》国家标准的结构和所涵盖的内容以及对软件产品的八大质量特性中的功能性…

电机故障诊断(python程序,模型为CNN结合LSTM)

代码运行环境要求&#xff1a;TensorFlow版本>2.4.0&#xff0c;python版本>3.6.0 运行效果视频&#xff1a;电机故障诊断&#xff08;python代码&#xff09;_哔哩哔哩_bilibili 1.电机常见的故障类型有以下几种&#xff1a; 轴承故障&#xff1a;轴承是电机运转时最容…

新星计划打卡学习:VUE3引入element-plus

目录 1、安装element-plus 2、安装按需导入插件 3、修改配置文件 4、添加页面内容 5、保存并重启项目 1、安装element-plus 官网说要想使用element-plus需要先进行安装&#xff0c;并给出了三种安装方式&#xff0c;我选择了第三种。 报错了&#xff1a; 解决的办法&…

同步、异步、阻塞、非阻塞

一、概念 同步与异步&#xff08;线程间调用&#xff09;的区别&#xff1a;关注的是调用方与被调用方之间的交互方式。同步调用会等待被调用方的结果返回&#xff0c;而异步调用则不会等待结果立即返回&#xff0c;可以通过回调或其他方式获取结果。 阻塞非阻塞&#xff08;…

SpringBoot 和 Vue 参数类型不对应,导致method parameter is not present

org.springframework.web.bind.MissingServletRequestParameterException: Required request parameter id for method parameter type String is not present 客户端&#xff1a; requestUserInfoById()const requestUserInfoById async (id?: string) > {} 服务器端&am…

每天一道C语言编程(2^k进制数)

题目描述 设r是个2^k 进制数&#xff0c;并满足以下条件&#xff1a; &#xff08;1&#xff09;r至少是个2位的2^k 进制数。 &#xff08;2&#xff09;作为2^k 进制数&#xff0c;除最后一位外&#xff0c;r的每一位严格小于它右边相邻的那一位。 &#xff08;3&#xff09;…

大数据课程D2——hadoop的概述

文章作者邮箱&#xff1a;yugongshiyesina.cn 地址&#xff1a;广东惠州 ▲ 本章节目的 ⚪ 了解hadoop的定义和特点&#xff1b; ⚪ 掌握hadoop的基础结构&#xff1b; ⚪ 掌握hadoop的常见命令&#xff1b; ⚪ 了解hadoop的执行流程&#xff1b; 一、简介 1…

《零基础入门学习Python》第057讲:论一只爬虫的自我修养5:正则表达式

如果你在课后有勤加练习&#xff0c;那么你对于字符串的查找应该是已经深恶痛绝了&#xff0c;你发现下载一个网页是很容易的&#xff0c;但是要在网页中查找到你需要的内容&#xff0c;那就是困难的&#xff0c;你发现字符串查找并没有你想象的那么简单&#xff0c;并不是说直…

【Matlab】基于粒子群优化算法优化BP神经网络的数据回归预测(Excel可直接替换数据)

【Matlab】基于粒子群优化算法优化 BP 神经网络的数据回归预测&#xff08;Excel可直接替换数据&#xff09; 1.模型原理2.数学公式3.文件结构4.Excel数据5.分块代码5.1 fun.m5.2 main.m 6.完整代码6.1 fun.m6.2 main.m 7.运行结果 1.模型原理 基于粒子群优化算法&#xff08;…

3个能免费使用的AI绘画软件,效果精致

通过AI绘画软件&#xff0c;设计小白也能轻松创作出精美的图画创作。本文将为大家介绍3款能免费使用的AI绘画软件&#xff0c;它们能帮助设计小白或者经验丰富的设计师快速设计出精美的图画作品&#xff0c;一起来看看吧&#xff01; 1、即时灵感 即时灵感是国产的AI绘画软件…

[JAVAee]synchronized关键字

目录 1.synchronized的特性 ①互斥性 ②可重入性 2.synchronized的使用示例 ①修饰普通方法 ②修饰静态方法 ③修饰代码块 1.synchronized的特性 ①互斥性 互斥性,就像是给门上锁了一样. 当A线程使用了被synchronized修饰的代码块并对其上锁,其他线程(B线程,C线程)想要使…