Navicat Premium 10.1.3激活(MySQL基础知识总结)

Navicat Premium 10.1.3激活(MySQL基础知识总结)

MySQL

1.简介

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

1.1 数据库分类

关系型:(SQL)

  • 通过表之间,行,列之间的关系进行数据的存储
  • MySQL,Oracle…

非关系型:(NoSQL)

  • 对象存储,通过对象自身属性来决定
  • Redis,MongDB

DBMS(数据库管理系统)

  • 作用:管理和操作数据库
  • MySQL:关系型数据库管理系统

数据库xxx语言

  • DDL 定义

  • DML 操作

  • DQL 查询

  • DCL 控制

2.操作数据库

如果表名或者字段名是特殊字符,需要带~ ~

数据库引擎

MYISAMINNODB事务支持不支持支持数据行锁定不支持支持外键约束不支持支持全文索引支持不支持表空间大小小大,约为MYISAM2倍

常规操作:

  • MYISAM:节约空间,速度较快
  • INNODB:安全性高,支持事务,适合多表(外键)多用户(事务)操作

3.MySQL数据管理

3.1外键

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


删除外键关系的表,先删除从表,再删除主表

方式二:创建表之后添加外键约束


以上为物理外键。

最佳实践:不用物理外键

  • 数据库是单纯的表,只用来存储数据
  • 用程序实现外键

3.2 DML语言

3.3 添加

insert

语法:


3.4 修改


条件子句中通过操作符编写
Navicat Premium 10.1.3激活(MySQL基础知识总结)

3.5 删除

delete 命令

语法:

Truncate 命令

完全删除一个数据库表,表的结构和索引不会变化

语法:

delete与truncate的区别

  • 相同:删除数据库数据,不影响表结构

  • 不同:

    • truncate使得自增列从0开始
    • truncate不影响事务

delete删除的问题

重启数据库后的现象

  • InnoDB:自增列从1开始,(存在内存中的,断电即失)
  • MyISAM:继续从上一个自增列开始(存在文件中,不会丢失)

4.DQL查询数据

4.1 DQL

数据查询语言

select 字段名 from table

SELECT语法


4.2 指定查询字段


去重


数据库中的表达式


4.3 where条件子句


模糊查询

运算符语法描述Likea like b如果a匹配b,则结果为真Ina in (a1,a2,…)a在()中的某个,结果为真

4.4 联表查询

Navicat Premium 10.1.3激活(MySQL基础知识总结)
Navicat Premium 10.1.3激活(MySQL基础知识总结)

  • 根据业务需求写SQL

  • 使用left/right join时,on和where的区别

    • on条件后会生成临时表,不管不管条件是否为真,都会返回左表所有的行(left join),返回右表所有的行(right join)
    • where在临时表生成后通过其后的条件对on生成的临时表进行过滤,left/right join的效果丢失(可以理解为inner join,只返回相关联的记录),条件(on条件+where条件)不为真的全部过滤掉,不显示
    
    

    Navicat Premium 10.1.3激活(MySQL基础知识总结)

  • student表和result表概况
    student表
    Navicat Premium 10.1.3激活(MySQL基础知识总结)
    result表
    Navicat Premium 10.1.3激活(MySQL基础知识总结)


Navicat Premium 10.1.3激活(MySQL基础知识总结)


Navicat Premium 10.1.3激活(MySQL基础知识总结)


Navicat Premium 10.1.3激活(MySQL基础知识总结)


Navicat Premium 10.1.3激活(MySQL基础知识总结)


Navicat Premium 10.1.3激活(MySQL基础知识总结)

分析查询步骤,将多次查询阶段拆分成多次

思路:

  1. 要查询哪些数据 select
  2. 从哪几个表中查询 from 表 xxx join 连接的表 on 交叉条件
  3. 若有多张表查询,先查询两张表,再查询剩下的

自连接

表和自身连接,把一张表拆成两张表

父类(顶级id)

categoryidcategoryName2信息技术3软件开发5美术设计

子类

pidcategoryidcategoryName34数据库28办公信息36web开发57美术设计

操作:查询父类对应的子类关系

