• MySQL系列第一篇入门


    1.什么是关系型数据库呢?

    RDBMS 是一种结构化数据存储系统,使用表格间的关系来存储和操作数据。
    在关系型数据库中,数据以行和列的形式存储,其中每一行表示一个关系或实体,每一列表示该实体的某个属性或特征
    关系型数据库具有以下特点:
    (1)数据存储在表中:数据以行和列的形式存储在表格中
    (2)数据间的关系:不同表格中的数据可以通过关系进行连接,实现数据的联合查询和分析
    (3)数据完整性:在关系型数据库中,可以定义各种限制条件和检查规则,以确保数据的完整性和一致性
    (4)SQL 语言:结构化查询语言SQL 用于访问和操作关系型数据库

    点击此处即可领取282G网络安全学习资源

    2.SQL 的分类:

    (1)DDL(Data Defination Language): 数据定义语言,用于定义数据库对象(库、表、字段)
    (2)DML(Data Manipulation Language): 数据操作语言,增删改
    (3)DQL(Data Query Language): 数据查询语言,查
    (4)DCL(Data Control Language):数据控制语言,访问权限

    3.MySQL 的数据类型:

    (1)数值类型
    tinyint、smallint、mediumint、int/integer、bigint、float、double、decimal 【1234848】
    (2)字符串类型
    char 定长字符串、varchar 变长字符串、tinyblob 不超过255二进制数据、tinytext 短文本字符串、blob 二进制长文本数据、text 长文本数据、mediumblob 二进制中等长度文本数据、mediumtext 中等长度文本数据、longblob 二进制极大文本数据、longtext 极大文本数据

    在这里插入图片描述
    (3)日期时间类型
    在这里插入图片描述
    基础操作

    4、DDL 数据定义语言

    – 查看所有数据库
    show databases;
    #查看当前数据库
    select database();
    /*
    创建数据库:
    数据库不存在时创建,避免报错
    指定字符编码
    /
    create database if not exists itcast charset utf8mb4;
    – 删除数据库
    drop database if exists itcast;
    – 切换数据库
    use zwh;
    – 查看数据库中所有表
    show tables;
    – 查看表结构
    desc tb_user;
    – 查看建表语句
    show create table tb_user;
    – 创建一张表
    create table tb_user (
    id int comment ‘编号’,
    name varchar(50) comment ‘姓名’,
    age int comment ‘年龄’,
    gender varchar(1) comment ‘性别’
    ) comment ‘用户表’;
    desc tb_user;
    show create table tb_user;
    /

    设计一张员工信息表,要求如下:

    1. 编号(纯数字)
    2. 员工工号 (字符串类型,长度不超过10位)
    3. 员工姓名(字符串类型,长度不超过10位)
    4. 性别(男/女,存储一个汉字)
    5. 年龄(正常人年龄,不可能存储负数)
    6. 身份证号(二代身份证号均为18位,身份证中有X这样的字符)
    7. 入职时间(取值年月日即可)
      */
      create table employee(
      id int comment ‘编号’,
      employ_id varchar(10) comment ‘员工工号’,
      name varchar(10) comment ‘员工姓名’,
      gender char(1) comment ‘性别’,
      age tinyint unsigned comment ‘年龄’,
      card_id char(18) comment ‘身份证号’,
      time date comment ‘入职时间’
      )
      drop table employee;
      #3.修改表相关操作
      – 添加字段
      alter table employee add nicename varchar(20) comment ‘昵称’;
      desc employee;
      – 修改字段
      alter table employee change nicename username varchar(30) comment ‘昵称’;
      – 删除字段
      alter table employee drop username;
      desc employee
      – 修改表名
      alter table employee rename to emp;
      show databases;
      show tables;
      – 删除表
      drop table if exists tb_user;
      – 删除指定表,并重新创建表
      truncate table emp;
      desc emp;

    5.DML 数据操作语言

    – 添加数据 [要想省略 (字段1, 字段2, …) 部分,要保证值的个数与顺序与表中相对应]
    insert into 表名(字段1, 字段2, …) values (值1, 值2, …)
    insert into 表名 values (值1, 值2, …)
    insert into 表名 values (值1, 值2, …), (值1, 值2, …), …
    – 修改数据
    update 表名 set 字段名1 = 值1, 字段名2 = 值2, … [where 条件]
    – 删除数据
    delete from 表名 [where 条件]

    6.DQL 数据查询语言

    1.select 字段列表 from 表名列表 where 条件列表 group by 分组字段列表
    2.having 分组后条件列表 order by 排序字段列表 limit 分页参数

    基础查询:

    – 查询指定的字段
    select 字段1, 字段2, … from 表名;
    – 查询全部字段
    select * from 表名;
    – 查询结果字段设置别名
    select 字段1 as 别名1, 字段2 as 别名2, … from 表名;
    select 字段1 别名1, 字段2 别名2, … from 表名;
    – 查询结果去重
    select distinct 字段列表 from 表名;

    条件查询:

    select 字段列表 from 表名 where 条件列表
    
    • 1

    ! 和 <> 都代表不等于,like 模糊匹配 _ 匹配单个字符, % 匹配任意个字符

    聚合函数:

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

    -- null 值不参与聚合函数运算 
    select 聚合函数(字段列表) from 表名;
    
    • 1
    • 2

    分组查询:

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

    where 和 having 的执行时机不同,where > 聚合函数 > having,也就是说只有满足 where 条件的才会分组

    排序查询:

    select 查询列表 from 表名 order by ASC | DESC;
    
    • 1

    ASC 代表升序查询,DESC 代表降序查询,默认为升序,支持按多字段排序查询

    分页查询:

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

    起始索引从零开始 = (查询页码 - 1 ) * 每页显示记录数

    执行顺序:from > where > group by> having > select > order by > limit

    7.DCL: 数据控制语言

    -- 查询用户
    select * from mysql.user;
    -- 创建用户
    create user '用户名'@'主机名' identified by '密码';
    -- 修改用户密码
    alter user '用户名'@'主机名' identified with mysql_native_password by '新密码';
    -- 删除用户
    drop user '用户名'@'主机名';
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    主机名可以使用 % 通配,MySQL 中通过用户名@主机名标识一个用户

    -- 查询用户权限
    show grants for '用户名'@'主机名';
    -- 授予用户所有权限
    grant all on itcast.* to '用户名'@'主机名';
    -- 撤销用户所有权限
    revoke all on itcast.* from '用户名'@'主机名';
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    函数

    1.字符串函数:

    -- 字符串拼接
    concat(s1, s2, ...)
    -- 字符串转小写
    lower(str)
    -- 字符串转大写
    upper(str)
    -- 左填充,用 pad 字符串对 str 左边进行填充,达到 n 个字符串长度 [使拼接后的字符串长度为n]
    lpad(str, n, pad)
    -- 右填充,用 pad 字符串对 str 右边进行填充,达到 n 个字符串长度
    rpad(str, n, pad)
    -- 去掉字符串头部和尾部的空格
    trim(str)
    -- 返回从字符串 str 从 start 位置开始的 len 长度的子字符串
    substring(str, start, len)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    2.数值函数:

    -- 向上取整
    cell(x)
    -- 向下取整
    floor(x)
    -- 取模
    mod(x, y)
    -- 0-1随机数
    rand()
    -- 四舍五入,保留 y 位小数
    round(x, y) 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    3.日期函数:

    -- 返回当前日期
    curdate();
    -- 返回当前时间
    curtime();
    -- 返回当前日期和时间
    now();
    -- 获取 date 的年份
    year(date)
    -- 获取 date 的月份
    month(date)
    -- 获取 date 的日期
    day(date)
    -- 返回一个加上时间间隔 expr 后的时间
    date_add(date, interval exprtype)
    -- 返回两个时间之间间隔的天数 [date1 - date2]
    datediff(date1, date2)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    4.流程函数:

    -- 如果 value 为 true,则返回 t,否则返回 f
    if(value, t, f)
    -- 如果 value1 不为空,返回 value1 否则返回 value2
    ifnull(value1, value2)
    -- 如果 val1 为 true,返回 res1 否则返回 default
    case when val1 then res1 else default end
    -- 如果 expr 的值等于 val1,返回 res1,否则返回 default 默认值
    case expr when val1 then res1 else default end
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    约束
    保证数据库中的数据的正确、有效和完整
    在这里插入图片描述
    在建表时只需要在对应字段后添加对应约束的关键字即可

    外键约束:

    -- 添加外键(创建表时)
    [constraint] [外键名称] foreign key (外键字段名) references 主表(主表列名)
    -- 添加外键(修改表时)
    alter table 表名 add constraint 外键名称 foreign key (外键字段名) references 主表 (主表列名)
    -- 删除外键
    alter table 表名 drop foreign key 外键名称;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    添加外键后,再删除或更新父表数据时会产生约束行为
    在这里插入图片描述
    在我们为表添加外键时,就可以设置删除和更新策略

    alter table 表名 add constraint 外键名称 foreign key (外键字段) references 主表名 (主表字段名) on update cascade on delete delete cascade;
    
    • 1

    多表查询

    • 连接查询:[以两张表为例]
      内连接:两表交集
      左外连接:左表所有数据和两表交集
      有外连接:右表所有数据和两表交集
      自连接:当前表与自身连接的查询,自连接必须使用表
    #可以为表设置别名,别名关键字 as 可以省略
    -- 隐式内连接
    select 字段列表 from 表1, 表2, ... where 条件列表;
    -- 显式内连接
    select 字段列表 from 表1 [inner] join 表2 on 连接条件 ...;
    -- 左外连接
    select 字段列表 from 表1 left outer join 表2 on 条件列表;
    -- 右外连接
    select 字段列表 from 表1 right outer join 表2 on 条件列表;
    -- 自连接
    select 字段列表 from 表A 别名A join 表A 别名B on 条件列表;
    -- 联合查询 union 会去重,union all 不会,合并查询结果
    select 字段列表 from 表A ...
    union [all]
    select 字段列表 from 表B ...
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 子查询:

    按照子查询结果划分:
    标量子查询:子查询结果为单个值
    列子查询:子查询结果为一列
    行子查询:子查询结果为一行
    列表子查询:子查询结果为多行多列

    按照子查询位置划分:
    where 之后
    from 之后
    select 之后

    -- 标量子查询 常用操作符: =<>>>=<<=
    
    -- 列子查询 常用操作符: in、not in、any、some(与any相同)、all
    -- 对于 any、some、all 一般与常用常用操作符连用
    select * from emp where salary > some (
    	select salary from emp where dept_id in (
    		select id from dept where name = '研发部'
    	)
    )
    -- 行子查询 常用操作符:=<> 、IN 、NOT IN
    select * from emp where (salary,managerid) = (select salary, managerid from emp where name = '张无忌');
    -- 表子查询 常用操作符: in
    select * from emp where (salary, managerid) in (select salary, managerid from emp where name = '鹿杖客' or name = '宋远桥');
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    在这里插入图片描述

    事务
    相关指令:

    -- 查看/设置事务提交方式 [value = 1 代表开启了自动提交]
    select @@autocommit;
    set @@autocommit = 0;
    -- 提交事务
    commit;
    -- 回滚事务
    rollback; 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    我们关闭自动提交事务之后,每次执行 DML 都不会提交,需要手动 commit

    -- 开启事务
    start transaction [或替换为 begin]
    -- 提交事务
    commit
    -- 回滚事务
    rollback
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    案例:

    start transaction;
    INSERT INTO account ( name, money )
    VALUES
    	( "zhangsan", 2000 ),
    	( "lisi", 2000 );
    commit;
    
    begin;
    
    update account set money = money - 1000 where name = 'zhangsan';
    update account set money = money + 1000 where name = 'lisi';
    
    commit;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 事务的四大特性:acid

    原子性(Atomicity): 事务是不可分割的最小操作单位
    一致性(Consistency): 事务完成时,必须使所有的数据都保持一致状态
    隔离性(Isolation): 数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立环境下运行
    持久性(Durability): 事务一旦提交或回滚,它对数据库中的数据的改变就是永久的

    • 并发事务可能存在的问题:

    赃读:一个事务读取到另外一个事务还没有提交的数据
    不可重复读:一个事务先后读取同一条记录,但是两次读取的数据不同,称之为不可重复读
    幻读:一个事务按照条件查询数据时,没有对应的数据行,但是插入数据的时候,又发现这行数据已经存在了

    • 事务的隔离级别:
      在这里插入图片描述
    -- 查看事务的隔离级别
    select @@transaction_isolation;
    -- 设置事务隔离级别
    set [session | global] transaction isolation level [read uncommit | read commit | repeatable read | serializable]
    
    • 1
    • 2
    • 3
    • 4

    网络安全成长资源

    最后,给大家分享一个超棒的网络安全学习路线图(文末有高清图和XMIND文件)

    点击此处即可领取282G网络安全零基础入门学习籽料

    在这里插入图片描述
    还有一些学习中收集的视频、文档资源,有需要的可以自取:
    每个成长路线对应板块的配套视频:
    在这里插入图片描述
    在这里插入图片描述
    当然除了有配套的视频,同时也为大家整理了各种文档和书籍资料&工具,并且已经帮大家分好类了。
    在这里插入图片描述

    因篇幅有限,仅展示部分籽料,完整资料的领取请点击此处

  • 相关阅读:
    2.2 相关blocks(2) Data Store Memory F28335-Simulink仿真代码自动生成
    ssh远程使用jupyter notebook
    Java并发编程—java内存模型2
    spring注解开发
    kickstarter/indiegogo海外众筹六大核心
    移动机器人路径规划(二)--- 图搜索基础,Dijkstra,A*,JPS
    【JavaScript进阶之旅 函数式编程篇 第三十四章】函数组合、结合律、pointfree、使用案例
    VMware vSphere虚拟机Windows重置系统密码方法总结
    Nginx 学习(十)高可用中间件的配置与实现
    jdk线程池ThreadPoolExecutor工作原理解析(自己动手实现线程池)
  • 原文地址:https://blog.csdn.net/text2204/article/details/133789086