Java(MySQL01)

本文介绍了初识MySQL的基础,包括其重要性、概念、分类(关系型与非关系型)、MySQL简介、安装与配置、SQLyog操作。重点讲解了数据库表的列类型、字段属性、创建表、数据管理(包括外键和DML操作)等内容。
摘要由CSDN通过智能技术生成

Java(MySQL01)

参考视频:MySQL最新教程通俗易懂(狂神)
参考文档:https://gitee.com/zhayuyao/java-notes/blob/master/md%E6%96%87%E6%A1%A3/%E7%8B%82%E7%A5%9E%E8%AF%B4java/03.MySql/MySQL%E5%9F%BA%E7%A1%80.md#22%E5%88%86%E9%A1%B5%E5%92%8C%E6%8E%92%E5%BA%8F

1. 初识MySQL

  • JavaEE:企业级java开发 主要Web
    • 前端(页面:展示,数据!)
    • 后台(连接点:连接数据库JDBC,链接前端(控制:控制视图跳转,和给前端传递数据))
    • 数据库(存数据,Txt,Excel,Word…)
  • 只会写代码,学好数据库,基本混饭吃!
  • 学好操作系统,数据结构与算法!当一个不错的程序猿!
  • (离散数学,数字电路,体系结构,编译原理)+实战经验 = 高级程序员(优秀的程序猿)

1.1 为什么要学习数据库

  • 岗位需求
  • 现在的世界,是大数据时代,得数据者得天下。
  • 被迫需求:存数据
  • 数据库是所有软件体系中最核心的存在 DBA

1.2 什么是数据库

  • 数据库(DB,DataBase)
  • 概念:数据仓库,软件,安装在操作系统(windows、linux、mac…)之上!SQL,可以存储大量的数据。500W!
  • 作用:存储数据,管理数据

1.3 数据库分类

  • 关系型数据库: (SQL)

    • MySQL、Oracle、Sql Server、DB2、SQLLite
    • 通过表和表之间,行和列之间的关系进行数据的存储
  • 非关系型数据库: (NoSQL)Not Only SQL

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

DBMS(数据库管理系统)

  • 数据库的管理软件,科学有效地管理我们的数据。维护和获取数据。
  • MySQL、数据库管理系统!

1.4 MySQL简介

  • MySQL是一个关系型数据库管理系统

  • 前世:由瑞典MySQL AB 公司开发,

  • 今生:属于 Oracle 旗下产品。

  • MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。

  • 开源的数据库软件。

  • 体积小,速度快,总体拥有成本低,招人成本比较低,所有人必须会。

  • 中小型网站甚至大型网站都用,集群!

  • 官网:https://www.mysql.com/cn/

  • 版本:

    • 5.7 老版本比较稳定
    • 8.x 新版本

1.5 安装MySQL

  • 教程:https://gitee.com/zhayuyao/java-notes/blob/master/md%E6%96%87%E6%A1%A3/%E7%8B%82%E7%A5%9E%E8%AF%B4java/03.MySql/MySQL%E5%9F%BA%E7%A1%80.md
  1. 解压

  2. 把这个包放到自己电脑的环境目录下

  3. 配置环境变量:修改系统变量Path即可
    在这里插入图片描述

  4. 新建mysql配置文件 .ini

[mysqld]
# 目录要换成自己的
basedir=H:\Environment\mysql-5.7.38\
datadir=H:\Environment\mysql-5.7.38\data\
port=3306
skip-grant-tables
  1. 启动管理员模式下的CMD,运行所有的命令。

  2. 安装mysql服务

  3. 初始化数据库文件

  4. 启动mysql,进去修改密码。

  5. 通过命令行进入mysql,mysql -uroot -p123456 ,-p后面不要加空格,修改密码(sql语句后面一定要加分号!)

  6. 注释掉 ini 中的跳过密码

  7. 重启mysql。连接测试,如果连接成功就OK。
    在这里插入图片描述

  • 问题:

    • 缺少组件.dll
    • 命令输出有误
  • sc delete mysql,清空服务(不要轻易使用)

