基于《狂神说Java》MySQL--学习笔记

前言:

本笔记仅做学习与复习使用,不存在刻意抄袭。

------------------------------------------------------------------------------------------------------------

给各位学友强烈推荐《遇见狂神说》他的整套Java学习路线使我获益匪浅!!!

点击跳转至遇见狂神说哔哩哔哩首页

如果你也是狂神的小迷弟,可以加我好友一起探讨学习。
 


目录

前言:

数据库

什么是数据库

数据库分类 

MySQL简介

MySQL安装

连接数据库

操作数据库

操作数据库

数据库的列(数据)类型

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

创建数据库表(重点)

数据表的类型

MySQL数据管理

外键(了解即可)

DML语言(全部记住)

添加

修改

删除

DQL查询数据

DQL

指定查询字段

where条件语句

联表查询

分页和排序

子查询

分组

MySQL函数

常用函数

 聚合函数(常用)

数据库级别MD5加密(拓展)

事务

索引

索引的分类

常规索引 (KEY/INEDEX)

索引原则

权限管理和备份

用户管理

 MySQL备份

规范数据库设计

为什么要需要设计

为什么需要数据规范化

JDBC(重点)

jdbc

第一个JDBC程序

statement对象

 PreparedStatement对象

使用IDEA链接数据库

事务

数据库连接池

调优

性能监控

PROFILES 已经被替代

performance_schema MYSQL自带的性能监控表 可以了解

schema与数据类型优化

数据类型的优化

合理使用范式反范式

主键选择

字符集选择 utf-8 -> utf-8mb4

存储引擎的选择

适当的数据冗余

适当拆分

执行计划

id:选择标识符

select_type:表示查询的类型。

table:输出结果集的表

partitions:匹配的分区

type:表示表的连接类型

possible_keys:表示查询时,可能使用的索引

key:表示实际使用的索引

key_len:索引字段的长度

ref:列与索引的比较

rows:扫描出的行数(估算的行数)

filtered:按表条件过滤的行百分比

Extra:执行情况的描述和说明

总结

索引数据类型

索引匹配方式


数据库

什么是数据库

数据库 ( DataBase , 简称DB )

概念 : 长期存放在计算机内,有组织,可共享的大量数据的集合,是一个数据 “仓库”

作用 : 保存,并能安全管理数据(如:增删改查等),减少冗余…

数据库分类 

  • 关系型数据库 ( SQL )
  • MySQL , Oracle , SQL Server , SQLite , DB2 , …
  • 通过表和表之间,行和列之间的关系进行数据的存储,,学员信息表,考勤表…
  • 非关系型数据库 ( NOSQL ) Not Only
  • Redis , MongoDB , …
  • 非关系型数据库通常指数据以对象的形式存储在数据库中,而对象之间的关系通过每个对象自身的属性来决定

DBMS 数据库管理系统

  • 数据库管理软件 , 科学组织和存储数据 , 高效地获取和维护数据
  • MySQL,数据库管理系统

为什么要说这个呢?

因为我们要学习的MySQL应该算是一个数据库管理系统.

MySQL简介

概念 : 是现在流行的开源的,免费的 关系型数据库

历史 : 由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。

特点 :

  • 免费 , 开源数据库
  • 小巧 , 功能齐全
  • 使用便捷
  • 可运行于Windows或Linux操作系统
  • 可适用于中小型甚至大型网站应用

官网 : https://www.mysql.com/
压缩包地址:https://dev.mysql.com/get/Downloads/MySQL-5.7.19-winx64.zip

MySQL安装

这里不详述:可以通过微信添加PC软件之家小程序,进行详细了解。

一款数据库可视化工具,安装过程按照上一步进行。

连接数据库

命令行连接!

mysql -u root -p123456 --连接数据库
alter user root@localhost identified by '123456'; --修改用户密码
flush privileges; --刷新权限

------------------------------------
--所有的语句都用;结尾
show databases;--查看所有的数据库
use school; --use 数据库名 切换数据库

show tables;--查看所有的表
desc student;--查看名为student表信息

