狂神说JavaMySQL最新教程通俗易懂--笔记

Posted 闲言_

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了狂神说JavaMySQL最新教程通俗易懂--笔记相关的知识,希望对你有一定的参考价值。

1.初识mysql

JavaEE :企业级JavaWeb开发 Web

前端(页面:展示,数据)
后台 (连接点:连接数据库JDBC,连接前端(控制 、 视图跳转、和给前端传递数据))
数据库存数据,Txt,Excel,word)

只会写代码,学好数据库,基本混饭吃
操作系统,数据结构与算法!当一个不错的程序员
离散数学,数字电路,体系结构,编译原理。+实战经验,高级程序员~优秀程序员~

1.1为什么要学习数据库

  1、岗位需求
  2、现在的世界,大数据时代~得数据者得天下
  3、被迫需求:存数据、去IOE
  4、数据库是所以软件体系中最核心的存在 DBA


1.2什么是数据库

数据库(DB,DataBase)
概念:数据仓库,软件,安装在操作(Windows、Linux、Mac)系统之上的!
作用存数据,管理数据 Excel


1.3 数据库分类

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

  • MySQL、Oracle、SqlServer、DB2、SQLlite
  • 通过标和表之间,行和列之间的关系进行数据的存储;学员信息表,考勤表,

非关系型数据库:{key:value} (No SQL)

  • Redis,MongDB
  • 非关系型数据库:对象存储,通过对象的自身的属性来决定。

  DB(DataBase) 存数据
  DBMS 管理和操作数据

  DBMS(DataBase Manager System)数据库管理系统
  数据库的管理软件,科学有效的管理我们的数据。维护和获取数据;
MySQL ,本质是数据库管理系统


1.4MySQL 简介

MySQL 是一个关系型数据库管理系统
前世: 瑞典MySQL AB 公司
今生:属于Oracle 旗下产品

开源的数据库软件

体积小、速度快、总体拥有成本低,招人成本低、所有人必须会~
中小型网站、或者大型网站

5.7 稳
8.0

官网:

安装建议:
1、尽量不要使用ext安装,会把一些配置中放到注册表
2、尽可能使用压缩包

1.5、安装MySQL

详细安装MySQL 5.7 请查看这篇博客

https://blog.csdn.net/qq_42025798/article/details/119933631


1.6、我使用的是Navicat 不是SQLyong

1.7、连接数据库

命令行连接

mysql -uroot -p123

查看所有数据库

show databases;

切换数据库

use 数据库名

查看所有的表

show tables;

创建一个数据库

create database westos(数据库名);

退出连接

exit;

注释

-- 单行注释(SQL 本来的注释)
/* (SQL的多行注释)
 hello
*/

数据库 xxx语言 CRUD 增删改查! CV程序员 API程序员 CRUD 程序员(业务!)

  1. DDL 定义
  2. DML 操作
  3. DQL 查询
  4. DCL 控制

2、操作数据库

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

操作数据库

2.1、创建数据库

create database [if not exists] westos
--if not exists 如果不存在则创建数据库

1、使用数据库

drop database [if exists] westos
-- if exists 如果存在则删除

2、使用数据库

use westos

3、查看数据库

show databases;
--查看所有的数据库

2.2、数据库的列类型

1、数值

类型描述长度
tinyint十分小的数据1个字节
smallint较小的数据2个字节
mediumint中等大小的数据3个字节
int标准的整数4个字节 常用的
bigint较大的数据8个字节
float单精度浮点数4个字节
double双精度浮点数8个字节(精度问题)
decimal字符串形式的浮点数金融计算的时候使用

2、字符串

类型描述长度
char字符串固定大小的0-255
varchar可变字符串0-65535 常用的变量 String
tinytext微型文本2^8-1
text文本串2^16-1 保存大文本

3、时间日期
java.util.Date

类型描述
dateYYYY-MM-DD 日期格式
timeHH:MM:SS 时间格式
datetimeYYYY-MM-DD HH:MM:SS 最常用的时间格式
timestamp时间戳 ,1970年1月1日到现在的毫秒数 (全球统一的)

4、null

  • 没有值,未知
  • 注意:不要使用NULL进行运算

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

Unsigned

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

zerofill

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

自增 auto_increment

  • 通常理解为自增,自动在上一条记录的基础上+1(默认)
  • 通常用来设置唯一的主键~index,必须是整数类型
  • 可以自定义设置主键自增的起始值和步长

非空 NULL not null

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

默认

  • 设置默认值
  • sex ,默认值为 男,

拓展
  每一个表都必须存在以下五个字段!未来做项目用的,表示一个记录存在的意义