1.6 安装SQLyog

  1. 安装
  2. 注册
  3. 打开连接数据库
    在这里插入图片描述
  4. 新建一个数据库 school
    在这里插入图片描述
  • 每一个sqlyog的执行操作,本质就是对应了一个sql,可以在软件的历史记录中查看。
  1. 新建一张表 student
    字段:id,name,age,
    在这里插入图片描述
  2. 查看表
    在这里插入图片描述
  3. 自己尝试添加多条记录

1.7 连接数据库

  • 命令行连接!
mysql -uroot -p123456 --连接数据库

update mysql.user set authentication_string=password('123456') where user='root' and host='localhost'; --修改用户密码
flush privileges; --刷新权限

--------------------------------------------------
--所有语句用;结尾
show databases; --查看所有的数据库

mysql> use school; --切换数据库 user 数据库名
Database changed

--
show tables; --查看数据库中所有的表
describe student; --显示数据库中所有的表的信息

create database westos; --创建一个数据库

exit; --退出连接

--单行注释(SQL的本来的注释)
/*(SQL的多行注释)
hello
*/
  • 数据库 xxx 语言 CRUD增删改查! CV程序员 API程序员 CRUD程序员!(业务程序员!)
    • DDL 定义
    • DML 操作
    • DQL 查询
    • DCL 控制

2. 操作数据库

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

2.1 操作数据库 (了解)

  1. 创建数据库
CREATE DATABASE IF NOT EXISTS westos;
  1. 删除数据库
DROP DATABASE IF EXISTS westos;
  1. 使用数据库
-- tab键的上面,如果你的表名或者字段名是一个特殊字符,就需要带``
USE `school`;
  1. 查看数据库
SHOW DATABASES; -- 查看所有的数据库
  • 对比:SQLyog的可视化操作
    在这里插入图片描述
  • 学习思路:
    • 对照 sqlyog 可视化历史记录查看sql
    • 固定的语法或关键字必须要强行记住!

2.2 数据库表的列类型

  1. 数值
类型描述占用字节备注
tinyint十分小的数据1个字节
smallint较小的数据2个字节
mediumint中等大小的数据3个字节
int标准的整数4个字节常用的 int
bigint较大的数据8个字节
float浮点数4个字节
double浮点数8个字节精度问题!
decimal字符串形式的浮点数金融计算的时候,一般是使用decimal
  1. 字符串
类型描述占用字节备注
char字符串(固定大小的)0~255
varchar可变字符串0~65535常用的变量 String
tinytext微型文本2^8-1
text文本串2^16-1保存大文本
  1. 时间日期

java.util.Date

类型描述备注
dateYYYY-MM-DD日期格式
timeHH:mm:ss时间格式
datetimeYYYY-MM-DD HH:mm:ss最常用的时间格式
timestamp时间戳:1970.1.1到现在的毫秒数!也较为常用
year年份表示
  1. null
  • 没有值,未知
  • 注意:不要使用NULL进行运算,结果必定是NULL

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

  1. Unsigned
  • 代表是无符号的整数
  • 声明了该列不能为负数
  1. zerofill
  • 以0填充的
  • 不足的位数,使用0填充,
    • int(3),5 -> 005
  1. 自增:
  • 通常理解为自增,自动在上一条记录的基础上+1(默认)
  • 通常用来设置唯一的主键。而且必须是整数类型。类似index。
  • 可以自定义设置主键自增的起始值和步长。
  1. 非空: NULL、not null
  • 设置为 not null,如果不给它赋值,就会报错
  • 设置为 NULL,如果不填,默认为null
  1. 默认:
  • 设置默认的值!
  • sex,默认值为 男,如果不指定该列的值,就会有默认的值。
  1. 拓展:
  • 暂时不用:
/*每一个表,都必须存在以下五个字段!未来做项目用的,表示一个记录存在意义。

id	主键
`version`	乐观锁
is_delete	伪删除
gmt_create	创建时间
gmt_update	修改时间
*/
  • int类型数据的长度设置实际上并非是设置数据的范围,而是最大显示宽度。
    • https://blog.csdn.net/YAruli/article/details/79187814

2.4 创建数据库表(重点)

-- 目标:创建一个school数据库
-- 创建学生表(列,字段) 使用SQL创建
-- 学号int; 登录密码varchar(20); 姓名、性别varchar(2); 出生日期(datatime); 家庭住址; email;

