【mySQL】学习笔记

1. MySQL前置

在这里插入图片描述

1.1. SQL简介

  • SQL结构化查询语言(Structured Query Language),操作关系型数据库的编程语言,定义了一套操作关系型数据库统一标准 。
  • DBMS数据库管理系统(DataBase Management System),操纵和管理数据库的大型软件。
  • DB数据库(DataBase),存储数据的仓库,数据是有组织的进行存储。

1.2.下载安装

下载地址:https://downloads.mysql.com/archives/installer/
在这里插入图片描述

1.2.MySQL启动和关闭

  • window图形化启动和关闭:

    1. window + R打开运行框
    2. 输入services.msc,回车在这里插入图片描述
    3. 找到MySQL服务,手动启动或停止
      在这里插入图片描述
  • 命令行启动和关闭
    4. 以管理员身份运行powershell在这里插入图片描述 2. 启动命令:net start mysql80 关闭命令:net stop mysql80
    在这里插入图片描述

客户端连接

  • MySQL客户端命令行连接
    1. 找到客户端
      在这里插入图片描述
    2. 输入密码在这里插入图片描述

2. MySQL命令

2.1. 命令分类

在这里插入图片描述

2.2. 数据类型

  1. 数值类型
    ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/0633d63347f54c30b5150fce48b81317.pn
    • 类型后面可以加unsigned修饰,表示无符号类型
    • double(4,1):4表示最大保存4位,1表示小数部分为1位,例如:100.0
  2. 字符串类型
    在这里插入图片描述
  • charvarchar

    • char(10)表示,无论你输入多少个(小于等于10的)字符,都会占10个字符的存储空间
    • varchar(10)表示,你输入多少个(小于等于10的)字符,就会占多少个字符的空间
    • 但是,由于varchar所占用的空间是计算的,所以比较耗性能,但char可能会有些空间用不满,比较耗空间

    推荐使用:

    • 性别 => char
    • 用户名 => varchar
  1. 日期时间类型
    在这里插入图片描述
  • 创建实例
    在这里插入图片描述
    代码:
    create table worker(
    id int comment '编号',
    workernum varchar(10) comment '工号',
    name varchar(10) comment '姓名',
    gender char(1) comment '性别',
    age tinyint unsigned comment '年龄',
    idcard char(18) comment '身份证号码',
    startdate date comment '入职时间'
    ) comment '员工表';
    
    操作:

2.3. DDL(定义)

2.3.1. DDL数据库操作

  1. 查询数据库: show databases;
  2. 创建数据库: creat database[if not exists] 数据库名 [default charset utf8];
  • 备注[]内为可选配置语句
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  1. 删除数据库: drop database [if exists] 数据库名;
    在这里插入图片描述
  2. 使用数据库:use 数据库名 ;
  3. 查询当前所在数据库:select database();
    在这里插入图片描述

2.3.2. DDL表-创建和查询

  1. 查询当前数据库所有表:show tables;
    在这里插入图片描述
  2. 创建表结构
    在这里插入图片描述
  • 输入 use 数据库名先切换到自己创建的数据库
    在这里插入图片描述
  • 输入建表语句为:
    create table user(
    id int comment '编号',
    name varchar(50) comment '姓名',
    age int comment '年龄',
    gender varchar(1) comment '性别'
    )comment '用户表';
    
    在这里插入图片描述

注意:如果上一条命令写错,可以输入\p→右键鼠标选择“标记” → 选择要复制的内容 → 按Enter键 → 输入\c → 右键鼠标选择“粘贴”,然后修改即可

  • 数据表创建成功
    在这里插入图片描述
  1. 查询表结构:desc 表名;
    在这里插入图片描述
  2. 查询指定表的建表语句:show create table 表名;
    在这里插入图片描述

在这里插入图片描述

2.3.3. DDL表-字段的添加、修改和删除

  1. 添加字段: alter table 表名 add 字段名 类型(长度) [ comment '注释'] [约束];
    在这里插入图片描述
  2. 修改字段:alter table 表名 change 旧字段名 新字段名 类型(长度) [ comment '注释'] [约束];
    在这里插入图片描述
  3. 删除字段:alter table 表名 drop 字段名;
    在这里插入图片描述
  4. 修改表名:alter table 表名 rename to 新表名;
    在这里插入图片描述
  5. 删除表:drop table [if exists] 表名;
    在这里插入图片描述
  6. 初始化表(清空表内数据):truncate table 表名;

2.3.DataGrip使用

2.3.1. 下载

DataGrip官网:https://www.jetbrains.com/datagrip/

2.3.2. 使用

2.4. DML(操作)

DML英文全称是Data Manipulation Language(数据操作语言),用来对数据库中表的数据记录进行增、删、改操作。

  • 添加数据(insert)
  • 修改数据(update)
  • 删除数据(delete)

