mysql -速成

news2025/1/9 15:15:41

目录

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 举例

 

 

创建

 

 修改和查看

 

视图和表的对比 

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

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

相关文章

数据库的聚合函数和窗口函数

1. 聚合函数 数据库的聚合函数是用于对数据集执行聚合计算的函数。它们将一组值作为输入&#xff0c;并生成单个聚合值作为输出。聚合函数通常与GROUP BY子句结合使用&#xff0c;以便在数据分组的基础上执行聚合操作。 1.1. 常用的聚合函数 COUNT()&#xff1a;计算指定列或…

(五)springboot实战——springboot自定义事件的发布和订阅

前言 本节内容我们主要介绍一下springboot自定义事件的发布与订阅功能&#xff0c;一些特定应用场景下使用自定义事件发布功能&#xff0c;能大大降低我们代码的耦合性&#xff0c;使得我们应用程序的扩展更加方便。就本身而言&#xff0c;springboot的事件机制是通过观察者设…

Python(三十九)for-in循环

❤️ 专栏简介&#xff1a;本专栏记录了我个人从零开始学习Python编程的过程。在这个专栏中&#xff0c;我将分享我在学习Python的过程中的学习笔记、学习路线以及各个知识点。 ☀️ 专栏适用人群 &#xff1a;本专栏适用于希望学习Python编程的初学者和有一定编程基础的人。无…

JAVA设计模式——模板设计模式(heima)

JAVA设计模式——模板设计模式&#xff08;heima&#xff09; 文章目录 JAVA设计模式——模板设计模式&#xff08;heima&#xff09;一、模板类二、子类2.1 Tom类2.2 Tony类 三、测试类 一、模板类 package _01模板设计模式;public abstract class TextTemplate{public final…

利用FME实现批量提取图斑特征点、关键界址点提取、图斑拐点抽稀,解决出界址点成果表时点数过多问题的方法

目录 一、实现效果 二、实现过程 1.提取图斑界址点 2.计算各界址点的角度 3.筛选提取关键界址点 三、总结 对于范围较大的图斑&#xff0c;界址点数目较大&#xff0c;在出界址点成果表前&#xff0c;往往需要对界址点进行处理&#xff0c;提取出关键特征点作为出界址点成…

数据库集群方案详解

本期直播我们邀请 KaiwuDB 资深解决方案专家周幸骏&#xff0c;为大家分享数据库集群方案详解。周老师毕业于复旦大学数学系&#xff0c;从业 20 余年&#xff0c;曾在 IBM 公司任资深技术专家&#xff0c;并为多家国有大型商业银行提供技术咨询和数据库业务连续方案设计等服务…

IBM:2023 年数据泄露的平均成本将达到 445 万美元

IBM 发布年度《数据泄露成本报告》&#xff0c;显示 2023 年全球数据泄露平均成本达到 445 万美元&#xff0c;比过去 3 年增加了 15%。创下该报告的历史新高。 报告显示&#xff0c;企业在计划如何应对日益增长的数据泄露频率和成本方面存在分歧。研究发现&#xff0c;虽然 95…

Linux学成之路(基础篇)(二十三)MySQL服务(上)

目录 一、概述 一、什么是MySQL 二、数据库能干什么 三、为什么要用数据库&#xff0c;优势、特性&#xff1f; 二、数据库类型 一、关系型数据库 RDBMS 一、概述 二、特点 三、代表产品 二、非关系型数据库 一、概述 二、特点 三、代表产品 三、数据库模型 一、…

【GEE笔记】主成分分析(PCA)算法的实现和应用

前言 主成分分析&#xff08;PCA&#xff09;是一种常用的降维方法&#xff0c;它可以将多个相关的变量转换为少数几个不相关的变量&#xff0c;称为主成分&#xff08;PC&#xff09;。这些主成分可以反映原始变量的大部分信息&#xff0c;同时减少数据的复杂度和冗余性。在遥…

结构型设计模式之组合模式【设计模式系列】

