简介

  • 作用:存放数据
  • 版本:5.7和8.0

Mysql的三层结构

image-20230201210815498

SQL语句分类

  1. DDL:数据定义(创建create)
  2. DML:数据操作(增insert,删改)
  3. DQL:数据查询(select)
  4. DCL:数据控制(管理数据库:用户权限,grand,revoke)

数据库操作

打开Mysql

1
mysql -u root -p

显示数据库

1
SHOW DATABASES;

创建数据库

1
CREATE DATABASE 数据库名

使用数据库

1
USE 数据库名字;

‘’可以规避关键字,若要以关键字命名数据库,可以使用’’

备份数据库

在shell中运行

备份文件是用户输入的一系列sql语句

1
2
3
4
//备份数据库
mysqldump -u 用户名 -p -B 数据库1 数据库2 数据库n > 文件.sql
//备份表
mysqldump -u 用户名 -p 数据库1 表1 表2 > 文件.sql

恢复数据库

语句不用分号

1
source 备份文件夹路径

删除数据库

1
DROP DATABASE 数据库名;

数据类型

类型
int
char
date

表操作

创建

1
2
3
4
CREATE TABLE 表名(
字段 类型,
字段 类型
)character set 字符集 collate 校对规则 engine 引擎

character set和collate:如不指定,将以所在数据库的字符集为准

查看

查看数据库中的所有表格

1
SHOW TABLES;

查看表格结构(列)

1
DESC 表名

查看表中的所有数据

1
SELECT * FROM 表名

修改alter

修改表名

1
rename table 表名 to 新表名

修改表名字符集

1
alter table 表名 character set 字符集

添加列

1
alter table 表名 add(字段 类型,字段 类型)

修改列类型

1
alter table 表名 modify (字段 类型,字段 类型)

修改列名

1
alter table 表名 change 列名 新列名 类型

筛选select

查看某列

1
SELECT 列名 FROM 表名;

查看某列中满足条件的数据

1
SELECT 列名 FROM 表名 WHERE 列 运算符 值;

数据去重

1
select distinct 列名 FROM 表名;

给列取别名

1
select 列名 as 别名 from 表名
and or
in 在集合中 in(100,200)在集合{1,2}中
between and 介于范围 between 80 and 90 介于80-90包含两头
like 模糊查询 “韩%” 查询姓韩的同学 %表示任意字符 _表示任意一个字符

排序

表格按照某列的值排序

1
2
3
4
//升序(从上到下,依次递增),默认为升序
SELECT * FROM 表名 OREDRS OREDR BY 列名
//降序
SELECT * FROM 表名 OREDRS OREDR BY 列名 desc

添加insert

插入一行数据

1
insert into 表名 values(数据1,数据2,数据n)

对某些列插入数据

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

给列添加多个值

1
insert into 表名 (列名) values (数据),(数据),(数据)

修改

修改整列的值

1
update 表名 set 列名=value

修改某些列满足条件的值

1
update 表名 set 字段1=value,字段2=value where 列 运算符 值

删除

删除所有数据

1
delete from 表名

删除行数据

1
delete from 表名 where 列 运算符 值

删除列

1
alter table 表名 drop 列名

函数

统计函数count–返回行的总数

1
2
3
4
//1。count(*) 返回满足条件的记录的行数
select count (*) from 表名
//2.count(列名)统计满足条件的某列的元素的个数,但会排除NULL的情况
select count(列名) from 表名

合计函数sum–返回where条件的行的和,只对数值列起作用

1
select sum(数值列) from 表名 where 列 运算符 值

平均值avg–求列的平均值

1
select avg(列名) from 表名

最值max/min–列最大值

1
select max(列名) from 表名

表复制

1

image-20230228225616321

删除重复记录

1
2
3
#利用distinct筛选数据到临时表
#清空要删除重复记录的表
#将临时表的数据放入操作表

image-20230228230144118

分组函数

分组

1
select 列1,列2... from table group by 列

分组后过滤having(有)

1
select 列1,列2... from table group by 列 having 列 运算符 值

字符串函数

image-20230208221814706

数学函数

image-20230209214539688

时间函数

image-20230212202147547

获取当前时间戳(年月日时分秒)

1
now()

获取当前日期

1
current_date()

日期加减

1
2
3
4
//加
date_add(date,interval value year|month|day|hour|minute|second)
//减
date_sub(date,interval value year|month|day|hour|minute|second)

计算天数差

1
dateiff(date1,date2)--date为日期

image-20230212204724229

unix时间戳–1970-1-1至今

1
unix_timestamp()

将unix时间戳转化为指定格式的时间

1
form_unixtime(unix_timestamp(),'%Y-%m-%d %H:%i:%s')//年-月-日 时:分:秒

加密和系统

image-20230212210233759

查询使用sql的用户

1
user()--返回用户名和IP地址

查询当前使用的数据库名字

1
datebase()

为字符串进行MD5加密,经过MD5加密的字符串是32位的字符串,所以密码的类型常用char(32)

1
MD5(str)

加密函数

1
password(str)

流程控制函数

image-20230212212010541

如果姓名为Jack则将jack替换为杰克显示

判断是否为NULL不用==而用is

多表查询

分页

1
2
#从start+1行开始,取出rows行
select ... limit start,rows_value

笛卡尔积

1
select * from emp,det;#emp的每一行和det的每一行进行拼接,得到结果行数=emp行数*det行数

自连接

1
2
#把同一张表当做两张表使用,但要给两张表取别名
select worker.name ,boss.ename from emp as worker,emp as boss

多列子查询

1
(value1,value2)=(select ...)

事务

索引

视图

用户管理