在这一切开始前

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//                            _ooOoo_      
// o8888888o
// 88" . "88
// (| -_- |)
// O\ = /O
// ____/`---'\____
// . ' \\| |// `.
// / \\||| : |||// \
// / _||||| -:- |||||- \
// | | \\\ - /// | |
// | \_| ''\---/'' | |
// \ .-\__ `-` ___/-. /
// ___`. .' /--.--\ `. . __
// ."" '< `.___\_<|>_/___.' >'"".
// | | : `- \`.;`\ _ /`;.`/ - ` : | |
// \ \ `-. \_ __\ /__ _/ .-` / /
// ======`-.____`-.___\_____/___.-`____.-'======
// `=---='
//
// .............................................
// 佛祖保佑 永无BUG

声明:本笔记仅供参考,个人学习心得
黑马飞书讲义参考:数据库

MySQL概述

  1. 安装
    1. 下载地址
    2. 配置
      1. 添加环境变量
        • 复制MySQL所在文件地址
        • 打开高级系统设置添加系统变量(MYSQL_HOME)
        • 编辑PATH变量,添加%MYSQL_HOME%\bin
        • cmd输mysql如果提示ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost:3306' (10061)
      2. 初始化:
        • 以管理员身份运行命令行窗口,输入mysqld --initialize -insecure
        • 成功后目录会多出一个data的文件
      3. 注册MySQL服务
        • 以管理员身份运行命令行窗口,输入mysqld -install
        • 成功弹出Service successfully installed.
      4. 启动MySQL服务
        • 敲入net start mysql
          1
          2
          3
          net start mysql //启动mysql服务

          net stop mysql //停止mysql服务
        • 出现无法启动,没有任何错误卸载更换版本
      5. 修改默认账户密码
        • 输入mysqladmin -u root password 你的密码
        • 登录mysql -uroot -p你的密码
        • 退出exit
        • 登录参数:
          1
          mysql -u用户名 -p密码 -h要连接的mysql服务器的ip地址(默认127.0.0.1) -P端口号(默认3306)
  2. 数据类型
    • 关系型数据库:由多张二维表组成的数据库-RDBMS
    • 数据库->表->数据(记录)

图形化工具-datagrip

idea 内置 datagrip
空文件->database->选择MySQL(第一次需要下载)->输入用户名密码->完成

SQL语句

