数据库基础——mysql知识体系(掌握mysql,看完这篇文章就够了)

1.关系型数据库

关系型数据库是一种基于关系模型的数据库系统,将数据组织成表格的形式,表格由行和列组成,每行代表一个记录,每列代表一个属性。它使用结构化查询语言SQL进行数据管理和操作。

特点:1.数据的组织:数据以表格的形式进行组织,每个表格具有固定的列和数据类型。

            2.数据的关联:通过定义主键和外键来建立不同表格之间的关联关系,实现数据的一致性和完整性。

            3.数据的一致性:关系型数据库支持事务处理,可以确保数据的一致性和可靠性。

            4.数据的查询:使用SQL语言进行数据的查询、插入、更新和删除,具有较高的灵活性。

            5.数据的安全性:关系型数据库提供了权限控制和数据加密等功能,保障数据的安全性。

常见的关系型数据库:MySQL、Oracle、Microsoft SQL Sever、PostagreSQL等。

2.数据库相关SQL语句

显示所有的数据库 show databases;
查看当前使用的数据库 select database();
使用一个数据库 use 数据库名;
创建一个数据库 create database 数据库名;
删除一个数据库 drop database 数据库名;

3.表相关SQL语句

查看当前所有的表 show tables;
查看表信息 desc 表名;
创建一个表 create table 表名(列名 类型 约束信息);
添加列 alter table 表名 add 列名 类型 约束信息;
修改列的信息 alter table 表名 change 原始列名 新列名 类型 约束信息;
删除表 drop table 表名;
删除列 alter table 表名 drop 列名;
修改表名 rename table 原始表名 to 新表名;

4.数据相关SQL语句

查询表的数据 select * from 表名;
插入数据

全部插入:insert into 表名 values();

                insert into 表名 values(),(),()...;

缺省插入:insert into 表名(列1,列2) values(),(),()...;

                insert into 表名 set 列1=值1,列2=值2....;

修改数据 update 表名 set 列=值,... where 条件;
删除数据 deLete from 表名 where 条件;

5.Mysql列的约束

主键约束 primary key
非空 not null
自增长 auto_increment
唯一约束 unique
外键 foreign key

6.Mysql的数据类型

整数类型 tinyint 1个字节
smallint 2个字节
int 4个字节
bigint 8个字节
浮点数 float 单精度浮点数
double 双精度浮点数
decimal 高精度浮点数
字符串 char  固定长度的字符串,最大长度为255个字符。
varchar 可变长度字符串,最大长度为65535个字符。
blob  用于存储二进制数据的类型,包括TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB。
日期时间 date 日期,格式为'YYYY-MM-DD'
time 时间,格式为'HH:MM:SS'
datetime 日期时间,格式为'YYYY-MM-DD HH:MM:SS'
timestamp 时间戳,自动记录插入或更新的时间。
枚举 enum

7.外键

外键是用于连接表与表之间关联关系的一种约束

创建 create table 表名(列...... constraint 外键名 foreign key(列名) references 主表(主键) on update cascade on delete cascade);
添加 alter table 表名 add constraint 外键名 foreign key(列名) references 主表(主键) on update cascade on delete cascade;
删除 alter table 表名 drop foreign key 外键名;

8.查询

别名:别名是为了方便多表查询时区分不同表的相同列名

        格式:select 列名 as 别名,列名 as 别名 from 表名;

        例子:select student.name as 学生名,teacher.name as 教师名 from student inner join teacher on student.t_id=teacher.id;

查询指定列:select 列1,列2 from 表名;

条件查询:select * from 表名 where 条件;

where后的条件:

比较运算符 =、!=/<> <= < > >= select name,age from student where id<5;
多个条件 and并且,or或者

select name,age from student where age>20 and id<5;

select name,age from student where age>20 or id<5;

成员 in其中一个   not in不在其中

in 类似or,满足在其中,就显示出来:select name,age from student where id in (1,2,3);

select name,age from student where id not in (1,2,3);

模糊查询 like

_  一个下划线代表一个字符:

select * from 表名 where 列名 like '黄_';

%  代表多个字符,查找名字中带有星的:select * from 表名 where name like '%星%'

判空 is null是空    is not null不是空

空字符串不是空

查询地址为空的内容
    select * from teacher where address is null;

查询地址不为空的内容
    select * from teacher where address is not null;

嵌套查询:一个查询结果作为另外一个查询的条件

内连接

取两边都有的

inner join on 条件

如:select student.name as 学生名,teacher.name as 教师名 from student inner join teacher on student.t_id=teacher.id;

左外连接

内连接结果+左表内容(右侧补Null)

以左表的内容为主,左表内容全部写上,右表没有结果则补Null

select student.name,teacher.name from student left join teacher on student.id*3=teacher.id;
右外连接

内连接结果+右表内容(左侧补Null)

以右边的表的内容为主,右表内容全部写上,左表没有结果则补Null

select student.name,teacher.name from student right join teacher on student.id*3=teacher.id;
全连接 左外连接 union 右外连接 select student.name,teacher.name from student left join teacher on student.id*3=teacher.id union
        select student.name,teacher.name from student right join teacher on student.id*3=teacher.id;