系列文章目录 C技能系列 Linux通信架构系列 C高性能优化编程系列 深入理解软件架构设计系列 高级C并发线程编程 设计模式系列 期待你的关注哦&#xff01;&#xff01;&#xff01; 现在的一切都是为将来的梦想编织翅膀&#xff0c;让梦想在现实中展翅高飞。 Now everythi…

【nginx】nginx中root与alias的区别:

文章目录 root与alias主要区别在于nginx如何解释location后面的uri&#xff0c;这会使两者分别以不同的方式将请求映射到服务器文件上。 root的处理结果是&#xff1a;root路径&#xff0b;location路径 alias的处理结果是&#xff1a;使用alias路径替换location路径 alias是一…

前端配置nginx反向代理

1.下载nginx 2.进入nginx.conf 3.配置 4.将nginx放入前端项目根目录 5.启动后端项目和nginx服务 启动命令 start nginx ; 重新启动命令 nginx -s reload 6.访问localhost就能看到项目了&#xff08;默认80端口&#xff09; 注意&#xff1a;如果nginx配置了域名&#xff0…

Android ConstraintLayout使用攻略

原文链接 Android ConstraintLayout使用攻略 ConstraintLayout是新一代的布局&#xff0c;它汲取了众家之长&#xff0c;把布局的概念进行了大统一&#xff0c;灵活且强大&#xff0c;基本上可以干掉以前所有的常用布局&#xff08;LinearLayout, RelativeLayout和FrameLayout…

94.qt qml-分页Table表格组件

在我们之前学习了87.qt qml-分页组件控件(支持设置任意折叠页数等)_qt分页控件_诺谦的博客-CSDN博客 然后我们又学习了Table实现,所以本章实现一个分页Table表格组件,配合分页控件, 模拟请求服务器数据来实现数据分解效果,因为一般使用分页的时候,一般都是分页请求,避免数…

Flutter的开发环境搭建-图解

前言&#xff1a;Flutter作为一个移动应用开发框架&#xff0c;具有许多优点和一些局限性。最大的优点就是-跨平台开发&#xff1a;Flutter可以在iOS和Android等多个平台上进行跨平台开发&#xff0c;使用一套代码编写应用程序&#xff0c;节省开发时间和成本。 Flutter可以编…

python将大文件拆分为多个小文件

如上图&#xff0c;目前采用单行不停写入的方式&#xff0c;这里是读了两次文件&#xff0c;第一次读取文件是为了获取总行数&#xff0c;第二次读取是取数据内容。 如果只读取一次文件&#xff0c;则会对内存有一定的要求&#xff0c;会需要在第一次读取数据的时候就将文件内…

ONNX Runtime 加速深度学习(C++ 、python)详细介绍

ONNX Runtime 加速深度学习(C 、python)详细介绍 本文在 https://blog.csdn.net/u013250861/article/details/127829944 基础上进行了更改&#xff0c;感谢原作&#xff01; ONNXRuntime(Open Neural Network Exchange)是微软推出的一款针对ONNX模型格式的推理框架&#xff0c…

Redis常用数据类型和使用场景

Redis目前支持5种数据类型&#xff0c;分别是&#xff1a; String&#xff08;字符串&#xff09; List&#xff08;列表&#xff09; Hash&#xff08;字典&#xff09; Set&#xff08;集合&#xff09; Sorted Set&#xff08;有序集合&#xff09; 下面就分别介绍这五…

Qt Core学习日记——第六天QMetaMethod

Qt子类会将每一个函数封装成QMetaMethod存储在对应的QMetaObject中&#xff0c;包括信号、槽函数、普通函数、构造函数、析构函数 函数解析 QMetaMethod::methodSignature 获取方法的签名 比如函数slot2&#xff0c;对应签名是“slot2(int*)” QMetaMethod::name 方法名称。…

13.2.3 【Linux】新增与移除群组

基本上&#xff0c;群组的内容都与这两个文件有关&#xff1a;/etc/group, /etc/gshadow。 群组的内容其实很简单&#xff0c;都是上面两个文件的新增、修改与移除而已。 groupadd 为了让使用者的 UID/GID 成对&#xff0c;建议新建的与使用者私有群组无关的其他群组时&#x…