学会Mysql看这一篇就够了

本文详细介绍了MySQL数据库的基础知识,包括其特点、功能、安装过程的简化介绍以及基础操作如创建数据库、数据类型、查询、插入、删除和约束。同时涵盖了进阶查询技巧、索引优化、事务管理和常用的存储引擎如innoDB、MyISAM和CSV的特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

基本知识:

MySQL数据库的特点和功能

关于MySQL数据库的安装与环境变量的配置信息这里暂时掠过,直接开始介绍他的基础功能和方法

        创建数据库语句

         指定编码格式                        create database if not exists 数据库名 charset = 编码格式(utf8,gbk,ascll);                        create database if not exists 数据库名 character set 编码格(utf8,gbk,ascll);

        删除一个数据库

        使用一个数据库

数据相关

    查询数据

    插入数据

                     删除数据

数据库列约束

        主键

          外键

    进阶查询

数据库中列的数据类型

    数字

    字符串

    时间日期

    enum

常用技术

    聚合函数

    系统函数调用

      排序

        分组: 针对查询结果进行分组(group by)

        分页( limit)

                                  去重( distinct):去重某一列

关联查询

    嵌套查询(一个查询的结果是另一个查询的内容)

MySQL扩展知识

    视图: 一张虚拟表

      索引: 一种查询优化技术,预先存储查询对应的内容,可以提升查询效率            实现的本质是要预先存储一些额外数据,牺牲存储空间提升查询效率

                       事务(mysql存储引擎innoDB支持事务) 

MySQL存储引擎(数据的存储的实现方式,不同的存储引擎适合不同的场景)

        innoDB(Mysql5.7版本默认)

        MyISAM

        CSV

                


基本知识:

        数据库的定义:数据库就是对大量数据进行存储和管理(crud-增删改查)

        数据库的分类:关系型数据库和非关系型数据库

        关系型数据库

                典型代表:MySQL,Oracle,SQL server

                特点:通过表产生关联关系,每个表中都存储结构化数据。支持SQL结构化查询语言

         非关系型数据库

                典型代表:redis,mongodb

                特点:存储管理非结构化数据库,高性能,适应分布式

        SQL语言分类
            数据定义语言:DDL--Data Design Language(create\drop\alter\rename)     
            数据控制语言:DML--DataManageLanguage(insert\delete\update\select)
       

MySQL数据库的特点和功能

MySQL是一种广泛使用的开源关系型数据库管理系统(RDBMS),具有以下优点和功能:

  1. 易用性:MySQL具有简单易学的特点,提供了直观的命令和语法,使得开发人员可以快速上手并进行数据库操作。

  2. 高性能:MySQL通过优化的查询引擎和索引机制,能够快速处理大量的数据。它支持高效的并发处理,能够处理高负载的应用场景。

  3. 可扩展性:MySQL支持水平和垂直两种扩展方式。水平扩展通过添加更多的服务器来分担负载,垂直扩展通过增加硬件资源来提升性能。

  4. 稳定性和可靠性:MySQL经过广泛的测试和生产环境验证,已被证明在各种应用场景下具有良好的稳定性和可靠性。

  5. 安全性:MySQL提供了多层级的安全措施,包括基于角色的访问控制、数据加密、用户身份验证等,以保护数据库的安全性。

  6. 丰富的功能:MySQL提供了丰富的功能集,包括事务支持、复制和故障恢复、存储过程和触发器、全文搜索、GIS和空间数据处理等。

  7. 广泛的应用支持:MySQL被广泛应用于各种不同规模和类型的应用中,包括Web应用、企业级应用、数据仓库、移动应用等。