父类子类信息技术办公信息软件开发数据库软件开发web开发美术设计ps技术

Navicat Premium 10.1.3激活(MySQL基础知识总结)

4.5 分页和排序

limit语法:limit(起始值,pagesize)


order by:


4.6 子查询

where(条件的值是查询得到的)

即:where(select * from)

将子查询得到的结果作为条件在主查询中查询


4.7 过滤和分组


5.MySQL函数

5.1 常用函数


5.2 聚合函数


5.3 MD5加密


6.事务

6.1 定义

一组SQL放在一个批次中执行

事务原则(ACID)

原子性:要么都成功,要么都失败。

一致性:事务前后的数据完整性保证一致。总和不变

隔离性:不同用户同时访问数据库,每个用户单独一个事务,不能被其他事务操作干扰。

持久性:事务一旦提交就持久化到数据库,不可逆。

隔离导致的问题

脏读:一个事务读取了另外一个事务未提交的数据。

不可重复读:一个事务多次读取某一行记录,多次读取的结果不一致。

幻读:一个事务内读取到了其他事务插入的数据,前后读取结果不一致。


7.索引

索引帮助mysql快速获取数据的数据结构。

7.1 索引分类

  • 主键索引 (PRIMARY KEY)
    • 只能有一个列作为主键,主键不可重复
  • 唯一索引 (UNIQUE KEY)
    • 避免重复列的出现,可以有多个列都为唯一索引,且唯一索引的记录可以重复
  • 常规索引 (KEY/INDEX)
  • 全文

语法


java中的事务代码


7.2测试索引

索引效果:


7.3 索引原则

  • 不是越多越好
  • 不要对经常变动的数据加索引
  • 小数据量的表不需要加索引
  • 索引一般在常用来查询的字段上(索引覆盖)

索引的数据结构

btree:InnoDB默认的数据结构

8.权限管理和备份

8.1权限管理

sql命令操作

用户表:mysql.user

权限管理的本质:对用户表进行crud

用户管理:


8.2 MySQL备份

备份原因:

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

备份方式

  • 拷贝物理文件
  • 在可视化工具手动导出
  • 使用命令行导出:mysqldump

可视化工具导出(Navicat Premium)

Navicat Premium 10.1.3激活(MySQL基础知识总结)

命令行导入


9.规范数据库设计

9.1 为什么要设计

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

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

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

设计数据库的步骤

