mysql

10.Mysql

10.1 初识myaql

10.1.1 为什么学习数据库

  1. 岗位需求
  2. 现在的世界,大数据时代
  3. 被迫需求:村数据
  4. 数据库是所有软件体系中最核心的存在

10.1.2 什么是数据库

概念:数据仓库,软件,安装在操作系统之上,可以存储大量的数据

作用:存储数据,管理数据

10.1.3 数据库分类

DBMS(数据库管理系统)

  • 数据库管理软件,科学有效的管理数据,维护和获取数据
  • MySQL,数据库管理系统

10.1.4 MySQL简介

安装建议:

  1. 尽量不用exe,注册表
  2. 尽可能使用压缩包安装,卸载没那么麻烦

10.1.5 安装MySQL

  • 解压
  • 安装
  • 配置环境变量
  • 新建mysql配置文件ini
  • 启动管理员模式下的cmd,输入mysql启动命令
  • 安装mysql服务
  • 初始化data
  • 启动mysql,进去修改密码

10.1.6 基本的命令行操作

  • 命令行链接

管理员身份运行

> mysql -uroot -p  --链接mysql命令>> show databases;  --查看所有的数据库​mysql> use test;Database changed   --使用数据库表mysql> show tables;Empty set (0.01 sec) --查看表,所有的语句都是使用分号结尾mysql> exitBye              --退出连接

10.2 操作数据库

操作数据库>操作数据库中的表>操作数据库表中的数据

mysql不区分大小写

10.2.1 操作数据库

  1. 创建数据库
create database [if not exists] westos;
  1. 删除数据库
drop database [if exists]westos;
  1. 使用数据库
use school
  1. 查看所有的数据库
show databases; --所有数据库

10.2.2 数据列类型

数值

字符串

时间日前

null

10.2.3 数据库的字段属性(重点)

unsigned:

zerofill:

自增:

非空:

默认:

拓展:做项目时,表示一个记录存在的意义

10.6 事务

10.6.1 什么是事务

要么都成功,要么都失败

事务原则:ACID原则:院子性,一致性,持久性,隔离性
参考博客:https://blog.csdn.net/dengjili/article/details/82468576

隔离所导致的一些问题

执行事务

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

set autocommit=0

模拟场景

undefined

10.7 索引

mysql官方对索引的定义是:索引(index)是帮助mysql高效获取数据的数据结构,提取句子主干,就可以得到索引的本质,索引就是数据结构

10.7.1索引的分类

  • 主键索引 :primary key
  • 唯一标识,主键不能重复
  • 唯一索引:unique key
  • 避免重复的列的出现,唯一索引可以重复,多个列都可以标识唯一索引
  • 常规索引 key|index
  • 默认的,用index,key关键字来设置
  • 全文索引 fulltext index
  • 在特定的数据库引擎下才有,my|sam
  • 快速定位数据

基础语法

10.7.2 测试索引

explatn

索引在小数据量的时候用处不大,但是在大数据量的时候,区别十分明显

10.7.3 索引原则

索引的数据结构

Hash 类型的索引

Bree:InnoDB的默认数据结构

阅读:http://blog.codinglabs.org/articles/theory-of-mysql-index.html

讲的很好

10.8 权限管理

10.8.1 用户管理

可视化管理

可以进行用户的增加,删除

可以对用户权限进行设置

SQL命令操作

用户表:mysqluser

本质时对用户表进行增删该查

10.8.2 数据库备份

为什么要备份:

  • 保证重要的数据不丢失
  • 数据转移 MySQL数据库备份的方式
  • 直接拷贝到物理文件
  • 在可视化软件中导出
    1. 在想要导出的库或者表中,右键然后导出
    2. 然后也可以导入
  • 使用命令行导出 mysqldump命令行使用
    1. 格式:mydqldump -h 主机 -u 用户名 -p 密码 数据库 表名 > 物理磁盘位置/文件名
    2. mysqldump -hlocalhost -root -p1314520 school student >D:/s.sql
    3. 格式:mydqldump -h 主机 -u 用户名 -p 密码 数据库 表名1 表名2 > 物理磁盘位置/文件名(这是导出多张表)
    4. 登入的情况下,切换到指定的数据库,source 备份文件
    5. source d:/a.sql
    6. 不登录的情况下,mysql -u用户名 -p密码 库名

10.9规范数据库设计

10.9.1 为什么要设计

mysql

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

  • 分析需求:分析业务和需要处理的数据库的需求
  • 概要设计:设计关系图E-R图

设计数据库的步骤:(个人博客):

