Mysql

Mysql

1.数据库基本操作

mysql -uroot -p123456;--连接数据库
show databases;       --显示所有的数据库
use mybatis;          --使用mybatis数据库
show tables;          --显示所有的表
describe blog;        --显示Blog表结构
create database student; --创建学生数据库
drop database if not exists student; --删除数据库
exit;				  --退出数据库

show create table student;   --查看创建表的sql语句
show create database mybatis;    --查看创建数据库的sql语句

数据库语言:

  • DDL:定义语言

  • DML:操作

  • DQL:查询语言

  • DCL:控制语言

2.数据库数据类型

2.1.数据库的列类型

数值:

  • tinyint 十分小的数据 1字节

  • smallint 较小的数据 2字节

  • mediumint 中等大小的数据 3字节

  • int 标准的整数 4字节

  • bigint 较大的数据 8字节

  • float 单精度浮点类型 4字节

  • double 双精度的浮点数 8字节

  • decimal 字符串形式的浮点数 金融

字符串

  • char 字符
  • varchar 可变字符串 0-65535
  • tinytext 微型文本 2^8-1
  • text 保存大文本 2^16-1

时间日期

  • date YYYY-MM-DD 日期

  • time HH:mm:ss 时间格式

  • datetime YYYY-MM-DD HH:mm:ss 日期时间

  • timestamp 时间戳 1970.1.1到现在的毫秒数

  • year 年份表示

null

  • 没有值,未知类型,不要使用NULL进行运算,结果返回NULL

2.2.数据库的字段属性

Unsigned:

  • 无符号数
  • 不能为负数

zerofill:

  • 零填充
  • 位数不足0来凑

自增auto_increment:

  • 列值自增
  • 可以保证主键的唯一行

默认default:

  • 如果输入,默认使用指定的值

comment:

  • 介绍

primary key:

  • 主键索引

unique:

  • 唯一索引

engine:

  • 数据库引擎

charset:

  • 默认字符集

2.3标准的表中应该包含的数据

id 主键

version 乐观锁

is_delete 伪删除

gmt_create 创建时间

gmt_update 修改时间

3.数据库引擎

--数据库引擎
/*
INNODB
MYISAM
*/
MYISAMINNODB
事务支持NY
数据行锁定NY
外键约束NY
全文索引YN
表空间大小较小较大,约为MYISAM2倍
  • MYISAM 占用空间小,速度块
  • INNODB 支持事务,支持多用户操作

在物理空间中的位置

所有数据库文件都存在于data目录下,

实际上还是以文件存储的方式。

MYSQL引擎在物理文件上的区别:

  • InnoDB 在数据库表中只有*.frm文件,以及上级目录中的一些文件

  • MyISAM 对应的文件

    ​ *.frm文件 表结构的文件

    ​ *.MYD 数据文件

    ​ *.MYI 索引文件

4.修改数据库的表

修改表

  • 修改表名 alter table 旧表名 rename as 新表名
  • 添加字段 alter table 表名 add 字段名 属性值
  • 修改约束 alter table 表命 modify 字段名 属性值
  • 修改字段名 alter table 表命 change 旧字段名 新字段名 属性值
  • 删除表中的字段 alter table 表名 drop 字段名
  • 删除表 drop table if exists 表名

5.Mysql数据管理

5.1外键

如果公共关键字在一个关系中是主关键字,那么这个公共关键字被称为另一个关系的外键。由此可见,外键表示了两个关系之间的相关联系。以另一个关系的外键作主关键字的表被称为主表,具有此外键的表被称为主表的从表。外键又称作外关键字。

方式一:在创建表的时候,添加外键约束

方式二:使用Alter添加外键

alter table student add constraint (外键别名) foreign key (列名) references `表名`(列名);

删除时需要级联删除。

外键不推荐使用,一般情况下使用逻辑外键,在程序中体现。

5.2DML语言

数据操作语言:修改表中书的的信息。

5.21 添加

insert into 表名 (字段名1,字段2,字段3)values (值1,值2,值3);

5.22 修改

update 表名 set 字段1=值1,字段2=值2…where 字段3=值3;

操作符 :

/>, < , >= ,<= ,

between 值1 and 值2

in(值1,值2,值3) 效率要低于多个or组合

5.23 删除

delete 表名 where 字段=值;

清空表中的数据:

  • delete from 表名;

  • trancate 表名;

相同点:

  • 都会删除表中的数据,并且保留表结构;

不同点:

  • delete 会保留自增数。

  • trancate 会使自增数恢复初始值,并且不会受事务影响。

delete删除的问题:

  • InnoDB:的自增列的值存储在内存中,断电即失

  • MyISAM:自增列存在文件中,断电后不会重置

6.DQL

DQL数据库查询语言