-- 注意点:使用英文的(),表的名称 和 字段 尽量使用 `` 反单引号
-- AUTO INCREAMENT 自增
-- 字符串使用 ''单引号括起来!
-- 所有的语句后面加,(英文的),最后一个不加
CREATE TABLE IF NOT EXISTS `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.5 数据表的类型

-- 关于数据库引擎
/*
INNODB	默认使用的
MYISAM	早些年使用的
*/
MYISAMINNODB
事务支持不支持支持
数据行锁定不支持支持
外键约束不支持支持
全文索引支持不支持
表空间的大小较小较大,约为2倍
  • 常规使用操作:
    • MYISAM: 节约空间,速度较快。
    • INNODB: 安全性高,事务的处理,多表多用户操作。


在物理空间存在的位置:

  • 所有的数据库文件都存在data目录下。
  • 本质还是文件的存储!
  • MySQL引擎在物理文件上的区别:
    • innoDB 在数据库表中只有一个*.frm文件,以及上级目录下的 ibdata1 文件。
    • MYISAM 对应文件
      • *.frm 表结构的定义文件
      • *.MYD 数据文件(data)
      • *.MYI 索引文件(index)


设置数据库表的字符集编码:

CHARSET=utf8
  • 如果不设置,会有mysql默认的字符集编码(且不支持中文)。
    • MySQL的默认编码是Latin1,不支持中文。
  • 可以在my.ini中配置默认的编码(不建议)。
character-set-server=utf8

2.6 修改和删除表

  1. 修改
-- 修改表名:	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(1);	-- 字段重命名

-- 删除表的字段:	ALTER TABLE 表名 DROP 字段名;
ALTER TABLE teacher1 DROP age1;
  1. 删除
-- 删除表(如果表存在,再删除)
DROP TABLE IF EXISTS teacher1;
  • 所有的创建和删除操作尽量加上判断IF EXISTS,以免报错。

  • 注意点:

    • 字段名用反单引号``包裹。
    • 注释用--或者/**/
    • sql关键字大小写不敏感,建议小写。
    • 所有的符号全部用英文。

3. MySQL数据管理

3.1 外键(了解即可)

  1. 方式一
  • 在创建表的时候,增加约束(麻烦,比较复杂)。
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;

-- 学生表的 gradeid 字段 要去引用年级表的gradeid
-- 定义外键key
-- 给这个外键添加约束(执行引用) references 引用
CREATE TABLE IF NOT EXISTS `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 '出生日期',
	`gradeid` INT(10) NOT NULL COMMENT '学生的年级',
	`address` VARCHAR(100) DEFAULT NULL COMMENT '家庭住址',
	`email` VARCHAR(50) DEFAULT NULL COMMENT '邮箱',
	PRIMARY KEY(`id`),
	KEY `FK_gradeid`(`gradeid`),
	CONSTRAINT `FK_gradeid` FOREIGN KEY (`gradeid`) REFERENCES `grade`(`gradeid`)
)ENGINE=INNODB DEFAULT CHARSET=utf8;
  • 删除有外键关系的表的时候,必须要先删除引用别人的表(从表),再删除被引用的表(主表)。
  1. 方式二
  • 创建表成功后,添加外键约束。
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;

