MySQL系列第一篇入门

本文详细介绍了关系型数据库(RDBMS)的概念,包括其特点如数据存储、关系、完整性以及SQL的不同类别(DDL、DML、DQL、DCL)。讲解了MySQL的数据类型和SQL操作,如创建、修改、删除表,以及数据查询、数据操作、事务相关指令和并发问题。最后提供了网络安全学习资源和事务隔离级别的设置方法。

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 条件列表

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

聚合函数:

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

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

分组查询:

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

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

排序查询:

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

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

分页查询:

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

起始索引从零开始 = (查询页码 - 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 '用户名'@'主机名';

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

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

函数

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)

2.数值函数:

-- 向上取整
cell(x)
-- 向下取整
floor(x)
-- 取模
mod(x, y)
-- 0-1随机数
rand()
-- 四舍五入,保留 y 位小数
round(x, y) 

3.日期函数:

-- 返回当前日期
curdate();
-- 返回当前时间
curtime();
-- 返回当前日期和时间
now();
-- 获取 date 的年份
year(date)
-- 获取 date 的月份
month(date)
-- 获取 date 的日期
day(date)
-- 返回一个加上时间间隔 expr 后的时间
date_add(date, interval exprtype)
-- 返回两个时间之间间隔的天数 [date1 - date2]
datediff(date1, date2)

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

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

外键约束:

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

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

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

多表查询

  • 连接查询:[以两张表为例]
    内连接:两表交集
    左外连接:左表所有数据和两表交集
    有外连接:右表所有数据和两表交集
    自连接:当前表与自身连接的查询,自连接必须使用表
#可以为表设置别名,别名关键字 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 ...
  • 子查询:

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

按照子查询位置划分:
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 = '宋远桥');

在这里插入图片描述

事务
相关指令:

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

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

-- 开启事务
start transaction [或替换为 begin]
-- 提交事务
commit
-- 回滚事务
rollback

案例:

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;
  • 事务的四大特性:acid

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

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

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

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

网络安全成长资源

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

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值