6.1查询指定字段

select * from 表名 where 字段=值;

字段别名

  • 字段名 as 别名

函数Concat(a,b) 将a,b拼接输出

  • select concat(‘姓名:’,name) as 新名字 from student;

6.2查询去重

distinct()去重

作用:取出select查询中的重复数据

6.3数据库中的列(表达式)

  • select version(); 查询系统版本(函数)

  • select 100*3-1 as 计算结果结果 (用来计算结果)

  • select @@auto_increment_increment :查询 自增的步长


查询考试成绩+1

select studentName,studentResult+1 from result;

数据库中的表达式:

文本值,列,Null,函数,计算表达式,系统变量

6.4where介绍

where 后面跟判断表达式(结果为boolean类型的表达式)

逻辑运算符:and,or,not,between and, in…

6.5模糊查询

本质为比较运算符;

运算符语法描述
is not nulla is not nulla不为空返回ture
is nulla is nulla为空返回为true
between anda between c and da在c和d之间返回为true
likea like ba匹配到b,返回结果为true
ina in (c,d,e)a 在范围中中返回true

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

%: 百分数代表0到n个字符

6.6联表查询

join on

img

select * from student as s inner join teacher as t on s.id=t.id;

连接类型:

left join , right join, inner join, full outer join.

6.7自连接

自己的表和自己的表连接,核心:一张表分为两张表使用。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OnQPO93X-1584704147753)(C:\Users\67229\AppData\Roaming\Typora\typora-user-images\image-20200227182547784.png)]

这张表实现按主类型和附属类型分类的方式显示。

实现原理就是将一张表当作两张表,然后连接查询。

select a.categoryName,b.categoryName 

from category as a,category as b 

where b.pid=a.categoryid;

执行结果如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wyJtPj6P-1584704147753)(C:\Users\67229\AppData\Roaming\Typora\typora-user-images\image-20200227183250840.png)]

6.7分页查询和排序

排序:order by

asc 按正序排序

desc 按倒序排序

例子

select * from user order by id asc;

分页查询limit

作用:缓解数据库压力,使用户得到更好的体验

例子:

select * from user limit 1,4;

第一个参数为初始开始位置,

pageSize:第二个参数为一页存放的数据的多少。

6.8 查询多个表中的内容

查询多个表中的内容的时候根据实际情况,可以分为两种方式:

联表查询:使用7种连接方式进行查询

子查询:将子查询的结果作为where中的判断

6.9分组查询

group by …having

按字段值进行分组,对分组的数据进行过滤的时候需要使用having

7.Mysql函数

7.1常用函数

select ABS(-8);        --取绝对值
select ceiling(9.4)    --向上取整
select floor(9.4)      --向下取整
select rand();         --返回0-1的随机数
select sign(10);       --判断一个数的符号,负数返回-1,整数返回1
--字符串
select char_length('') --返回字符串的长度
select concat('a','b','v') --拼接字符串
select insert('1234',1,2,'xiao')      --替换字符串,在第1的后面的两个位置插入‘xiao’
select lower('str')    --转大写
select upper('str')    --转小写
select instr('uiwe','u') --在字符串中查找指定字符串
select replace('勤劳的砖瓦匠','砖瓦匠','程序员') --提花指定字符串
select substr('udialfu',2,4) --截取指定长度字符串
select reverse("勤劳的砖瓦匠") --反转
select current_date();   --获取当前时间

--获取系统用户
select user();

7.2聚合函数

函数名称
count()数量
sum()求和
avg()求平均值
max()求最大值
min()最小值

count需要注意的操作

count(字段) 会忽略null值

count(*) 不会忽略null值

count(1) 不会忽略null值

7.3MD5加密

md5:主要增强算法复杂度,不可逆。

原理:相同的数据,加密后是相同的。

用法:MD5(‘str’);

校验:将用户传入的值进行加密后和数据库中的内容进行比对。

select 完整语法:

SELECT[ALL|DISTINCT|DISTINCTROW|TOP]
{*|talbe.*|[table.]field1[AS alias1][,[table.]field2[AS alias2][,]]}
FROM tableexpression[,][IN externaldatabase]
[WHERE]
[GROUP BY]
[HAVING]
[ORDER BY]
[WITH OWNERACCESS OPTION]

8.事务

8.1 事务介绍

要么都成功,要么都失败。

事务的ACID原则:

  • 原子性:同一个事务要么都完成,要么都不完成。
  • 一致性:最终一致性,事务前后数据完整性保持一制。
  • 隔离性:针对多用户,多个事务相互之间隔离,相互之间不会干扰。
  • 持久性:事务提交后,数据不会再随着环境修改。