关于MySQL数据库的安装与环境变量的配置信息这里暂时掠过,直接开始介绍他的基础功能和方法
        创建数据库语句

                        create database 数据库名;

                        create database if not exists 数据库名;
                   

         指定编码格式
                        create database if not exists 数据库名 charset = 编码格式(utf8,gbk,ascll);
                        create database if not exists 数据库名 character set 编码格(utf8,gbk,ascll);

        

        删除一个数据库


                    drop database 数据库名;

        使用一个数据库


                    use 数据库名;
                        表相关
                            查询当前数据库所有表
                                show tables
                            创建表
                                create table 表名 (列1 数据类型 约束,  列2 数据类型 约束,  列3 数据类型 约束, .....);
                            查看表信息
                                desc 表名;
                            删除表
                                drop table 表名;
                            修改表名
                                rename table 原始表名 to 新表名;
                            alter table 表名 
                                添加列
                                    add 列名 类型 约束条件;
                                删除列
                                    drop 列名;
                        修改列数据
                                    change 原始列名 新列名 类型 约束条件 

数据相关


    查询数据


                select * from 表名;
                select 列1,列2 from 表名;
                select * from 表名 where 条件;


    插入数据


        方式1
            全列插入
                需要给每一列赋值:insert into 表名 values(列1,列2,列3......);                
                插入多行:insert into 表名 values(),(),(),.....;
                    
        方式2
            缺省插入1
                需要指定列指定值:insert into 表名(列1,列2,列3......) values (值1,值2,值3......)                      插入多行:insert into 表名(列1,列2,列3......) value(),(),();                 
            缺省插入2:只能写入一行-----insert into 表名 set 列1 = 值1,列2 = 值2......;     

 
                
    删除数据


        delete from 表名 where 条件;

数据库列约束

        主键


    主键(primary key): 一个表中必须有一列是主键, 主键列默认不能重复,一般都是有一个独立的列id  
   定义主键:可以之间在列类型之后使用primary key,也可以在定义完所有列之后单独使用primary key(列名)
    非空:not null
    唯一:unique
    自动增长:auto_increment
    默认值:default


          外键


        建表时添加外键
                格式:create table 表名 (列......,constraint 外键名 foreign key (外键列明) references 主表(主键)on update cascade on delete cascade); 

        建表后添加外键
                alter table 表名 add constraint 外键名 foreign key 
        外键的值在主表中必须存在
        删除外键
            alter table 表名 drop foreign key 外键名;

       外键修饰符选项
            RESTRICT:拒绝
                    加入有外键使用到主表中的主键,在修改删除主键时外键是不能操作的
            CASCADE:级联
                    删除修改主表时,外键对应的内容直接删除或更新

    进阶查询


        基础使用
            select * from 表名 ;  查询所有行的所有列
            select 列名1,列名2,......from 表名; 查询指定的列的所有行
            select 列名1,列名2,......from 表名 where 条件; 查询部分行的部分列
        别名
            select 列名1 as 别名,列名2 as 别名,...... from表名 where 条件;
                针对查询到的列起别名,对数据库不产生任何影响
                应用方面:多表查询,有共同的列表
        条件(where)
                比较运算符: =,!=,<>,<,>,<=,>=

        多个条件
                    and:  并且
                    or:   或者
                成员
                    in( 在其中一个)
                    not in(不在其中任何一个)
                模糊查询(like)                    
                    like '%查询的内容%'
                        _代表一个字符
                        %代表n个字符
                判空(null)空字符串不是空
                    is null:是空
                    is not null:非空

数据库中列的数据类型


    数字


        int:整数(4个字节)           
        bigint:长整数( 8个字节)
        float:浮点数(单精度4个字节)
        double:浮点数(双精度8个字节)
        decimal:高精度(一般用于需要精确小数位数)

    字符串


       可变长度:varchar()            
        长度固定:char            
        长文本:text
            
    bool:0,1


    时间日期


        date
        time
        datetime
        timestamp


    enum


        罗列所有可能值到括号里面
        enum(值1,值2,值3,值4) default 值1; 

常用技术


    聚合函数


        max() :求最大值
        min(): 求最小值
        avg(): 求平均值
        sum():  求和
        count(任意列名):  统计行数


    系统函数调用


        user(): 当前用户
        version():当前数据库版本
        database(): 当前数据库
        current_time(): 当前日期
        current_time(): 当前时间
        current_timestamp: 当前时间日期(时间戳)

      排序


                order by 列名  排列规则,列名  排列规则
                 asc从小到大顺序(默认)
                 desc从大到小逆序


        分组: 针对查询结果进行分组(group by)

                
                select count(*),列名 from 表名 where 条件                 
                having 指的是针对分组结果进行处理
                having 列名条件

