简介 MySQL是一个 关系型数据库管理系统 ,**由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的 关系型数据库管理系统 之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。

MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。


MySQL所使用的 SQL 语言是用于访问数据库
的最常用标准化语言。MySQL 软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。

官网

传统记录的缺点

1.0 不易保存
2.0 备份困难
3.0 查找不便

现代化手段—-文件

1.0 使用简单,列如python中的open可以打开文件。用read/write对文件进行读写,close关闭文件
2.0 对于数据量较大的数据,不能够很好地满足,而且性能较差
3.0 不易扩展

现代化手段—-数据库

1.0 持久化存储
2.0 读写速度极高
3.0 保证数据的有效性
4.0 对程序支持性非常好,容易扩展

数据库

数据库就是一种特殊的文件,其中存储着需要的数据

关系型数据库核心元素

1.0 数据行(记录)
2.0 数据列(字段)
3.0 数据表(数据行的集合)
4.0 数据库(数据表的集合)

关系数据库 RDBMS
Relational Database Management System

当前主要使用俩种类型的数据库:关系型数据库、非关系型数据库

所谓的关系型数据库RDBMS,是建立在关系模型基础上的数据库,
借助于集合代数等数学概念和方法来处理数据库中的数据

我们异步任务一般会想到什么 celery 有兴趣戳这里

celery 使用

celery 中文手册

celery 最终实现效果就是异步任务以及定时任务

那我们先来看看celery底层是什么

broker、backend、生产者、消费者、还有celery来调度任务

消息队列 用来存储任务 以及调度任务

那我们也可以使用 queue来实现异步任务

关系型数据库的主要产品

oracle:在以前的大型 项目中使用,银行,电信等项目
mysql:web时代使用最广泛的关系型数据库
ms sql server:在微软的项目中使用
sqlite:轻量级数据库,主要应用在移动平台

数据完整性
1.0 一个数据库就是一个完整的业务单元,可以包含多张表,数据被存储在表中
2.0 在表中为了更加准确的存储数据,保证数据的正确有效,可以在创建表的时候,为表添加一些强制性的验证,包括数据字段的类型、约束

数据类型
可以通过查看帮助文档查阅所有支持的数据类型
使用数据类型的原则是:
够用就行,尽量使用取值范围小的,而不用大的,这样可以更多的节省存储空间

常用数据类型如下:
整数:int,bit
小数:decimal
字符串:varchar,char
日期时间: date, time, datetime
枚举类型(enum)

特别说明的类型如下:
decimal表示浮点数,如decimal(5,2)表示共存5位数,小数占2位
char表示固定长度的字符串,如char(3),如果填充’ab’时会补一个空格为’ab ‘
varchar表示可变长度的字符串,如varchar(3),填充’ab’时就会存储’ab’
字符串text表示存储大文本,当字符大于4000时推荐使用
对于图片、音频、视频等文件,不存储在数据库中,而是上传到某个服务器上,然后在表中存储这个文件的保存路径

MySQL操作

基本操作

登录mysql

mysql -u账户名 -p密码

退出mysql

quit  exit ctrl+d

查看库

show databases;

进入库

use 库名

查看当前库

select database();

删除数据库

drop database 库名;

创建一个库

create database 库名 charset=utf8;

表的基本操作

查看数据库里的所有表

show tables;

### 

查看表结构

desc 表名;

### 

创建表

create table 表名()

给表添加字段

alter table 表名  add  字段名 类型

重命名表里的字段名

alter table 表名 change  旧名 新民  类型 约束

修改表里的字段类型及约束(不需要重命名)

alter table 表名 modify  字段名 新类型 约束

删除字段

alter table 表名 drop 字段名

删除表

drop table 表名

查看创建表的语句

show  create table 表

修改表名

alter table 旧表名 rename to 新表名

类型

int    整形
primary key
auto_increment
not null
varchar(20)
decimal(5,3)
enum("男","女","妖")
datetime

