10.Mysql
10.1 初识myaql
10.1.1 为什么学习数据库
- 岗位需求
- 现在的世界,大数据时代
- 被迫需求:村数据
- 数据库是所有软件体系中最核心的存在
10.1.2 什么是数据库
概念:数据仓库,软件,安装在操作系统之上,可以存储大量的数据
作用:存储数据,管理数据
10.1.3 数据库分类
DBMS(数据库管理系统)
- 数据库管理软件,科学有效的管理数据,维护和获取数据
- MySQL,数据库管理系统
10.1.4 MySQL简介
安装建议:
- 尽量不用exe,注册表
- 尽可能使用压缩包安装,卸载没那么麻烦
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 操作数据库
- 创建数据库
create database [if not exists] westos;
- 删除数据库
drop database [if exists]westos;
- 使用数据库
use school
- 查看所有的数据库
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数据库备份的方式
- 直接拷贝到物理文件
- 在可视化软件中导出
- 在想要导出的库或者表中,右键然后导出
- 然后也可以导入
- 使用命令行导出 mysqldump命令行使用
- 格式:mydqldump -h 主机 -u 用户名 -p 密码 数据库 表名 > 物理磁盘位置/文件名
- mysqldump -hlocalhost -root -p1314520 school student >D:/s.sql
- 格式:mydqldump -h 主机 -u 用户名 -p 密码 数据库 表名1 表名2 > 物理磁盘位置/文件名(这是导出多张表)
- 登入的情况下,切换到指定的数据库,source 备份文件
- source d:/a.sql
- 不登录的情况下,mysql -u用户名 -p密码 库名
10.9规范数据库设计
10.9.1 为什么要设计
软件开发中,关于数据库的设计:
- 分析需求:分析业务和需要处理的数据库的需求
- 概要设计:设计关系图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/
转载文章受原作者版权保护。转载请注明原作者出处!