2.4.1. 添加数据

  1. 添加指定字段数据:insert into 表名 (字段名1, 字段名2, ...) values (值1, 值2, ...);
    在这里插入图片描述
  • 利用DataGrip查看添加的信息
    在这里插入图片描述
  • 利用SQL语句查看添加的信息:select * from 表名;
    在这里插入图片描述
  1. 添加全部字段数据: insert into 表名 values (值1, 值2, ...);
    在这里插入图片描述
  2. 批量添加数据: insert into 表名 values(值1, 值2, ...),(值1, 值2, ...);
    在这里插入图片描述

2.4.2. 修改数据

修改某字段信息:update 表名 set 字段名1 = '值1', 字段名2 = '值2' where 条件;

  • 修改的字段决定于where后面的条件(可以把where看作一个条件过滤器)
    在这里插入图片描述
  • 同理,如果我们没有添加where,则会选中该表内的所有字段,并修改
    在这里插入图片描述
    在这里插入图片描述

2.4.3. 删除数据

  • 删除数据 delete from 表名 [ where 条件 ] ;(where的用法与insert相同)
    在这里插入图片描述
  • 删除表内所有数据: delete from 表名;
    在这里插入图片描述

2.5. DQL(查询)

  • 建立一个测试表
    -- 建立一个测试表
    drop table if exists employee;
    create table worker(
    id int comment '编号',
    worknum varchar(10) comment '工号',
    name varchar(10) comment '姓名',
    gender char(1) comment '性别',
    age tinyint unsigned comment '年龄',
    idcard char(18) comment '身份证号',
    workaddress varchar(50) comment '工作地址',
    entrydate date comment '入职时间'
    )comment '员工表';
    
    -- 为表填充数据
    insert into worker (id, worknum, name, gender, age, idcard, workaddress, entrydate)
    values (1, '00001', '柳岩666', '女', 20, '123456789012345678', '北京', '2000-01-01');
    insert into worker (id, worknum, name, gender, age, idcard, workaddress, entrydate)
    values (2, '00002', '张无忌', '男', 18, '123456789012345670', '成都', '2005-09-01');
    insert into worker (id, worknum, name, gender, age, idcard, workaddress, entrydate)
    values (3, '00003', '韦一笑', '男', 38, '123456789712345670', '上海', '2005-08-01');
    insert into worker (id, worknum, name, gender, age, idcard, workaddress, entrydate)
    values (4, '00004', '赵敏', '女', 18, '123456757123845670', '北京', '2009-12-01');
    insert into worker (id, worknum, name, gender, age, idcard, workaddress, entrydate)
    values (5, '00005', '小昭', '女', 16, '123456769012345678', '成都', '2007-07-01');
    insert into worker (id, worknum, name, gender, age, idcard, workaddress, entrydate)
    values (6, '00006', '杨逍', '男', 28, '12345678931234567X', '北京', '2006-01-01');
    

2.5.1. 基本查询

  • 查询返回多个字段:select 字段1 字段2... as '别名' from 表名;

  • 示例代码:

    # 1.查询name、age字段
    select name, age from worker;
    
    # 2.查询返回所有字段
    select id, worknum, name, gender, age, idcard, workaddress, entrydate from worker;
    # 等于select * from worker;
    
    # 3.查询所有员工工作地址,起别名
    select workaddress as '地址' from worker;
    
  • 示例:

    在这里插入图片描述在这里插入图片描述
    在这里插入图片描述

2.5.2. 条件查询

  • 常见运算符

    比较运算符功能
    >、>=、<、<=、=基础比较运算符
    <> 或 !=不等于
    between ... and ...在某个范围之内(含最小、最大值)
    in (..)在in之后的列表中的值,多选一
    like 占位符模糊匹配(_匹配单个字符, %匹配任意个字符)
    is null是null
    逻辑运算符功能
    and 或 &&
    or 或 ||
    not 或 !
  • 示例代码:

    # 1.查询年龄为18或者大于30的员工
    select * from worker where age=18 || worker.age>30;
    
    # 2.查询没有身份证号的员工(我已经设置了一个员工身份证号为空)
    select * from worker where idcard is null;
    
    # 3.查询年龄10~20的员工
    select * from worker where age between 10 and 20;
    
    # 4.查询姓名为两个字的员工
    select * from worker where name like '__';
    
    # 5.查询身份证最后一位为X的员工
    select * from worker where idcard like '%X'
    
    
    • 示例:

      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述

2.5.3. 聚合函数

  • 常见聚合函数

    函数功能
    count统计数量
    max最大值
    min最小值
    avg平均值
    sum求和

    注意: null值不参与聚合函数运算

  • 语法select 聚合函数(字段列表) from 表名 ;

  • 示例代码:

    # 1.统计员工数量
    select count(*) from worker;
    
    # 2. 统计的是idcard不为空的员工数量
    select count(idcard) from worker;
    
    # 3. 统计员工平均年龄
     select avg(age) '平均年龄' from worker;
    
  • 示例:略