id              主键
version         乐观锁
is  delete      伪删除
qmt create      创建时间
qmt  update     修改时间

创建表

-- AUTO_INCREMENT 自增
-- 所有的语句后面加 ,(英文的),最后一个不用加
-- default 默认值
-- 注释
-- primary key 主键,一般一个表只有一个唯一的主键;
-- 设置引擎ENGINE=INNODB
-- CHARSET 编码
create table student(
	`id` int(4) not null AUTO_INCREMENT comment '学号', 
	`name` varchar(30) not null default '匿名' comment '姓名',
    `pwd`  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                -- 显示表的结构

2.4、数据表的类型

关于数据库引擎

INNODB   默认使用
MYUSAM   

区别

功能MYISAMINNODB
事务支持不支持支持
数据行锁定不支持(表锁)支持
外键约束不支持支持
全文索引支持不支持
表空间的大小较小较大,约为2倍

常规使用操作:

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

在物理空间存在的位置

  • 所有的数据库文件都存在data目录下
  • 本质还是文件存储!


MySQL 引擎在物理文件上的区别
  INNODB 在数据库表中只有一个 *.frm 文件,以及上级目录下的ibdata1 文件
  以下截图是使用 INNODB 引擎创建创建表的物理文件

MYISAM对应的文件
  *.frm :表结构的定义文件
  MYD :数据文件
   *.MYI :索引文件(index)

设置数据库表的字符集编码
  不设置的话,会是mysql默认的字符集编码
  MySQL的默认编码是latin1,不支持中文

charset=utf8

2.5、修改和删除表

修改

--  修改表名
alter table teacher rename as  teacher1 
alter table 旧表名   rename as 新表名

-- 增加表的字段
alter table teacher1  add age int(11)
alter table 表名     add  字段名  列属性

-- 修改表字段(重命令,修改约束)
alter table teacher1 modify age varchar(11)
alter table 表名  modify  字段名  列属性      -- 修改约束(change)

alter table teacher1  change  age ag1 int(1) -- 重命令(change )
alter table 表名   chage  旧字段名  新字段名 列属性 

-- 删除表的字段
alter table teacher1 drop age1
alter table 表名  drop 字段名
删除
drop table teacher1
drop table 表名

注意点:

  • `` 字段名,用这个包裹
  • 注释 … /**/
  • sql 关键字大小写不敏感,建议写小写

3、MQL数据管理

3.1、外键

create table grade(
	`gradeid` int(11) not null AUTO_INCREMENT comment '年级id',
	`grandename` varchar(30) not null comment '年级班级',
	primary key(`gradeid`)
)engine=INNODB default charset=utf8

-- 学生表的gradeid 字段 要去引用年级表的gradeid
-- 定义外键key
-- 给这个外键添加约束(执行引用)  references 引用

create table student(
	`id` int(4) not null AUTO_INCREMENT comment '学号', 
	`name` varchar(30) not null default '匿名' comment '姓名',
  `pwd`  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 '邮箱',
	`gradeid` int(11) not null comment '年级名称',
	primary key(`id`),
  key `FK_grandeid` (`gradeid`),
  constraint `FK_grandeid`	foreign key (`gradeid`) references `grade` (`gradeid`)
)ENGINE=INNODB DEFAULT CHARSET=utf8

  删除右外键关系的表的时候,必须要先删除引用别人的表(从表),在删除被引用的表(主表)

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

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

3.2、 DML语言(全部记住)

数据库意义:数据存储和数据管理

DML语句:数据操作语言

  • insert
  • update
  • delete

3.3、添加

insert

insert into 表名([字段一,字段二,字段三]) values ("值一","值二","值三")

-- 由于主键自增,可以填null,或者不写该字段
insert into grade(gradename) values("物联专升本203")
insert into grade(gradeid,gradename) values(NULL,"大一")

-- 一般插入数据,一定要数据和字段 一一对应

-- 插入多个字段
insert into grade(gradename) values("大三"),("大四")
语法:insert into 表名([字段一,字段二,字段三]) values ("值一","值二","值三")

注意事项:

  1. 字段与字段之间用英文逗号隔开
  2. 字段可以省略,但是后面的值必须要一一对应
  3. 可以同时插入多条数据,values后面的值,需要使用 , 隔开即可 values(),(),…()

3.4、修改

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

-- 修改学员名字,带了条件
update `student` set name="闲言" where id=1

-- 修改多个值
update `student` set name="闲言",`email`="bloghut@163.com" where id=1
-- 修改学员名字,不带条件
update student set name="it闲言"


-- 语法 update 表名 set column_name=value,...[column_name=value]  where  [条件]

  条件:where 子句 运算符 id 等于某个值, 大于某个值,在某区间内修改

-- 通过多个条件定位数据
update student set `name`="长江七号" where id=1 and sex="女"

注意事项:

  1. column_name 是数据库的列、,尽量带上``
  2. 条件,筛选的条件,如果没有指定则会修改所有的列
  3. value ,是一个具体的值,也可以是一个变量
  4. 多个设置的属性之间用逗号隔开

3.5、删除

delete

语法:delete  from 表名 [where 条件]

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

-- 删除指定数据
delete from student where id = 1
  • truncate 清空表
-- 清空表
truncate `student`

delete 和 truncate 区别

  • 相同点:都能删除数据,不会影响表结构
    不同
  • truncate 重写设置自增列,计数器会归零
  • truncate 不会影响事务
create table test(
	`id` int(10) not null auto_increment,
	`name` varchar(20) not null,
	primary key(`id`)
)engine=INNODB default charset=utf8
 
delete from test  -- 不会影响自增
truncate test     -- 自增会归零

了解即可:delete 删除的问题,重启数据库,现象

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

4、DQL查询数据(最重点)

4.1 DQL

select 语法

SELECT
    [ALL | DISTINCT | DISTINCTROW ] 
      [HIGH_PRIORITY]
      [STRAIGHT_JOIN]
      [SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT]
      [SQL_CACHE | SQL_NO_CACHE] [SQL_CALC_FOUND_ROWS]
    select_expr [, select_expr ...] 
    [

     FROM table_references
      [PARTITION partition_list]
    [WHERE where_condition] -- 指定结果需要满足的条件
    [GROUP BY {col_name | expr | position}
      [ASC | DESC], ... [WITH ROLLUP]] -- 指定结果按照哪几个字段来分组
    [HAVING where_condition] -- 过滤分组的记录必须满足的次要条件
    [ORDER BY {col_name | expr | position}
      [ASC | DESC], ...] -- 指定查询记录按照一个或多个排序
    [LIMIT {[offset,] row_count | row_count OFFSET offset}] 
    -- 指定查询的记录从哪条至哪条

(Data Query LANGUAGE:数据查询语言

  1. 所有的查询操作都用它 select
  2. 简单的查询,复杂的查询它都能做!~
  3. 数据库中最核心的语言,最重要的语句

4.2、指定查询字段

--  查询全部的学生   select 字段 from 表名
select * from student

-- 查询指定字段
select `studentno`,`studentname` from student


-- 别名,给结果集其别名,可以给字段起别名,也可以给表起别名 
select `studentno` as 学号,`studentname` as 姓名 from  student as s

-- 函数Concat(a,b)
select Concat("姓名:",studentname) as 新姓名 from student


语法: select 字段,.. from 表名

有的时候,列名不是那么的见名知意,我们起别名, as 字段名  as 别名 

P.16 建表和插入数据

年级表

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
DROP TABLE IF EXISTS `grade`;
CREATE TABLE `grade`  (
  `gradeid` int(11) NOT NULL AUTO_INCREMENT COMMENT '年级编号',
  `gradename` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '年级名称',
  PRIMARY KEY (`gradeid`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 6 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
INSERT INTO `grade` VALUES (1, '大一');
INSERT INTO `grade` VALUES (2, '大二');
INSERT INTO `grade` VALUES (3, '大三');
INSERT INTO `grade` VALUES (4, '大四');
INSERT INTO `grade` VALUES (5, '预科');
SET FOREIGN_KEY_CHECKS = 1;

学生表

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student`  (
  `studentno` int(4) NOT NULL COMMENT '学号',
  `loginpwd` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `studentname` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '学生姓名',
  `sex` tinyint(1) NULL DEFAULT NULL COMMENT '性别,0或1',
  `gradeid` int(11) NULL DEFAULT NULL COMMENT '年级编号',
  `phone` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '联系电话,允许为空',
  `address` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '地址,允许为空',
  `borndate` datetime(0) NULL DEFAULT NULL COMMENT '出生时间',
  `email` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '邮箱账号允许为空',
  `identitycard` varchar(18) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '身份证号',
  PRIMARY KEY (`studentno`git与github的使用Git最新教程通俗易懂学习——狂神说视频笔记

git与github的使用Git最新教程通俗易懂学习——狂神说视频笔记

狂神说JavaGit最新教程通俗易懂

狂神说JavaSpringBoot最新教程IDEA版通俗易懂

狂神说JavaSpringMVC最新教程IDEA版通俗易懂

vue 狂神教程学习 笔记