-- 学生表的 gradeid 字段 要去引用年级表的gradeid
-- 定义外键key
-- 给这个外键添加约束(执行引用) references 引用
CREATE TABLE IF NOT EXISTS `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 '出生日期',
	`gradeid` INT(10) NOT NULL COMMENT '学生的年级',
	`address` VARCHAR(100) DEFAULT NULL COMMENT '家庭住址',
	`email` VARCHAR(50) DEFAULT NULL COMMENT '邮箱',
	PRIMARY KEY(`id`)
)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 哪个表(哪个字段)
  • 以上的操作都是物理外键,数据库级别的外键,我们不建议使用!(避免数据库过多造成困扰,这里了解即可)
  • 最佳实践:
    • 数据库就是单纯的表,只用来存数据,只有行(数据)和列(字段)。
    • 我们想使用多张表的数据,想使用外键,应该通过程序去实现。

3.2 DML语言(全部记住)

  • 数据库意义: 数据存储,数据管理
  • DML 语言: 数据操作语言
    • insert
    • update
    • delete

3.3 添加

  • insert
-- 插入语句(添加)
-- insert into 表名([字段1,字段2,字段3]) values('值1'),('值2'),('值3');
INSERT INTO `grade`(`gradename`) VALUES('大四');

-- 由于主键自增我们可以省略(如果不写表的字段,他就会一一匹配)
INSERT INTO `grade` VALUES('大三');

-- 一般写插入语句,我们一定要数据和字段一一对应!

-- 插入多个字段
INSERT INTO `grade`(`gradename`) VALUES('大二'),('大一');


INSERT INTO `student`(`name`) VALUES('张三');

INSERT INTO `student`(`name`,`pwd`,`sex`) VALUES('张三','aaaaaa','男');

INSERT INTO `student`(`name`,`pwd`,`sex`) 
VALUES('李四','aaaaaa','男'),('王五','aaaaaa','男');
  • 语法:insert into 表名([字段1,字段2,字段3]) values('值1'),('值2'),('值3');
  • 注意事项:
    • 字段和字段之间使用 英文逗号 隔开。
    • 字段是可以省略的,但是后面的值必须要一一对应,不能少。
    • 可以同时插入多条数据,VALUES后面的值,需要使用,隔开。VALUES(),(),...;

3.4 修改

  • update
    • 修改谁 (条件) set 原来的值 = 新值
-- 修改学员名字,带了条件
UPDATE `student` SET `name` = '狂神' WHERE id =1;

-- 不指定条件下,会改动所有的表!(跑路)
UPDATE `student` SET `name` = '长江7号';

-- 修改多个属性,逗号隔开
UPDATE `student` SET `name` = '狂神', `email` = '24736743@qq.com' WHERE id = 1;

-- 语法:
-- UPDATE 表名 set colnum_name = value,[colnum_name = value,...] where [条件];
  • 条件:where子句 运算符 id等于某个值/大于某个值/在某个区间内修改…
  • 操作符会返回 布尔值
操作符含义使用结果
=等于5=6false
<>或 !=不等于5<>6true
>
<
>=
<=
BETWEEN … AND …在某个范围内[2,5]
AND我和你,&&5>1 and 1>2false
OR我或你,||5>1 or 1>2true
-- 通过多个条件定位数据
UPDATE `student` SET `name`='长江7号' WHERE `name`='狂神44' AND sex = '女';
  • 语法: update 表名 set colnum_name = value,[colnum_name = value,...] where [条件];
  • 注意:
    • colnum_name 是数据库的列,尽量带上``
    • 条件,筛选的条件,如果没有指定,则会修改所有的列
    • value,可以是一个具体的值,也可以是一个变量
    • 多个设置的属性之间,使用英文逗号隔开
UPDATE `student` SET `birthday`=CURRENT_TIME WHERE `name`='长江7号' AND sex = '女';

3.5 删除

  • delete 命令:
  • 语法:delete from 表名 [where 条件];
-- 删除数据(避免这样写,会全部删除)
DELETE FROM `student`;

-- 删除指定数据
DELETE FROM `student` WHERE id = 1;
  • truncate 命令:
  • 作用:完全清空一个数据库表,表的结构和索引约束不会变!
-- 清空student表
TRUNCATE `student`;
  • delete和truncate的区别:
    • 相同点:都能删除数据,且不会删除表结构
    • 不同点:
      • truncate 重新设置自增列,计数器会归零。
      • truncate 不会影响事务。
-- 测试delete和truncate的区别
CREATE TABLE `test`(
	`id` INT(4) NOT NULL AUTO_INCREMENT,
	`coll` VARCHAR(20) NOT NULL,
	PRIMARY KEY(`id`)
)ENGINE=INNODB DEFAULT CHARSET=utf8;

INSERT INTO `test`(`coll`) VALUES('1'),('2'),('3');

DELETE FROM `test`;	-- 不会影响自增

TRUNCATE TABLE `test`;	-- 自增会归零
  • 了解即可:delete删除的问题,重启数据库,有个现象:
    • innoDB:自增列会从1开始(存储在内存中,断电即失)
    • MyISAM:继续从上一个自增量开始(存储在文件中,不会丢失)

 
 

—————— THE END ——————
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Zachsj

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值