MySql 基础学习

   日期:2024-11-07    作者:caijiyuan 移动:http://mip.riyuangf.com/mobile/quote/2145.html
  • JavaEE:企业级开发 web 前端+后端+数据库

    MySql 基础学习

  • 前端:页面展示数据

  • 后台:连接前端与数据库(JDBC

  • 数据库:存数据

  • 数据库是所有软件体系中最核心的存在----DBA

  • 数据仓库,软件,安装在操作系统之上

1.1数据库分类

  • 关系型数据库:Excel 行列(SQL

    • Mysql,Oracle,Sql Server,DB2,SqlLite
    • 表和表之间,行列之间的关系进行存储
  • 非关系型数据库(key,value

    • Redis,MongDB
    • 对象存储,通过自身属性决定
    • NOSQL NOT only SQl
  • DBMS 数据库管理系统

    • 科学有效的管理数据
    • 维护和获取数据
  • MySql : 关系型数据库管理系统

  • Sql语言

  • 最好的关系型数据库管理系统

  • 开源

  • ,快

1.2MySql安装下载

MySQL 5.7安装教程-KuangStudy-文章

1.3Sqlyog安装使用

  • 每一个sqlyog操作都对应历史记录

1.4连接数据库

  • 命令行连接数据库
 
  • CMD窗口所有语句 ; 结尾
  • 查看所有数据库
 
  • DDL 数据库定义语言
  • DML 操作
  • DQL 查询
  • DCL 控制
  • 操作数据库

    • 操作数据库中的表
      • 操作表的数据
  • 操作数据库:创建,删除,使用

 
  • 学习中对照Sqlyog可视化历史记录

2.1列的数据类型

数值

  • tinyint 特别小的 1个字节
  • smallint 较小的 2个字节
  • int 正常的 4个字节
  • bigint 较大的 8个字节
  • float 浮点数 4个字节
  • double 浮点数 8个字节
  • decimal 字符串式的浮点数 超精密计算(金融

字符串

  • char 字符串固定大小 0-255
  • varchar 可变字符串 0-65535(String
  • tinytext 微型文本
  • text 文本串(大) 保存大文本

时间日期

  • date 日期
  • time 时分秒
  • datetime
  • timestamp 1970.1.1到现在的毫秒数
  • year

null

  • null 避免进行运算

2.2数据库字段属性

  • Unsigned 无符号整数,不能为负数
  • Zerofill 不足的位数默认0填充
  • 自增 自动+1,设置主键,整数类型
  • 可以高级设置里设置主键起始值和步长max,min
  • NULL , not NULL
  • 默认:默认值
  • 主键:正常必须有,唯一标识

2.3创建数据库表

  • 使用sql创建
 

格式

 
 

设置字符节编码

 

2.4MyISAM 与 InnoDB区别

  • 关于数据库引擎

  • MyISAM :早些年使用的

    • 不支持事务
    • 不支持数据行锁定
    • 不支持外键约束
    • 支持全文索引
    • 表空间较小
    • 节省空间,速度快
  • InnoDB:默认

    • 支持事务
    • 支持行锁定
    • 支持外键约束
    • 不支持全文索引
    • 表空间约为MyISAM两倍
    • 安全性高,事务处理,多表多用户关联操作
  • 数据库所有的文件本质上还是文件的存储(data目录下

  • InnoDB在数据库表中只有一个*from文件,其他是备份,以及上级目录下的ibdata1文件

  • MyISAM:*from定义文件,*MYD数据文件(data,MYI索引文件(index

2.5修改和删除表 alter

修改

 

删除

 

3.1 数据库级别的外键

方式一,在创建表时候,增加约束

 
  • 删除有外键关系的表(grade表)时,必须先删除引用的表(student表

方式二,创建表成功后添加外键约束

 
  • 数据库级别的外键 不建议使用,避免数据库过多

最佳实践

  • 数据库就是单纯的表,只用来存数据
  • 想用多张表的数据,去程序实现使用外键

3.2 Insert 语句

DML 语言 – 数据操作语言

  • Insert
  • Update
  • Delete
  • Select
 

3.3 Update 语句

update 修改谁 (条件) set 原来的值 = 新值

 

3.4 Delete 语句

delete from 表明 where 条件

  • 删除表 优选 truncate
 
  • delete 与 truncate 区别

    • 都能删除数据,且不修改表结构
    • Truncate 重新设置自增列,子增量 计数器归零
    • Truncate 不会影响事务
    • delete 不影响自增
  • delete 删除 ,重启数据库

    • InnoDB 自增列从1开始(存在内存中,断电即失
    • MyISAM 继续从子增量开始 (存在文件中,丢不了

3.4 Select 语句

  • DQL 查询数据:数据查询语言
  • 数据库中最核心的语言,最重要的,使用频率最高的

Select 找啥? FROM 在哪?Where 条件

 
  • 别名 , 给结果起个名字 AS 表名和字段名都可以起别名
 
  • 拼接字符串
 
  • select 啥都能查

    •  

3.5 去重 distinct

  • distinct 去重
  • all 全部数据
 

3.6 where 子句

  • 检索数据中符合条件的值

  • 尽量使用英文符号-and = && , or = || , != / not

3.7 模糊查询

  • sql里面运算符不一定是符号

比较运算符

  • like a like b a匹配到b,结果为真
  • in a in b a在b里面某一个,结果为真
 
  • 不能写= null 要写 is null
  • 通配符只能在like中使用

3.8 连表查询 joinON

join 对比

 
  • 左右查询中on 后的匹配结果不影响是否显示,不匹配顶多是null

  • join on 连接查询

  • where 等值查询

select 找啥 frm (左表名) join (连接的右表名) on (条件

3.9 自连接

  • 自己的表和自己的表连接
  • 核心思想:给表或字段起不同的别名那就是两份数据
 

3.10 分页和排序

  • limit order By

Order By 排序

 

limit 分页

  • 用户体验好

  • 瀑布流----无限加载,没有分页 抖音/快手-无限划没有尽头,刷视频

  • 所有语句的最后一个

 

3.11 子查询和嵌套查询

  • where(值是计算出来的
  • 本质:where 中嵌套一个查询语句
 

3.12 MySql 常用函数 *

 

3.13聚合函数及分组过滤

  • count) -计数
 
  • sum) -求和

  • avg) -平均值

  • max) -最大值

  • min) -最小值

  • group by 通过**字段分组

  • select 语法 优先级

    • inner join – 联合查询
    • where – 条件 一个查询语句只能有一个
    • group by – 按哪几个字段分组
    • having – 过滤一个或多个条件,也是where
    • order by – 排序
    • limt – 分页

3.14 数据库级别的MD5 加密

  • 增强算法复杂度,不可逆
  • MD5破解原理,背后有字典,只有简单的
 

4.1 ACID原则,脏读,不可重复读,幻读

什么是事务

  • 将一组sql放在一个批次执行

事务原则 - ACID 原子性,一致性,隔离性,持久性 -脏读,幻读

  • 原子性:要么都成功,要么都失败,不能只发生一部分动作
  • 一致性:结果一致性:事务前后的数据完整性保持一致
  • 持久性:事务结束后不会因为外界原因使数据丢失,没提交将恢复到原状,提交后持久化到数据库,不可逆
  • 隔离性:多个用户操作一个数据需要隔离
  • 脏读:一个事务读取到了另外一个事务未提交的数据
  • 不可重复读:一个事务内重复读取表数据,数据发生变化
  • 幻读:事务中读取到了其他事务读取到了其他事务更新的数据

4.2 测试事务实现转账

  • mysql默认开启事务自动提交
 

5.1 索引及其分类

  • 索引:帮助Mysql高效获取数据的数据结构,提取句子主干,可以得到索引的本质,索引是数据结构

索引的分类

  • 主键索引:primary key

    • 唯一标识,不可重复,只能有一个列作为主键
  • 唯一索引:unique key

    • 避免重复列出现,唯一索引可以重复,多个列可以表示为唯一索引
  • 常规索引:key,index

    • 默认的
  • 全文索引:fulltext

    • 在特定的数据库引擎才有,MyISAM
    • 快速定位数据
  • 创建表时增加索引或创建完毕增加索引

 

5.2 超大数据测试索引

  • 索引在小数据无意义,只有在庞大数据量面前才会有效
 

5.3 索引原则

  • 索引不是越多越好
  • 不对经常变动的数据加索引
  • 小数据靠边别瞎搞,起码也得几百万条数据
  • 一般加在常用来查询到字段上

hash 类型的索引

btree :innodb 默认的类型

  • 度娘直接搜:mysql索引背后的数据结构及算法原理

6.1 数据库用户管理

Sqlyog 可视化管理

  • 创建新用户:localhost与127.0.0.1 有强制要求

  • 对初始mysql数据库中user表进行增删改查

  • root 用户拥有最高权限

6.2 数据库备份

  • 保证重要的数据不丢失
  • 数据转移
  • 备份方法
  • 拷贝data文件

  • 在sqlyog可视化工具中手动导出 – 结构跟数据都带走

  • cmd命令行导出 – mysqldump -localhost -u -p 库 表

  • ​ 导入 – source (先登录

7.1 规范数据库设计

  • 当数据库较复杂时,需要设计
  • mysql数据库不区分大小写,没有驼峰命名,下划线处理

糟糕的设计

  • 数据沉余,浪费空间
  • 数据插入删除麻烦,异常(外键问题
  • 程序性能差

良好的数据库设计

  • 节省空间
  • 保证数据完整性
  • 方便开发系统

软件开发中,数据库的设计

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

设计步骤 (个人博客

  • 收集信息,需求分析
    • 用户表
    • 分类表(文章分类,文章作者
    • 文章表(文章信息
    • 自定义表 -系统信息,某个关键字
    • 评论表
  • 标识实体—需求落到每个关键字
  • 标识实体间关系:表之间相互关联

7.2 三大范式

  • 关系型数据库设计六大范式,前三个就够了

第一范式

  • 原子性,保证每一列不可再分

第二范式

  • 满足第一范式
  • 一张表只能描述一件事
  • 每一列与主键直接相关

第三范式

  • 满足一二范式
  • 消除传递依赖,有关联地方就行

规范性和性能问题

  • 关联查询不能太多表
  • 性能更加重要
  • 故意给某些表增加一些冗余字段
  • 故意增加一些计算列 --从大数据量降低为小数据量的计算 – 索引(占内存

10.1 数据库驱动

  • 驱动:声卡,显卡,数据库
  • JDBC:java操作数据库的规范
  • 这些规范的实现由具体的厂商去做
  • 对于开发人员来说只需掌握jdbc接口即可
  • 没有什么是加一层解决不了的
  • 需要导入数据库驱动包

10.2 第一个JDBC程序

  • 导入mysql-connector包,版本最好与数据库版本一致

连接步骤

  • 加载驱动
  • 准备用户信息
  • 连接数据库
  • 获得数据库对象
  • 获得sql执行对象
  • 操作数据库
  • 释放连接
 

10.3 jdbc中的对象解释

 

10.4 Statement对象

  • 提取工具类—每次执行sql语句要变动的只有sql与Statement对象

  • 准备sql语句

  • 连接

  • src目录下db.properties文件

 
  • util配置文件
 
  • 测试连接
 
 
  • 增加删除修改统一都是executeUpdate

    只有查询是 executeQuery

10.5 SQL注入问题

  • sql存在漏洞,会被攻击导致数据泄露

  • sql会被拼接 如查询语句添加 or ’1=1’ 这种永久成立的判断

    • input 输入框输入 sql语句等危险情况
  • 几乎所有的sql都存在sql注入的漏洞

10.6 PreparedStatement对象

  • 防止sql注入,效率更高
 

10.7 使用idea连接数据库

  • 注意版本对应

10.8 jdbc操作事务

  • ACID原则
 
  • idea里面一组完整事务跟sqlyog对比只需要
    • 开启事务:connection.setAutoCommit(false);
    • 提交:connection.commit();
    • 最后回滚可以写但没必要,失败默认自动回滚(牛啊

10.9 数据库连接池

  • 每次操作数据库都要连接释放资源,其本身也是对系统资源的很大浪费
  • 池化技术:准备一些预留的资源,过来直接连接
    • 最大最小连接数 ------- 最大最小承载资源
    • 等待超时:报个异常,下次再来

开源数据源实现—当下较火的

  • DBCP —传统的

  • C3P0 —传统的

  • Druid:阿里巴巴 德鲁伊 —这个厉害,为监控而生

    • 无需代码连接数据库的操作

特别提示:本信息由相关用户自行提供,真实性未证实,仅供参考。请谨慎采用,风险自负。


举报收藏 0评论 0
0相关评论
相关最新动态
推荐最新动态
点击排行
{
网站首页  |  关于我们  |  联系方式  |  使用协议  |  隐私政策  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报  |  鄂ICP备2020018471号