9.函数

系统函数

database() 查看当前数据库
user() 当前用户
version() 当前数据库版本
current_date 当期日期
current_time 当前时间
current_timestamp 当前日期时间

聚合函数

max(列名) 最大值
min(列名) 最小值
avg(列名) 平均值
sum(列名) 求和
count(列名) 统计行数

10.常用技术

排序:order by

        排序方式:desc降序,asc升序。默认是升序

        例子: select * from teacher order by age desc;

分页:分页是为了将数据量大的表分开方便查看

        limit n:显示前n行

        limit n,m:从索引n开始显示m个。第page页,每页显示个数为size,limit (page-1)*size,size;

分组:将查询到的结果进行分组,方便统计结果

        如:统计男女数量

                select count(*),sex from teacher group by sex order by sex;

去重:distinct,去除重复的行,如去除重复的名字

11.用户

查看当前用户 select user();
创建用户 create user '用户名'@'%' identified  by '密码';
用户授权 grant 权限 on 数据库名 to '用户名'@'%';
刷新权限 flush privileges;
删除用户 drop user ‘用户名'@'%';

12.视图

视图是一个虚拟表,但是操作视图等同于操作真实表

作用:简化复杂的查询操作

使用:可以直接将教师对应的学生放在一个视图中,直接查看视图就可以查看对应关系,不需要使用嵌套查询,简化了查询操作。

13.函数与存储过程

函数:接受参数,并且有返回值。格式:select 函数名(参数)

可以将常用的计算操作封装成一个函数,如常用的求和、求均值、最大值、最小值、统计行数等,都封装成了函数,随时可以调用。

存储过程:是一套SQL操作,没有返回值。将一套复杂的查询语句放入存储过程,使用时直接调用,简化程序代码。格式:call 过程名(参数)

14.索引

索引是一种优化查询技术

索引类型:主键索引,主键自带的

                唯一索引,unique唯一约束

                普通索引,适用于任何字段

索引方法:BTREE,适用于大数据量查询,适合范围比较

                  HASH,适用于小数据量,适合精确的等值比较

使用:适用于表查询频率高,几乎不修改数据的表

15.事务

事务是一组SQL操作,这些操作要么全部执行成功,要么全部失败回滚。、

开启事务:start transaction

提交:commit

作用:保证数据的安全性。

事务的acid特性:

1.原子性:事务不可再分,要么全部成功,要么全部失败回滚,不会出现部分操作成功,部分操作失败的情况。

2.一致性:执行前和执行后的数据保持一致。

3.隔离性:事务之间互不影响。

4.永久性:事务一旦提交成功,对数据库的修改是永久的。

16.存储引擎

存储引擎是数据存储的实现方式

常用的存储引擎:

InnoDB:mysql默认的存储引擎。特点:支持事务;支持外键;支持行级别锁定、阻塞;综合能力强,适用于大多数场景。

MyISAM:查询、排序速度快,但是不支持外键。

Memory:读写速度最快,但是不能持久化,数据不能在本地保存。数据库连接断开,数据就会消失。

CSV:适合使用逗号分隔的文件,适合导入导出。

17.数据备份与恢复

数据备份:将数据库信息转储为SQL文件

恢复:当数据丢失时,可以将备份好的SQL文件运行,将数据库恢复到原来的状态。

18.Mysql与python基础交互

导入模块pymsql:import pymsql

构建连接:pymysql.connect()

创建游标实例:cursor()

        游标使用:

Fetchone 获取一行
fetchall 获取所有
fetchmany 获取多行,size参数设置获取的大小
scroll 游标偏移
execute 执行一个sql语句
executemany 一次执行多个sql语句

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-10 00:48:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-10 00:48:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-10 00:48:02       82 阅读
  4. Python语言-面向对象

    2024-03-10 00:48:02       91 阅读

热门阅读

  1. QWebEngineView与js交互

    2024-03-10 00:48:02       58 阅读
  2. L1-039 古风排版

    2024-03-10 00:48:02       43 阅读
  3. 主流开发环境和开发语言介绍

    2024-03-10 00:48:02       36 阅读
  4. python控制语句-1.2

    2024-03-10 00:48:02       40 阅读
  5. Linux/Ubuntu/Debian基本命令:命令行历史记录

    2024-03-10 00:48:02       39 阅读
  6. Ubuntu-18.04使用perccli查看PERC RAID的配置

    2024-03-10 00:48:02       39 阅读
  7. 掌握mysql,看完这篇文章就够了

    2024-03-10 00:48:02       44 阅读
  8. 管理npm源:如何使用nrm工具提升你的开发效率

    2024-03-10 00:48:02       43 阅读
  9. 机器学习流程—数据预处理 Encoding

    2024-03-10 00:48:02       45 阅读
  10. C++vector简单实现

    2024-03-10 00:48:02       44 阅读
  11. 大唐杯学习笔记:Day9

    2024-03-10 00:48:02       45 阅读