select gender,count(*) from teachers where id > 4 group by gender having gender in ('男', '女');

        分页( limit)


                方式一:显示前n个         limit n;           
                
                方式二:limit n, m;            
                从索引n开始显示m个,第一个索引是起始位置
                 起始页和页面大小的关系公式:显示page页,每页显示size条数据,起始页数 = limit(page-1)*size, size

    
                    
          去重( distinct):去重某一列

关联查询


    嵌套查询(一个查询的结果是另一个查询的内容)

   
    连接查询

            笛卡尔连接:组合两个表中的所有数据(一个有m行数据,一个有n行数据,最终有m*n行数据)                  
            
     内连接(inner join )
            inner join 表名 on 连接条件               

 select students.name as 学生姓名,teachers.name as 教师姓名from students inner join teachers on students.id = teachers.id;


        左外连接( 内连接结果+左表内容(左侧补null))           
        右外连接(内连接结果+右侧内容(右侧补null))            
        全连接 ( 左外连接 union 右外连接)
          

MySQL扩展知识


    视图: 一张虚拟表

        特点: 方便查询,  修改表等同于操作真实数据


    函数与存储过程( 可以自定义数据库级别)
        函数: 经过计算返回一个值, 需要指定形参和返回值
            select 函数名(实参)
        存储过程( 一套SQL操作,没有返回值)
            call 过程名(实参)
        都是存储在服务器上的,客户端不需要关注具体实现可以提升数据的安全

      索引: 一种查询优化技术,预先存储查询对应的内容,可以提升查询效率
            实现的本质是要预先存储一些额外数据,牺牲存储空间提升查询效率


              索引类型:主键索引,唯一索引,普通索引        
              何时定义索引:索引不是创建越多越好,修改频率高不要创建索引,修改频率低创建索引      
                如果表的修改频率非常高,不适合创建索引
                如果表的查询频率非常高,几乎不修改,适合创建索引
             索引方法
                    BTREE(适合大数据量,范围比较)                
                    HASH(适合小数据量,适合精准的等值比较)


                
       事务(mysql存储引擎innoDB支持事务) 

               事务特性(ACID原则)    
                原子性:事务被视为是一个不可再分的整体,要么全部成功,要么全部失败
                隔离性:各个事务并发执行时,每个事务都应该相互不影响
                持久性:一旦提交,则执行完毕,永久改变
                一致性:事务执行前后数据库都必须保持一致

                事务的定义: MySQL数据库对应的一系列事务操作要么全部成功然后提交,要么全部执行失败然后执行回滚roll back
                 成功:commit
                 失败:roll back          
                
                mysql终端默认自动提交
                    取消自动提交:set autocommit = 0;                
                    设置自动提交:set autocommit = 1;

                事务相关
                    开启事务(默认不会自动提交):start transaction       
                    结束事务: commit(成功提交)或者   rollback( 失败回滚)

MySQL存储引擎(数据的存储的实现方式,不同的存储引擎适合不同的场景)


    存储引擎的设置语句
        

create table ( 列1 数据类型 约束条件,列2 数据类型 约束条件,......)engine = 引擎名字;

   
    MySQL常用引擎


        innoDB(Mysql5.7版本默认)


            特点
                支持事务
                支持行级别锁定,阻塞
                支持外键
                综合能力强,适用于大多数场景
                使用后缀为frm文件存储表结构
                使用后缀为ibd文件存储内容


        MyISAM


            特点
                查询,排序速度非常快
                不支持外键
        memory(使用内存)
            特点
                读写内存速度最快
                但是不能持久化(不能在本地保存)


        CSV


            特点
                使用逗号隔开
                适合导入导出操作
                不支持auto_increment
                不允许数据为空


      
            
      
          
                
  
  


  
        
    
  


    
                        
                


            

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值