• Mysql数据库基础总结:


    什么是数据库:

    数据库(DataBase):存储和管理数据的一个仓库。

    数据库类型分为:关系型数据库和非关系型数据库。

    关系型数据库(SQL):存储的数据以行和列为格式,类似于excel表格,一张二维表。例如:MySQL、Oracle等。

    非关系型数据库:数据是以对象类型存储。例如:redis、mongdb等。

    几个概念介绍:

    • DB:DataBase数据库。
    • DBMS:DataBase Management System数据库管理系统。
    • DBS:DataBase System数据库系统。
    • DBA:DataBase Administrator数据库管理员。

    MySQL介绍:

    开源免费、属于Oracle公司旗下。体积小、速度快。

    常用版本:5.7和8.0两个版本。

    MySQL安装

    请参考:百度

    MySQL可视化工具:

    常见的MySQL可视化管理工具有:Navicat、sqlyog、DBeaver等。

    五种SQL类型:

    • DDL:Data Definition Language,数据定义语言。例如:create、alter、drop等,主要用于操作表结构。
    • DML:Data Manipulation Language,数据操纵语言。例如:select、insert、delete、update,主要用于操作表中数据。
    • DCL:Data Control Language,数据控制语言。例如:grant、deny、revoke,主要用于控制数据访问权限。
    • DTL:Data Transaction Language,数据事务语言。例如:commit、rollback,主要用于事务控制。
    • DQL:Data Query Language,数据查询语言。例如:select,主要用于查询数据表中的数据。

    操作数据库命令:

    创建数据库

    create database 数据库名称;
    
    • 1

    指定数据库字符集

    create database 数据库名称 default character set utf8;
    
    • 1

    指定数据库引擎

    create database 数据库名称 engine = innodb
    
    • 1

    删除数据库

    drop database 数据库名称;
    
    • 1

    使用数据库

    use 数据库名称;
    
    • 1

    查看已有数据库

    show databases; -- 有s
    
    • 1

    查看某个数据库的信息

    show create database 数据库名称;
    
    • 1

    数据表操作:

    创建数据表

    create table 表名称(
        字段名称 类型 [属性] [索引] [注释],
        字段名称 类型 [属性] [索引] [注释],
        字段名称 类型 [属性] [索引] [注释]
    );
     
    CREATE TABLE  USER (
        id INT PRIMARY KEY auto_increment,
        username VARCHAR (20) NOT NULL,
        password VARCHAR (20) NOT NULL
    );
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    数据表字段类型:

    数值类型

    • tinyint:占用1字节。
    • int:占用4字节。这是常用类型。
    • bigint:占用8字节。
    • float:4字节。
    • double:8字节。
    • decimal:高精度浮点类型,字符串类型的浮点类型。

    字符串类型

    • char:固定长度的字符串类型。0到255长度。
    • varchar:可变长度的字符串类型。0到65536长度。这是常用类型。
    • tingtext:微型文本。2^8-1长度,博客文章可以使用该类型足以。
    • text:文本串。2^16-1长度。

    日期类型

    • date:日期类型,格式:yyyy-MM-dd。
    • time:时间类型,格式:HH:mm:ss。
    • datetime:日期时间类型,格式:yyyy-MM-dd HH:mm:ss。这是常用类型。
    • timestamp:时间戳类型,格式:毫秒数。

    myisam和innodb区别

    myisaminnodb
    事务支持不支持支持
    数据行锁定不支持(默认是表锁)支持
    外键约束不支持支持
    全文索引支持不支持
    表空间大小较小较大,约是myisam的2倍

    mysiam优点:节约空间、存储速度快。

    innodb优点:安全性高,支持事务,支持多用户多表操作。

    数据表操作

    添加数据

    insert into 表名称 (字段1,字段2...) values (1,2...);
    
    • 1

    更新数据

    update 表名称 set 字段1=1,字段2=2... where 条件;
    
    • 1

    删除数据

    delete from 表名称; -- 全表删除
     
    delete from 表名称 where 条件; -- 指定数据删除
    
    • 1
    • 2
    • 3

    清空数据

    truncate 表名称;
    
    • 1

    truncate作用是清空一张数据表中的所有数据,表的结构和索引约束不会改变。

    delete和truncate区别

    • delete和truncate都可以用于清空一张数据表的所有数据。
    • delete清空数据后,数据的自增值不会从1开始。
    • truncate清空数据后,数据的自增会从1开始。
    • delete删除问题,对于innodb引擎,重启数据库后,自增值会从1开始,因为innodb引擎下,自增数据存储在内存中。
    • 对于myisam引擎,delete删除问题,重启数据库后,自增值不会从1开始,因为myisam引擎下,自增数据存储在文件中。

    数据库查询

    基本查询语句格式

    select 字段 from 表名称 where 条件 order by 排序字段 group by 分组字段 Asc/Desc;
    
    • 1

    去重查询

    select distinct 字段 from 表名称 where 条件;
    
    • 1

    使用关键字distinct去除重复的数据,只保留一条。

    like模糊查询

    select 字段 from 表名称 where 字段 like '%内容%';
    
    • 1
    • %百分号表示任意字符,下划线_表示一个字符。

    IN范围查询

    select 字段 from 表名称 where 字段 in(1,2,3);
    
    • 1
    • 表示字段是值1、值2、值3其中的一个即可。

    数据联表查询

    • inner join内连接
    select 字段
    from A
    inner join B 
    on A.x = B.x
    where 条件;
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述

    • left join 左连接(不含交集情况)
    select 字段
    from A
    left join B
    on A.x = B.x
    where B.x is null;
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述

    • right join 右连接(不含交集情况)
    select 字段
    from A
    right join B
    on A.x = B.x
    where A.x is null;
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述

    • left join 左连接(含交集情况)
    select 字段
    from A
    left join B
    on A.x = B.x
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    • right join 右连接(含交集情况)
    select 字段
    from A
    right join B
    on A.x = B.x
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    • full outer join 全外连接(含交集情况)
    select 字段
    from A
    full outer join B
    on A.x = B.x
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    • full outer join 全外连接(不含交集情况)
    select 字段
    from A
    full outer join B
    on A.x = B.x
    where A.x is null or B.x is null;
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述

    数据库聚合函数

    count()函数:统计数量。

    -- 指定列计数
    select count(指定列) from 表名称;
     
    -- *
    select count(*) from 表名称;
     
    -- 1
    select count(1) from 表名称;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    三者区别:

    • count(指定列):只统计该列的数量,如果该列的值为null,则不统计该列。
    • count(*):统计所有列,相当于按行计数,如果为null,则也会就行统计。
    • count(1):和count(*)类似。

    max()函数:求最大值。

    select max(指定列) from 表名称;
    
    • 1

    min()函数:求最小值。

    select min(指定列) from 表名称;
    
    • 1

    avg()函数:求平均值。

    select avg(指定列) from 表名称;
    
    • 1

    sum()函数:求数据总和。

    select sum(指定列) from 表名称;
    
    • 1

    分组查询

    分组语法

    在 MySQL 使用 GROUP BY 来实现分组。语法如下:
    SELECT [DISTINCT] *|分组字段1 [别名] [, 分组字段2 [别名] ,…] | 统计函数
    FROM 表名称 [别名], [表名称 [别名] , …]
    [WHERE 条件(s)]
    [GROUP BY 分组字段1 [, 分组字段2 ,…]]
    [ORDER BY 排序字段 ASC | DESC [, 排序字段 ASC | DESC]];
    
    • 1
    • 2
    • 3
    • 4
    • 5
    分组效果:
    • 使用 GROUP BY 子句将表分成小组;
    • 结果集隐式按升序排列,如果需要改变排序方式可以使用 ORDER BY 子句。

    使用分组注意

    • SELECT 子句出现的字段,要不在统计函数中,要不出现在 GROUP BY 子句中,否则不合理(整
    • 体与个体);
    • 在GROUP BY 子句中出现的字段,可以不出现在 SELECT 列表中;
    • 统计函数可以单独使用,SQL 中可以没有 GROUP BY 子句;
    • 在 GROUP BY 子句中,可以按单列进行分组,也可以在多列上进行分组,多列分组就是按照多个
    • 字段的组合进行分组,最终的结果也会按照分组字段进行排序显示。

    分组限定

    • 不能在 WHERE 子句中对分组限定,限制组须使用 HAVING 子句;
    • 不能在 WHERE 子句中使用统计函数,而在 HAVING 子句可使用统计函数。

    列子:

    查询在 80, 81, 82 年各进公司多少人
    
    SELECT YEAR(HIREDATE) y, COUNT(EMPNO)
    FROM emp
    GROUP BY YEAR(HIREDATE)
    HAVING y BETWEEN '1980' AND '1982'
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
  • 相关阅读:
    Java框架(三)--Spring IoC容器与Bean管理(5)--bean scope属性及bean的生命周期
    无效的训练数据。序列响应必须与对应的预测变量具有相同的序列长度。哪里出了问题
    自动驾驶算法———车道检测(一)
    ARCGIS---dem生成高程点
    计算机网络 —— 运输层
    idea maven 打包 内存溢出 报 GC overhead limit exceeded -> [Help 1]
    Docker-compose
    魔众短链接系统 v3.9.0
    JavaScript - 手写call、apply和bind函数
    构造方法绝不是在new()之后就立马执行!!!!!
  • 原文地址:https://blog.csdn.net/qq_45525848/article/details/132791251