打错了都可以通过\c回退
不区分大小写

  1. DDL(数据定义语言)

    数据库名字不能重复
    [ ]–>为可选项

    • 数据库
    1
    2
    3
    4
    5
    show databases; --查询所有数据库
    select database(); --查询当前数据库
    use 数据库名; --使用/切换数据库
    create database [if not exists] 数据库名 [default charset utf8mb4];--创建数据库 --utf8mb4在mysql8中是默认字符集,能够存储一些特殊表情符号等
    drop database [if exists] 数据库名;--删除数据库

    上述语法中database也可以替换成schema(databases<->schemas)

    • 表结构-创建
      1
      2
      3
      4
      5
      create table tabllename(
      字段1 字段类型 [约束] [comment 字段1注释],
      ······
      字段2 字段类型 [约束] [comment 字段2注释]
      )[comment 表注释];
      • 设置约束约束可以不止一个,空格隔开
        • 非空约束-限制该字段值不能为null-关键字:not null
        • 唯一约束-保证字段的所有数据都是唯一、不重复的-关键字: unique
        • 主键约束-主键是一行数据的唯一标识,要求非空且唯一-关键字:primary key
        • 默认约束-保存数据时,如果未指定该字段值,则采用默认值-关键字:default
        • 外键约束-让两张表的数据建立连接,保证数据的一致性和完整性-关键字:foreign key
        • 其他:主键自增-auto_increment ,默认数值default '默认值'
    • 表结构-数据类型

      unsigned表示无符号类型

      • 数值类型-原则:满足业务需求的前提下,尽可能选择占用磁盘空间小的数据类型
      • 字符串类型

        char是固定占用,varchar是最多占用,前者性能略好但是浪费磁盘,后者相反

      • 日期时间类型
    • 表结构-查询、修改、删除
      • 相关语法
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      show tables; --查询当前数据库所有表
      desc 表名; -- 查询表结构
      show create table 表名; -- 查询建表语句

      alter table 表名 add 字段名 类型(长度) [comment 注释] [约束]; -- 修改字段名与字段类型
      alter table 表名 modify 字段名 新数据类型(长度); -- 修改字段类型
      alter table 表名 change 旧字段名 新字段名 类型(长度) [comment 注释] [约束] -- 修改字段名与数据类型
      alter table 表名 drop column 字段名; -- 删除字段
      alter table 表名 rename to 新表名; -- 修改表名

      drop table [if exists] 表名; -- 删除表
  2. DML(数据操作语言-增删改操作)
    • 添加数据(INSERT)
      • 基本语法
        1
        2
        3
        4
        5
        6
        7
        8
        -- 指定字段添加数据
        insert into 表名(字段名1,字段名2) values (值1,值2);
        -- 全部字段添加数据
        insert into 表名 values(值1,值2,...)
        -- 批量添加数据(指定字段)
        insert into 表名 (字段名1,字段名2) values (值1,值2), (值1,值2);
        -- 批量添加数据(全部字段)
        insert into 表名 values (值1,值2,...),(值1,值2,...);
      • 注意事项

        1.插入数据指定字段顺序需要和值的顺序是一一对应的
        2.字符串和日期型数据应该包含在引号中(无论单还是双)
        3.插入数据大小/长度,应该在字段的规定范围内

    • 修改数据(UPDATE)
      • 基本语法
        1
        2
        -- 修改数据
        update 表名 set 字段名1 =1 , 字段名2 =2 , ....[where 条件];
      • 注意事项

        修改语句的条件可以有也可以没有,如果没有条件,则会修改整张表的所有数据

    • 删除数据(DELETE)
      • 基本语法
        1
        2
        -- 删除数据
        delete form 表名 [where 条件];
      • 注意事项

        1.DELETE语句的条件可以有,也可以没有,如果没有条件,则会删除整张表的所有数据
        2.DELETE语句不能删除某个字段的值(如果要操作,可以使用UPDATE,将该字段的值设置为NULL)

  3. DQL(数据查询语言)
    • 完整查询语句
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    -------------------------------------
    --基本查询
    select
    字段列表
    form
    表名列表
    -------------------------------------
    -- 条件查询
    where
    条件列表
    -------------------------------------
    -- 分组查询
    group by
    分组字段列表
    having
    分组后条件列表
    -------------------------------------
    -- 排序查询
    order by
    排序字段列表
    -------------------------------------
    -- 分页查询
    limit
    分页参数
    • 基本查询
      1
      2
      3
      4
      5
      6
      7
      8
      -- 查询多个字段
      select 字段1,字段2,字段3 form 表名;
      -- 查询所有字段(通配符)
      select * from 表名; -- 不推荐,真要查询全部,全部罗列更好(先写表编译器有提示)
      -- 为查询字段设置别名,as关键字可以省略
      select 字段1 [as 别名1], 字段2 [as 别名2] form 表名;
      -- 去除重复记录
      select distinct 字段列表 from 表名;
    • 条件查询
      1
      select 字段列表 from 表名 where 条件列表;
      • 条件构建形式
        条件构建
    • 分组查询
      • 聚合函数

        注意:1.所有的聚合函数不参与null的统计
        2.统计数量可以使用:count() count(字段) count(常量) 推荐使用count()
        聚合函数

      • 语法

        where\having区别:1.执行的时机不同:where是分组之前进行过滤,不满足where条件,不参与分组;而having是分组后对结果进行过滤
        2.判断条件不同:where不能对聚合函数进行判断,而having可以

      1
      select 字段列表 from 表名 [where 条件列表] group by 分组字段名 [having 分组后过滤条件];

      1.分组后,查询字段一般为聚合函数和分组字段,查询其他字段无任何意义
      2.执行顺序:where> 聚合函数> having

    • 排序查询
      1
      select 字段列表 from 表名 [where 条件列表] [group by 分组字段名 having 分组后过滤条件] order by  排序字段 排序方式;

      排序方式:升序(asc),降序(desc);默认为升序asc,是可以不写的。

    • 分页查询
      1
      select 字段列表 from 表名 [where 条件列表] [group by 分组字段名 having 分组后过滤条件] [order by  排序字段] limit 起始索引,查询记录数;

      如果起始索引是0可以省略
      limit是MySQL规范,其他SQL可能不同

  4. DCL(数据控制语言)
    • DBA数据管理员管理,非重点