Mysql介绍及基本使用

165 阅读7分钟

什么是数据库

数据库的定义

数据库(Database,DB)指长期存储在计算机内的、有组织的、可共享的数据集合。通俗的讲,数据库就是存储数据的地方,就像冰箱是存储食物的地方一样。

在开发中,常说的数据库实际上是指数据库管理系统(Database Management System ,DBMS)。是数据库系统的核心软件之一,是位于用户与操作系统之间的数据管理软件,用于建立,使用和维护数据库。它的主要功能包括数据定义、数据操作、数据库的运行管理、数据库的建立和维护等几个方面。

为什么要使用数据库

  1. 数据库可以结构化存储大量的数据信息,方便用户进行有效的检索和访问。例如,我们平时使用百度搜索内容时,百度也是基于数 据库和数据分类技术来达到快速搜索的目的。
  2. 数据库可以有效地保持数据信息的一致性、完整性、降 低数据冗余。
  3. 数据库可以满足应用的共享和安全方面的要求,把数据 放在数据库中在很多情况下也是出于安全的考虑。例如 如果把所有员工信息和工资数据都放在磁盘文件上,则 工资的保密性就无从谈起。如果把员工信息和工资数据 放在数据库中,就可以只允许查询和修改员工信息,而 工资信息只允许指定人(如财务人员)查看,从而保证 数据的安全性。
  4. 数据库技术能够方便智能化地分析,产生新的有用信息

DBMS的分类

1. 关系型数据库

  1. 概念:关系型数据库是指采用了关系模型来组织数据的数据库。简单来说,关系模式就是一个二维表格模型,可以类比Excel。
  2. 主要代表:MS SQL Server、Oracle、MySQL、PostgreSQL等等。
  3. 优点:容易理解、使用方便、易于维护。

2. 非关系型数据库

  1. NoSQL提出了另一种理念,泛指非关系型的数据库,区别于关系数据库,它们不保证关系数据的ACID特性。例如常用的Redis采用键值存储形式,而 MangoDB为文档型等。
  2. 主要代表:Redis、MangoDB 等等。
  3. 优点:易扩展、大数据量、高性能。

MySQL的优势

  1. 上手简单
  2. 免费使用、开放源码
  3. 高性能、强安全、可依赖
  4. 有一定的市场占有率

Mysql中数据类型长度的定义

一文搞懂字符和字节的含义

MySQL的基本知识

基本数据类型

  1. 数值

    数据类型字节数备注
    tinyint1
    smallint2
    mediumint3
    int4最常用的int类型
    bigint8
    float4
    double8精度更大
    decimal字符串形式的浮点数,一般在金融计算中使用
  2. 字符串

    数据类型字符串长度备注
    char固定长度大小0~255
    varchar可变字符串0~65535可以指定长度大小
    text文本串2^16-1保存大文本
  3. 时间日期

    数据类型时间格式
    dateYYYY-MM-DD,日期格式
    timeHH:MM:SS,时间格式
    datetimeYYYY-MM-DD HH:MM:SS,最常用的时间格式字段属性

字段属性

  1. 主键

    • 主键是一个列或者多个列的组合(主键可以有多个),其值能唯一地标识表中的每一行。也就是说,我们在设计表时,需要有一个东西能够让每一行唯一确定,所以主键是强制要被设定的。并且,设定主键之后,主键是不能为null值的。另外如果我们有两个相同的主键,会报错误。
    • 一般在开发中,我们基本会将id设置为主键,之后给一个自动递增防止重复。
  2. 默认值

    默认值直观易懂,就是每个字段在初始化时如果没有赋值,那么就会给予一个设定的默认值。

  3. 自增

    默认每次增加一条数据记录时都会在原有的基础上+1,也可以自己设置自增的步进。

  4. 无符号

    相当于unsigned,声明这一列的数据不能是负数。

  5. 填充零

    字面意思,不够的位数使用0来填充,比如你使用了一个长度为3的int类型的字段。前面的空位会用0自动填充。

基础CRUD

写在前面

  • MySQL的DML(数据库操作语言)遵守SQL的DML规范,主要就是对数据库里的数据增删改查操作
  • –如果你使用Navicat或DataGrip等数据库可视化工具,所有的增删改查操作都可以像Excel一样,直接使用可视化操作,这些操作的对应的SQL语句都可以直接在SQL预览中看到。当然,不能说你有可视化界面我们就可以不用去学MySQL的语句。我们这节课只是皮毛的东西,之后的包括事务、索引优化、三大范式等等,都需要你熟练掌握MySQL的基本的CRUD。
  • –所谓的CRUD就是对数据库进行增删改查,主要涉及SELECT、INSERT、UPDATE和DELETE等语句

基本语法于简单应用