事务隔离产生的一些问题

  • 脏读:一个事务读取了另一个事务未提交的数据
  • 不可重复读:在同一个事务中,多次读取结果不同。(修改)
  • 幻读:在读取数据的时候,读到其他事务添加的数据。

事务隔离级别

  • 读未提交
  • 读提交
  • 可重复读
  • 序列化

8.2 事务sql实际操作

进行事务操作的实际工程

--首先关闭自动提交
set autocommit=0;     --关闭自动提交

--事务开启
start transaction;    --标记一个事务,之后的sql将在这个事务中执行

--响应的sql操作

--设置保存点(可选项)
savepoint;

--提交事务后回滚事务
commit/rollback;

--回滚到保存点
rollback to savepoint;

--释放保存点
release savepoint

--最后开启自动提交
set autocommit=1;     //开启自动提交



9.索引

索引介绍比较详细的一篇博客https://www.cnblogs.com/tgycoder/p/5410057.html

锁的介绍:https://www.cnblogs.com/tgycoder/p/5410537.html

索引:(Index)是帮助MySQL高效获取数据的数据结构。

9.1索引分类

  • 主键索引
    • 唯一标识,主键不可重复,只能有一列作为主键索引
  • 唯一索引
    • 避免重复的列,唯一索引中的数据可以重复
  • 常规索引
    • 默认的,index , key关键字
  • 全文索引
    • 在特定数据库引擎下
    • 快速定位数据
    • fulltext

显示所有的索引信息

show index from 表名;

alter table 表名 add index 索引名(列名);

create index 索引名 on 表名(列名);

explain +sql语句

--全文索引的使用sql
select * from student where match(name)against('str');
--在数据量较少的情况下不会使用全文索引

9.2测试索引

explain

9.3索引原则

  • 索引并不是越多越好
  • 不要对经常变动的数据加索引
  • 小数据量的数据不要加索引
  • 索引一般添加在经常查询的字段上

10 用户管理

sql命令

实际上就是对mysql.user表进行增删改查

--创建用户操作
create user wangyc identified by '123456';
--修改当前用户密码
set password =password('新密码');
--修改密码
set password for 用户=password('新密码');
--修改用户名
rename user 旧用户名=新用户名
--为用户设定权限
grant all privileges on *.*;
--查看用户权限
show grant for 用户名;
show grant for root@localhost;

mysql备份

为什么要备份:

  • 保证数据不丢失
  • 数据转移

备份方式:

  • 直接拷贝物理文件
  • 可视化工具
  • 使用命令行导出,mysqldump
--数据库导出
--mysqldump -hlocalhost -uroot -p123456 数据库名 表名>磁盘位置;

--数据库导入
--source 备份文件
source D:/1.sql

11.数据库设计

为什么要进行数据库设计

  • 数据库比较复杂时,就需要设计

糟糕的数据库设计

  • 数据冗余,浪费空间
  • 插入和删除复杂
  • 开发困难

好的数据库设计

  • 节省空间

  • 保证数据完整性

  • 方便开发

数据库开发

  • 需求分析
  • 概要设计:设计关系图E-R图

前端:ant design

11.1三大范式

为什么需要规范?

  • 防止数据重复
  • 防止修改错误

第一范式(1NF)

原子性: 所有的字段都不能再分

第二范式(2NF)

每张表中只描述一件事情

第三范式(3NF)

确保每一列数据都和主键相关,不能间接相关

规范性和性能问题

关联查询的表不超过三张

  • 考虑商业化的需求和目标
  • 首先考虑性能问题
  • 在某些表中添加冗余性
    host;

> mysql备份

为什么要备份:

- 保证数据不丢失
- 数据转移

备份方式:

- 直接拷贝物理文件
- 可视化工具
- 使用命令行导出,mysqldump

```sql
--数据库导出
--mysqldump -hlocalhost -uroot -p123456 数据库名 表名>磁盘位置;

--数据库导入
--source 备份文件
source D:/1.sql

11.数据库设计

为什么要进行数据库设计

  • 数据库比较复杂时,就需要设计

糟糕的数据库设计

  • 数据冗余,浪费空间
  • 插入和删除复杂
  • 开发困难

好的数据库设计

  • 节省空间

  • 保证数据完整性

  • 方便开发

数据库开发

  • 需求分析
  • 概要设计:设计关系图E-R图

前端:ant design

11.1三大范式

为什么需要规范?

  • 防止数据重复
  • 防止修改错误

第一范式(1NF)

原子性: 所有的字段都不能再分

第二范式(2NF)

每张表中只描述一件事情

第三范式(3NF)

确保每一列数据都和主键相关,不能间接相关

规范性和性能问题

关联查询的表不超过三张

  • 考虑商业化的需求和目标
  • 首先考虑性能问题
  • 在某些表中添加冗余性
  • 故意添加一些计算列
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值