create database westos; --创建一个名为westos的数据库 
exit;--退出链接

-- 单行注释
/*
多行注释
*/

**数据库xxx语言 **

DDL 定义

DML 操作

DQL 查询

DCL 控制

操作数据库

操作数据库

1.创建数据库

CREATE DATABASE IF NOT EXISTS westos

2.删除数据库

DROP DATABASE IF EXISTS westos

3.使用数据库

USE `school` --加单引号会变成字段 特殊的字符要加这个符号

4.查看数据库

SHOW DATABASES --查看所有的数据库

数据库的列(数据)类型

数值

tinyint 十分小的数据 1个字节
smallint 较小的数据 2个字节
mediumint 中等大小的数据 3个字节
int 标准的整数 4个字节 常用的
bigint 较大的数据 8个字节
float 浮点数 4个字节
double 浮点数 8个字节
decimal 字符串形式的浮点数 金融计算的时候 一般用decimal

字符串

char 字符串固定大小 0~255
varchar 可变字符串大小 0~65535 对应String
tinytest 微型文本 2^8-1
test 文本串 2^16 -1 保存大文本

时间日期

data YYYY-MM-DD,日期格式

time HH:mm:ss
datetime YYYY-MM-DD HH:mm:ss 最常用的时间格式
timestamp 时间戳 1970.1.1到现在的毫秒数 较为常用
year 年份标识

null

没有值,未知
注意,不要使用NULL进行运算,结果为NULL

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

Unsigned:

无符号的整数
声明了该列不能为负数

zerofill

0填充的
不足的位数,使用0来填充, int(3), 5— 005

非空null not null

假设设置为not null,如果不给它赋值,就会报错!
null 如果不填写值,默认就是null!

默认:

设置默认的值
sex,默认值为男,如果不指定该列的值,则会有默认的值

创建数据库表(重点)

/* 每个表,都需要存在以下五个字段  未来做项目用的,表示一个记录存在的意义  拓展
id 主键
'version'  乐观锁
is_delete 伪删除   认为被删除  实际没有
gmt_create 创建时间
gmt_update 修改时间
*/
--AUTO_INCREMENT 自增
--PRIMARY KEY 主键