数据库里面不用驼峰命名,用下划线

  • 收集信息,分析需求
  • 用户表(用户登录注册,用户的个人信息,写博客,创建分类)
  • 分类表(文章分类,谁创建的)
  • 文章表(文章的信息)
  • 评论表
  • 友链表(友链信息)
  • 自定义表(系统信息,某个关键字,或者一些主字段)
  • 说说表(发表心情。。。i.d。。content)

  • 标识实体(就死建表,落实到每个字段)

  • 标识实体之间的关系
  • 写博客:user—》blog
  • 创建分类:user—》blog
  • 关注:user—》user
  • 评论:user–》user–》blog

10.9.2 三大范式

为什么需要数据规范化

三大范式

第一范式

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

第二范式

前提:满足第一范式

每张表只描述一件事情

第三范式

前提:满足第一范式和第二范式

第三范式需要确保数据表中的每一列数据都和主键直接相关,而不能间接相关

规范性和性能的问题

10.10 JDBC(重点)

10.10.1 数据库驱动

驱动:声卡,显卡,数据库

我们的程序通过数据库驱动和数据库打交道

10.10.2 JDBC

JAVA操作数据库的规范要JDBC

对于开发人员来说只要学习JDBC即可

java.sql

javax.sql

还需要导入一个数据库驱动包 mysql-connector=java-5.1.47.jar

10.10.3第一个JDBC程序

1.创建一个普通java项目

2.导入数据库驱动

在项目下新建lib目录,把jar包复制进来,右键点击add as library

3.编写测试代码

  • 加载驱动 class,forName(“com.mysql.jdbc.Driver”);//固定写法

  • 用户名信息和url

String url=”jdbc:mysql://localhost:3306/数据库名?useUnicode=true&characterEncoding=utf8&useSSL=true”

string username=root;

string password=201314;

  • 链接成功,数据库对象 Connection 代表数据库 Connection connection =DriverManager.getConnection(url,username,password)

  • 执行SQL对象 statement 执行sql对象 Statement statement=connection.createStatement();

  • 执行SQL的对象去执行SQL,可能存在结果,查看返回结果 String sql=”select * from users”; Resultset resultset=statement.executeQury(sql);返回的结果集,结果集中封装了我们全部的查询出来的结果

  • 释放连接 resultSet。close(); statement.close(); connection.close(); 从后面往前面关闭

步骤总结:

Drivermanger

URL

Statement 执行SQL的对象 preparestatemnt 执行SQL对象

resultset 查询结果集:封装了所有的查询结果

获得指定的数据类型

遍历,指针

释放资源

10.10.4 statement

crud操作 create

crud 操作 delete

crud 操作 update

crud 操作 read

代码实现

1.提取工具类

  • 建立一个utils包

  • 建立一个配置文件,增加耦合度

driver=com.mysql.jdbc.Driverurl=jdbc:mysql:
  • 建立工具类加载配置文件
package com.util;​import com.sun.xml.internal.fastinfoset.algorithm.IEEE754FloatingPointEncodingAlgorithm;import jdk.nashorn.internal.ir.CatchNode;​import java.io.IOException;import java.io.InputStream;import java.sql.*;import java.util.Properties;​public class jdbcutils {    private  static  String driver=null;    private  static  String url=null;    private  static  String username=null;    private  static  String password=null;​      static{          try{

这些都是固定的唯一要改的就是sql语句
* 编写语句
1. 插入语句

package com;​import com.sun.xml.internal.bind.v2.model.core.ID;import com.util.jdbcutils;​import java.sql.Connection;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;​public class test {    public static void main(String[] args) {        Connection com=null;        Statement st=null;        ResultSet rs=null;        try {            com= jdbcutils.getConnection();
1. 删除语句
package com;​import com.sun.xml.internal.bind.v2.model.core.ID;import com.util.jdbcutils;​import java.sql.Connection;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;​public class test {    public static void main(String[] args) {        Connection com=null;        Statement st=null;        ResultSet rs=null;        try {            com= jdbcutils.getConnection();

和插入相比就变了一个sql,增删改都用的.executeUpdate,都只要修改sql语句就行
1. 修改语句

package com;​import com.sun.xml.internal.bind.v2.model.core.ID;import com.util.jdbcutils;​import java.sql.Connection;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;​public class test {    public static void main(String[] args) {        Connection com=null;        Statement st=null;        ResultSet rs=null;        try {            com= jdbcutils.getConnection();
  • 查询
package com;​import com.sun.xml.internal.bind.v2.model.core.ID;import com.util.jdbcutils;​import java.sql.Connection;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;​public class test {    public static void main(String[] args) {        Connection com=null;        Statement st=null;        ResultSet rs=null;        try {            com= jdbcutils.getConnection();

10.10.5 SQL注入

SQL注入问题

sql注入就是sql存在漏洞,会被攻击导致数据泄露SQL注入即是指

10.10.6 PreparedStatement对象

PreparedStatement对象和statement对象的区别就是可以防止sql注入

Original: https://www.cnblogs.com/zrk0929/p/15867807.html
Author: 学技术的小凯
Title: mysql

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/579994/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球