约束

primary key   主键
auto_increment 自增
not null      非空
foreign key   外键
unique        唯一
default       默认
unsigned      无符号约束

表的增删改查

查询表的所有数据

select *  from  表名;

查询指定的列

select 列名1,列名2  from  表名;

全列插入

insert  into  表名 values(id int primary key auto_increment )

指定列插入

(插入的数据和列名对应)

insert into  表名(列名1,列名2) values (         )

指定列插入

insert into 表名( 列名)  values ( ..........)

指定列一行一行插入

insert into 表名( 列名)  values ( ..........)

修改表里的数据

update 表名 set  列名=新的值   where id = **;

delete from 表名  where id = ** ;

起别名

select  列名 as 新列名, 列名1 as 新列名1   from 表名

去重 单列

select  distinct  列名 from 表名

外键

添加外键

1.0方式

create table goods(cate_id int unsigned, foreign key(cate_id) references 主表名(id) ) charset=utf8 ;

2.0

alter table 表名 add foreign key(子表列名) references 主表(主键)

删除外键方式

show create table 表名 查看 复制

+——-+—————————————————————————————-+
| emp_2 | CREATE TABLE emp_2 (
id int(11) NOT NULL AUTO_INCREMENT,
name varchar(20) DEFAULT NULL,
emp_sid int(10) unsigned DEFAULT NULL,
PRIMARY KEY (id),
KEY emp_2 (emp_sid),
CONSTRAINT emp_2_ibfk_1 FOREIGN KEY (emp_sid) REFERENCES emp (sid)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+——-+—————————————————————————————–+
1 row in set (0.00 sec)

alter table 表名 drop foreign key emp_2_ibfk_1;

数据的查

select * from 表名 where 条件

比较运算符

= < <= = !=

逻辑运算符

and 两个条件必须同时满足

or 两个条件满足一个就可以

not 相反的

模糊查询

% 匹配多个任意字符
_ 匹配任意一个字符

select * from 表名 where 要查找的列名 like'%或者_'

范围查询

非连续范围

in

select * from student where id in (3,6,9);

连续范围

between and

select * from student where id between 3 and 8;

判断空值

空 is null

select * from student where pingjia is null;

非空 is not null

select * from student where pingjia is not null;

条件优先级

由高到低
小括号 >not > 比较运算符> 逻辑运算符>
and 比or 优先 如果希望or比and优先 加 ( )

修改mysql的密码

update  user set password= password('新密码') where user= 'root';

排序

order by
asc 升序
desc 降序

select * from 表名 where order by 要排序的列  asc;
select * from 表名 where order by 要排序的列  asc,同等条件下 high desc;

聚合函数

总数

select count(*) from 表名 ;

最大值

select max(查找的值) from 表名 ;

最小值

select min(查找的值) from 表名 where 条件;

select  sum(查找的值) from 表名 where 条件;

平均值

select  avg(查找的值) from 表名 where 条件;
select  round(avg(查找的值),保留几位小数) from 表名 where 条件;

起别名

只能在本次查询使用

select 名称 as 起的名称 from 表名

消除重复行

distinct

select distinct 列名 from 表名

分组

group by 在查询结果后面进行分组

select  分组的名称 from 表名 group by 分组的名称;

计算最大的值

select  分组的名称,count(*) from 表名 group by 要分组的名称;

一组有多个的分组

select gender,group_concat(name) from students group by gender;

平均分组

select  要分组的名,round(avg(分组的名称),保留几位小数) from 表名 group by 要分组的名称;

条件查询分组

select  要分组的名,group_concat(name),round(avg(分组的名称),保留几位小数) from 表名 group by 要分组的名称 having round(avg(age),1) > 25;

子查询

select 查询条件 from 表名 where age > (select round(avg(age),2) from 表名)
select  分组的名称 from 表名 where cls_id in(select 分组名 from 表名);

分页

limit

start 代表从某个位置开始
count 代表从开始位置往后数几个
select * from students limit 4,2;

例1:查询前3行男生信息

select * from 表名 where limit  3,2  3往后2个(4,5)

0,2 每页显示2个,第一个页面
2,2 每页显示2个,第二个页面
4,2 每页显示2个,第三个页面
6,2 每页显示2个件 limit 0,3;

连接查询

内连接

select * from 表1 inner join表2 on 表一.字段名 = 表2.字段名

左连接

select * from 表1 left join 表2 on 表一.字段名 = 表2.字段名

右连接

select * from 表1 right join 表2 on 表一.字段名 = 表2.字段名

自连接/自关联

自连接查询就是把一张表模拟成左右两张表,然后进行连表查询。
自连接就是一种特殊的连接方式,连接的表还是本身这张表
自连接必须起别名

子查询

当一条SELECT 语句满足不了查询条件 这个时候就需要子查询
在一个select 语句中 嵌套一个select 语句 那么这个被嵌套的就叫子查询

主查询

第一条select 语句就是 主查询

子查询和主查询的关系

1、子查询是嵌套在主查询中的
2、子查询要么是子查询的条件 要么就是数据源
3、子查询必须是一条完整的select 语句

子查询的分类

1、标量子查询 返回的是一行一列

select * from 表名  where age > ( select avg(age) from 表名);

2、列级子查询 返回的是一列多行

select name from classes where id in (select cls_id from students);

3、行级子查询 返回的是一行多列

身高最高 年龄最大

select * from students where (height,age) = (select max(height),max(age) from students);

表设计

一对一
一对多 通过外键
多对多 需要建立第三张表进行多表联查

视图

1、一个select 查询数据后返回数据的结果集
是一张虚拟的表 会随着基本表的数据改变而变化
适用于 经常 查询的表

创建的语句

create view 视图名称 as (select 语句)

查看视图的语句

show tables;

使用视图的语句

select * from 视图名

删除视图

drop view 视图名

视图的作用

提高了重用性 像一个函数一样
让数据更加清晰 方便查询
提高了安全性 可以针对不同用户
对数据库重构 却不影响数据的执行

事务

是一个操作序列 要么不执行 要么一起执行

四大特性

一致性
原子性
持久性
隔离性

事物的开启

begin / start transaction

事物的提交

commit

事务的回滚

rollback

索引

目的 提高查询速率

创建索引

create index 索引名称 on 表名(字段名称)

删除索引

drop index 索引名称 on 表名

查看索引

show index  from  表名

定义视图

建议以v_开头

create view 视图名称 as select查询语句
create view v_05A as select 语句
create view v_05A as select "05A"  as "班级",s.name as "姓名",s.gender as "性别" from students as s where s.cid in (select c.id from class as c where c.name="05A");

查看视图

​ 查看表会将所有的视图也列出来

show tables;

使用视图

视图的用途就是查询

select * from v_05A;

删除视图

drop view 视图名称;
drop view v_05A;

视图的作用

提高了重用性,就像一个函数
对数据库重构,却不影响程序的运行
提高了安全性能,可以对不同的用户
让数据更加清晰

索引的使用

查看索引

show index 索引名 from 表名;

创建索引

如果指定字段是字符串,需要指定长度,建议长度与定义字段时的长度一致
字段类型如果不是字符串,可以不填写长度部分

create index 索引名称 on 表名(字段名称(长度))

删除索引:

drop index 索引名称 on 表名;

索引demo

创建测试表testindex

create table test_index(title varchar(10));

查询

  • 开启运行时间监测:
set profiling=1;
  • 查找第1万条数据ha-99999
select * from test_index where title='ha-99999';
  • 查看执行的时间:
show profiles;
  • 为表title_index的title列创建索引:
create index title_index on test_index(title(10));
  • 执行查询语句:
select * from test_index where title='ha-99999';
  • 再次查看执行的时间
show profiles;