CREATE TABLE IF NOT EXISTS `student`(
	`id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '学号',
	`name` VARCHAR(30) NOT NULL DEFAULT'匿名' COMMENT'姓名',
	`paw` VARCHAR(20) NOT NULL DEFAULT'123456' COMMENT'密码',
	`sex` VARCHAR(2) NOT NULL DEFAULT'女' COMMENT'性别',
	`birthday` DATETIME DEFAULT NULL COMMENT'出生日期',
	`address` VARCHAR(100) DEFAULT NULL COMMENT'家庭住址',
	`email` VARCHAR(50) DEFAULT NULL COMMENT'邮箱',
	PRIMARY KEY (`id`)
)ENGINE=INNODB DEFAULT CHARSET=utf8

格式

create table [if not exists] `表名`(
    `字段名` 列表名 [属性] [索引] [注释],
    `字段名` 列表名 [属性] [索引] [注释],
    ......
    `字段名` 列表名 [属性] [索引] [注释]
)[表类型][字符设置][注释]

常用命令

show create database school  -- 查看创造数据库的语句
show create table student -- 查看student数据表定义的语句
desc student -- 显示表的结构

数据表的类型

-- 关于数据库引擎
/*
INNODB 默认使用
MYISAM 早些年用的
*/

 常规使用操作:

  • MYISAM 节约空间,速度较快
  • INNODB 安全性高,事务的处理,多表多用户操作

修改

-- 修改表名 ALTER TABLE 旧表名 RENAME AS 新表名
ALTER TABLE teacher RENAME AS teacher1
-- 增加表的字段 ALTER TABLE 表名 ADD 字段名 列属性
ALTER TABLE teacher1 ADD age INT(11)
-- 修改表的字段(重命名,修改约束)
-- ALTER TABLE 表名 MODIFY 字段名 列属性[]
ALTER TABLE teacher1 MODIFY age VARCHAR(11) -- 修改约束
-- ALTER TABLE 表名 CHANGE 旧名字 新名字 列属性[]
ALTER TABLE teacher1 CHANGE age age1 INT(11) -- 重命名,

-- 删除表的字段 表名 ALTER TABLE 表名 DROP 字段名
ALTER TABLE teacher1 DROP age1


删除

-- 删除表 DROP TABLE 表名(如果表存在再删除)
DROP TABLE [if exists] teacher1

所有的创建和删除操作尽量加上判断,以免报错~

MySQL数据管理

外键(了解即可)

方式一、在创建表的时候,增加约束(麻烦,比较复杂)

CREATE TABLE `grade`(
  `gradeid` INT(10) NOT NULL AUTO_INCREMENT COMMENT '年级id',
  `gradename` VARCHAR(50) NOT NULL COMMENT '年级名称',
  PRIMARY KEY(`gradeid`)
)ENGINE=INNODB DEFAULT CHARSET=utf8

CREATE TABLE IF NOT EXISTS `student`(
	`id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '学号',
	`name` VARCHAR(30) NOT NULL DEFAULT'匿名' COMMENT'姓名',
	`paw` VARCHAR(20) NOT NULL DEFAULT'123456' COMMENT'密码',
	`sex` VARCHAR(2) NOT NULL DEFAULT'女' COMMENT'性别',
	`birthday` DATETIME DEFAULT NULL COMMENT'出生日期',
	`gradeid` INT(10) NOT NULL COMMENT '年级id',
	`address` VARCHAR(100) DEFAULT NULL COMMENT'家庭住址',
	`email` VARCHAR(50) DEFAULT NULL COMMENT'邮箱',
	PRIMARY KEY (`id`),
	KEY `FK_gradeid` (`gradeid`), -- FK_ 外键约束规定
	CONSTRAINT `FK_gradeid` FOREIGN KEY (`gradeid`) REFERENCES `grade`(`gradeid`)
)ENGINE=INNODB DEFAULT CHARSET=utf8

删除有外键关系的表的时候,必须要先删除引用别人的表,再删除被引用的表

ALTER TABLE `student`
ADD CONSTRAINT `FK_gradeid` FOREIGN KEY(`gradeid`) REFERENCES `grade`(`gradeid`)
-- ALTER TABLE 表 ADD CONSTRAINT 约束名 FOREIGN KEY (作为外键的列) REFERENCES 哪个表(引用的列)

以上的操作都是物理外键,数据库级别的外键,不建议使用!(避免数据库过多困扰)

最佳实践

  • 数据库就是单纯的表,只用来存数据,只有行(数据)和列(字段)
  • 我们想使用多张表的数据,想使用外键(程序去实现)

DML语言(全部记住)

数据库的意义:数据存储,数据管理

DML语言:数据操作语言

  • insert 添加
  • update 修改
  • delete 删除

添加

insert

语法:INSERT INTO 表名 ([列1],[列2],[列3]) VALUES ('字段1','字段2','字段3'),('字段1','字段2','字段3')

-- 一般写插入语句,我们一定要数据和字段一一对应!
-- INSERT INTO 表名 ([列1],[列2],[列3]) VALUES ('字段1','字段2','字段3'),('字段1','字段2','字段3')
INSERT INTO grade (gradename) VALUES ('大二'),('大三')

修改

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

-- 修改学院名字,带了简介
UPDATE `student` SET `name`='狂神'WHERE id=1;

-- 不指定条件的情况下,会改动所有的值
UPDATE `student` SET `name`='长江7号'

-- 语法:
-- update 表名 set 列=值,[列=值],[列=值] where [条件]
操作符 含义 范围 结果
= 等于 5=6 false
<>或!= 不等于 5<>6 or 5!=6 true
between…and… [ ]闭合区间
and 相当于&& 5>1 and 1>2 false
or 相当于|| 5>1 or 1>2 true

删除

--  删除数据(避免这样写,会全部删除)
delete from `student`

-- 删除指定数据
d
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值