2.5.4. 分组查询

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

    where与having区别:

    • 执行时机不同:where是分组之前进行过滤,having是分组之后对结果进行过滤。
    • 判断条件不同:where不能对聚合函数进行判断,having可以
  • 示例代码

    	# 1.根据性别分组,统计男女员工数量
    	select gender,count(*) from worker group by gender;
    	
    	# 2.根据性别分组,统计男女平均年龄
    	select gender, avg(age) from worker group by gender;
    	
    	# 3.查询年龄小于等于20的员工 , 并根据工作地址分组 , 获取员工数量大于等于2的工作地址
    	select workaddress, count(*) address_num from worker
    	where age<=20 group by workaddress having address_num>=2;
    	
    	# 4.统计各个工作地址上班的男性及女性员工的数量
    	select workaddress, gender, count(*) '员工数量' from worker group by workaddress, gender;
    
  • 示例

    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

2.5.5. 排序查询

  • 语法 select 字段列表 from 表名 order by 字段1 排序方式1 , 字段2 排序方式2 ;

    • asc: 升序(默认值)
    • decs: 降序
  • 示例代码

    # 1. 根据年龄升序排序
    select * from worker order by age;
    
    # 2. 根据入职时间降序排序
    select * from worker order by entrydate desc;
    
    # 3.根据年龄升序排序,年龄相同 , 根据入职时间进行降序排序
    select * from worker order by age, entrydate desc;
       ```
    
    

2.5.6. 分页查询

  • 语法select 字段列表 from 表名 limit 起始索引, 查询记录数 ;

注意事项:

  • 起始索引从0开始
  • 分页查询是数据库的方言,不同的数据库有不同,MySQL中是LIMIT。
  • 如果查询的是第一页,起始索引可省略,直接简写为 limit 10。
  • 示例代码:
    # 1.查询第1页员工数据, 每页展示5条记录
    select * from worker limit 5;
    
    # 2.查询第2页员工数据, 每页展示5条记录
    select * from worker limit 5,5;
    

2.5.7. 综合案例

  • 示例代码:
    # 1.查询年龄为16,18,20岁的女员工
    select * from worker where gender = '女' and age in(16,18,20);
    
    # 2.查询性别为 男 ,并且年龄在 10-30 岁以内的姓名为三个字的员工。
    select * from worker where gender = '男' and ( age between 10 and 30 ) and name like '___';
    
    # 3.统计年龄小于60岁的 , 男员工和女员工人数。
    select gender, count(*) '人数' from worker where age < 60 group by gender;
    
    # 4.查询年龄小于等于30员工的姓名和年龄,并对查询结果按年龄升序排序,如果年龄相同按入职时间降序排序。
    select name, age from worker where age<=30 order by age, entrydate desc;
    
    # 5. 查询年龄在10~40岁以内的前2男员工信息,对结果按年龄升序排序,年龄相同按入职时间降序排序。
    select * from worker where gender='男' and age between 10 and 40 order by age,entrydate desc limit 2;
    
    

2.5.8. 编写顺序和执行顺序

  • 编写顺序

  • 执行顺序

2.6. DCL(控制)

2.6.1. 管理用户

  • 语法

    操作语法
    查询用户 select * from mysql.user;
    创建用户 create user '用户名'@'主机名' identified by '密码';
    修改密码create user '用户名'@'主机名' identified with mysql_native_password by '新密码' ;
    删除用户drop '用户名'@'主机名' ;

    在这里插入图片描述

    Host代表 当前用户访问的主机 , 如果为localhost, 仅代表只能够在当前本机访问,不可以远程访问的。 User代表的是 访问该数据库的用户名 。在MySQL中需要通过Host和User来唯一标识一个用户

  • 示例代码:

    # 1.查询用户
    select * from mysql.user;
    
    # 2.创建用户,只能在该主机访问该数据库
    create user 'jia'@'localhost' identified by '12345';
    
    # 3.创建用户,在任意主机都能访问该数据库(利用通配符%)
    create user 'jhq'@'%' identified by '123456';
    
    # 4.修改用户密码
    alter user 'jia'@'localhost' identified with mysql_native_password by '123456'
    
    # 5.删除用户
     drop user 'jhq'@'%' ;
    

2.6.2. 权限控制

  • 常用权限

    关键字权限
    all所有权限
    select查询数据
    insert插入数据
    update修改数据
    delete删除数据
    alter修改表
    drop删除数据库/表/视图
    create创建数据库/表
  • 语法:

    操作语法
    查询权限show grants for '用户名'@'主机名' ;
    授予权限grant 权限列表 on 数据库名.表名 to '用户名'@'主机名';
    撤销权限revoke 权限列表 on 数据库名.表名 from '用户名'@'主机名'
  • 示例代码

    # 1.查询权限
    show grants for 'jia'@'localhost';
    
    # 2.授予用户jia数据库test的所有操作权限
    grant all on test.* to 'jia'@'localhost';
    
    # 3. 撤销予用户jia数据库test的所有操作权限
    revoke all on test.* from 'jia'@'localhost';
    

3. 函数

  • 35
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值