例(个人博客)

  • 分析需求(要哪些表):

    • 用户表(用户登录注销,用户个人信息,写博客,创建分类
      • id,username,password,gender,age,signature
    • 分类表(文章分类,谁创建的)
      • id,category_name,create_name_id
    • 文章表(文章内容)
      • id,title,author_id,category_id,content,create_time,update_time,love
    • 评论表
      • id,blog_id,user_id,content,create_time,user_id_parent(其回复的评论id)
    • 友链表(链接信息)
      • id,link(链接名称),href(链接地址),sort(友链排序)
    • 自定义表(系统信息,某个关键的子或者字段)key:value
  • 标识实体(把需求落地到每个表的字段)

  • 标识实体之间的关系

    • 写博客:user->blog
    • 创建分类:user->category
    • 关注:user->user
    • 友链:links
    • 评论:user-user-blog

    9.2 三大范式

    为什么需要规范化?

    • 信息重复
    • 更新异常
    • 插入异常
    • 删除异常

    三大范式

    第一范式

    原子性:每个字段的值不能再拆分

    第二范式(在1NF基础上)

    针对联合主键(多个字段构成的主键):所有字段必须依赖于主键,而不能依赖于主键的一部分

    每张表只描述一件事情

在这里插入图片描述

第三范式(在1NF和2NF基础上)

每个字段都和主键直接相关,而不能间接相关
Navicat Premium 10.1.3激活(MySQL基础知识总结)

规范性和性能不可兼得

关联查询的表不超过三张表

  • 商业化的需求,性能更重要
  • 在考虑性能的时候,需要适当考虑规范性
  • 故意增加冗余字段,从多表查询变为单表查询
  • 故意增加计算列(如select count(*),添加计算列,每插入一条数据,该列加1),或者添加索引(但是索引树会占内存)

10.JDBC

10.1 数据库驱动

通过数据库的驱动把数据库和Java程序连通在一起。

10.2 JDBC

在数据库驱动和应用程序之间的规范,工程师只需要面向JDBC接口编程。
在这里插入图片描述

10.3 第一个JDBC程序

1.创建测试数据库


2.引入jar包:mysql-connector-java-5.1.47.jar
Navicat Premium 10.1.3激活(MySQL基础知识总结)
3.编写java程序


JDBC程序步骤总结:

1.加载驱动

2.url,username,password

3.获取数据库对象 DriverManager

4.新建执行sql的statement对象

5.新建sql语句,并用statement执行sql,显示返回的resultSet

6.释放连接

所用类简介

DriverManager


URL


Statement 执行SQL的对象 PrepareStatement 执行sql的对象


ResultSet 查询的结果集:返回了所有的查询结果

获得指定数据类型


遍历,指针


释放资源

按照资源声明倒序依次关闭


10.4 statement对象

提取公共方法,将连接到数据库和获取连接,释放连接抽取到公共工具类

1、提取公共参数driver、url、username、password

2、通过类加载器导入配置文件流getResourceAsStream,参数载入文件流properties.load(in),为每个公共参数赋值

3、加载驱动

4、获取连接和释放连接的函数


对于不同的sql任务,只需要改变sql语句,不同任务的业务代码用同一个模板。

1、提取公共参数Connection、Statement、ResultSet

2、建立连接和创建statement

3、写sql,并用statement执行sql,对产生的ResultSet进行显示

4、调用工具类的方法释放连接

测试插入数据:


测试删除数据:


更改数据:


查询数据:


SQL注入

sql存在漏洞,被攻击导致数据泄露,本质:sql会被拼接,拼接为
1=1为true,这样,非合法的用户名和密码也能查询数据库中所有的结果,导致数据泄露。

sql注入格式:pwd输入为:’or’1=1

测试代码:


10.5、PreparedStatement对象

PreparedStatement可以防止SQL注入,且效率更高。

select测试代码:


防止sql注入


10.6 IDEA连接数据库

1.连接数据库
Navicat Premium 10.1.3激活(MySQL基础知识总结)
2.配置用户名,密码,测试连接
Navicat Premium 10.1.3激活(MySQL基础知识总结)
连接错误情况:
Navicat Premium 10.1.3激活(MySQL基础知识总结)
3.选择对应数据库
在这里插入图片描述

10.7、JDBC操作事务


10.8、数据库连接池

池化技术:由于连接-释放浪费系统资源,所以准备预先资源,过来就连接准备好的

最小连接数

最大连接数

等待超时:

编写连接池,实现DataSource接口

开源数据源实现

  • DBCP

  • C3P0

  • Druid

DBCP

用到的jar包:

commons-dbcp-1.4、commons-pool-1.6

操作步骤:

1、导入jar包
Navicat Premium 10.1.3激活(MySQL基础知识总结)
2、src下配置properties文件
Navicat Premium 10.1.3激活(MySQL基础知识总结)


3、创建工具类,读取配置文件,工厂模式创建数据源


4、测试DBCP,通过JdbcUtils_DBCP获取Connection


C3P0

用到的jar包

c3p0-0.9.55、mchange-commons-java-0.2.19

1、添加两个jar包到lib目录

2、src目录下添加c3p0.xml配置文件

3、建立c3p0Util,通过new ComboPooledDataSource(“MySQL”)的方式创建数据源(MySQL为配置文件中某个配置的名称)

4、测试c3p0,只需要通过c3p0Util获取Connection(本质上是DataSource返回的connection)和释放连接。

总结

更换数据源,DataSource接口不会变,方法不变,本质上只是更换数据源的获取方式。

Navicat Premium 10.1.3激活今天的文章
Navicat Premium 10.1.3激活(MySQL基础知识总结)分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/104708.html

(0)
编程小号编程小号
上一篇 2024-08-05
下一篇 2024-08-05

相关推荐