1. SELECT语句

  • 基本语法

     select <data> from <tableName>
    
  • 简单应用

    • 条件查询(关键字where)

       SELECT * FROM student WHERE `name` = 'cxy';
       #在一般的项目开发中,一般都是前端传一个特定的值给我们,然后我们根据这个值返回数据库中的数据。所以这个语句使用非常频繁
       ​
       SELECT * FROM `data` WHERE `number` BETWEEN 1 AND 100 ORDER BY `number` DESC;
       #使用between and 进行一个闭区间内的查询,并且进行排序
       ​
       SELECT * FROM student WHERE `name` = 'cxy' AND `age` = 18;
       #使用and/or进行多个条件约束
       ​
       SELECT * FROM `data` WHERE `number` IN('1', '3');
       #选择表中,number值为1或者3的数据
      
    • 模糊查询(关键字like)

      • 通配符

        • %代替任意字符
        • _代替一个字符
      • 举例

         SELECT * FROM student WHERE `like` LIKE '乐%';
         #查出like字段以 乐 开头的数据
         ​
         SELECT * FROM student WHERE `like` LIKE '_ nice';
         #相当于用_代替任意一个字符
        
    • 分组查询(关键字group by)

       # 查询一个公司每个工种的最高工资
       SELECT MAX(salary),job_id
       FROM employees
       GROUP BY job_id;
        
        
       #查询每个位置上的部门个数
       SELECT COUNT(*),location_id
       FROM departments
       GROUP BY location_id;
       ​
       #查询每个工种有奖金的员工的最高工资>12000的工种编号和最高工资
       SELECT MAX(salary),job_id
       FROM employees
       GROUP BU job_id
       HAVING MAX(salary)>12000;
        
       #查询领导编号>102的每个领导手下的员工最低工资>5000的领导编号,以及其最低工资
       SELECT MIN(salary),manager_id
       FROM employees
       WHERE manager_id>102
       GROUP BY manager_id
       HAVING MIN(salary)>5000
      
    • 子查询

      • 放在where后

         SELECT * FROM student WHERE age >
         (SELECT age FROM student WHERE uid = 5);
         #查询age大于uid=5的age的数据值
        
      • 放在from后

         # 查询每个部门的平均工资的工资等级
         select ag_dep.*, g.level
         from(
            select avg(salary) ag ,department_id
            from employees
            group by department_id
         ) ag_dep
         inner join job_grades g
         on ag_dep.ag between lowest_sal and highest_sal;
        
    • 连接查询

      • 内连接

         SELECT * FROM dept d  INNER JOIN emp e ON e.dept_id=d.id;
         ​
         +----+------------+----+------+---------+
         | id | name       | id | name | dept_id |
         +----+------------+----+------+---------+
         |  3 | 后勤部     |  1 | 刘备 |       3 |
         |  3 | 后勤部     |  2 | 关羽 |       3 |
         |  3 | 后勤部     |  3 | 张飞 |       3 |
         |  2 | 财务部     |  4 | 张角 |       2 |
         |  2 | 财务部     |  5 | 张宝 |       2 |
         |  2 | 财务部     |  6 | 张梁 |       2 |
         |  1 | 人力资源部 |  7 | 曹操 |       1 |
         |  1 | 人力资源部 |  8 | 曹丕 |       1 |
         |  1 | 人力资源部 |  9 | 曹植 |       1 |
         |  1 | 人力资源部 | 10 | 曹冲 |       1 |
         +----+------------+----+------+---------+
        
      • 外连接

        比较复杂,可以参考MySQL连接查询

2. INSERT语句

  • 基本语法

     insert into <tableName> (<data>) values (<content>)
    

3. UPDATE语句

  • 基本语法

     update <tableName> set <data> = <contant> (where ...)
    

4. DELETE语句

  • 基本语法

     delete from <tableName> (where ...)
    

使用SpringBoot+Mybatis进行开发

在SpringBoot中连接数据库

  • 添加MySql数据库驱动依赖

    • 可以在初始化项目时进行勾选

    • 在pom.xml中进行添加

               <dependency>
                   <groupId>com.mysql</groupId>
                   <artifactId>mysql-connector-j</artifactId>
                   <scope>runtime</scope>
               </dependency>
      
  • application.yml连接配置MySQL

     spring:
       datasource:
         url: jdbc:mysql://localhost:3306/edu_dg?useSSL=false&characterEncoding=utf8&serverTimezone=Asia/Shanghai
         password: 20021014
         username: root
         driver-class-name: com.mysql.cj.jdbc.Driver
    

配置Mybatis

  • 添加Mybatis依赖

     <!-- https://mvnrepository.com/artifact/org.mybatis.spring.boot/mybatis-spring-boot-starter -->
             <dependency>
                 <groupId>org.mybatis.spring.boot</groupId>
                 <artifactId>mybatis-spring-boot-starter</artifactId>
                 <version>2.3.0</version>
             </dependency>
    
  • 配置mapper对应xml文件路径

     mybatis:
       mapper-locations: classpath:mapper/*.xml
    

结合数据库的接口

  • 建立controller、service等

  • 创建mapper软件包,建立mapper接口

     package com.example.workwithmysql.mapper;
     ​
     import org.apache.ibatis.annotations.Mapper;
     ​
     @Mapper
     public interface SearchMapper {
     ​
         String searchLikeByName(String name);
     }
     ​
    
  • resource下建立mapper目录,编写xml文件

     <?xml version="1.0" encoding="UTF-8" ?>
     <!DOCTYPE mapper
             PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
     <mapper namespace="com.example.workwithmysql.mapper.SearchMapper">
         <select id="searchLikeByName" resultType="String">
             select `like` from student where name = #{name}
         </select>
     </mapper>
    
  • 在service中注入mapper并调用方法,完善service、controller

  • 测试接口