【狂神说Java】阶段三笔记1. MySQL-01

文章目录MySQL1 初识MySQL1.1 为什么学习数据库1.2 什么是数据库1.3 数据库分类1.4 MySQL简介1.5 安装MySQL1.6 安装SQLyog1.7 连接数据库2 操作数据库(了解)2.1 操作数据库2.2 数据库的数据类型2.3 数据库的字段属性(重点)2.4 创建数据库(重点)2.5 数据表的类型2.6 修改删除表3 MySQL数据管理3.1 外键(了解)3.2 DML语言(背)3.3 添加Insert3.4 修改update3.5 删除MySQL1 初识MySQLJava
摘要由CSDN通过智能技术生成

MySQL

1 初识MySQL

JavaEE:企业级Java开发 Web

前端(页面:展示,数据!)

后台(连接点:连接数据库JDBC,连接前端(控制,控制视图跳转,给前端传递数据))

数据库(存数据,txt,excel,word)

只会写代码,学好数据库,基本混饭吃!

操作系统,数据结构与算法,当一个不错的程序猿!

离散数学,数字电路,体系结构,编译原理,实战经验,高级程序猿!

1.1 为什么学习数据库

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

1.2 什么是数据库

数据库(DB,DataBase)

概念:数据仓库,软件,安装在操作系统(window、linux、mac…)之上的!SQL,可以存储大量的数据(500万)

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

1.3 数据库分类

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

MySQL、Oracle、SqlServer、DB2、SQLlite

通过表和表之间,行和列之间的关系进行数据的存储:学院信息表、考勤表…

  • 非关系型数据库:{key: value}(NoSQL(Not Only))

Redis、MongDB

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

  • DBMS(数据库管理系统)

数据库的管理软件,能够科学有效的管理我们的数据,维护和获取数据

MySQL,数据库管理系统!

1.4 MySQL简介

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

前世:由瑞典MySQL AB公司

今生:属于Oracle旗下产品

MySQL是最好的RDBMS(Relational Database Management System, 关系型数据库管理系统)应用软件之一,开源的数据库软件!

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

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

版本里5.7稳定,8.0

  • 安装建议:
    1. 尽量不要使用exe,注册表
    2. 尽可能使用压缩包安装

1.5 安装MySQL

  1. 进入https://dev.mysql.com/downloads/file/?id=500439,点击Windows (x86, 64-bit), ZIP Archive下载,无需注册

  2. 解压

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

  4. 添加环境变量:将bin文件目录添加到系统path中D:\Environment\mysql-5.7.33-winx64\bin

  5. 新建配置MySQL配置文件:在MySQL文件夹下新建my.ini文件,将以下除注释外内容放入到ini文件中

    [mysqld]
    # 设置3306端口
    port=3306
    # 设置mysql的安装目录
    basedir=D:\\Environment\\mysql-5.7.33-winx64  # 切记此处一定要用双斜杠\\,单斜杠我这里会出错,不过看别人的教程,有的是单斜杠。自己尝试吧
    # 设置mysql数据库的数据的存放目录
    datadir=D:\\Environment\\mysql-5.7.33-winx64\\Data   # 此处同上
    # 允许最大连接数
    max_connections=200
    # 允许连接失败的次数。这是为了防止有人从该主机试图攻击数据库系统
    max_connect_errors=10
    # 服务端使用的字符集默认为UTF8
    character-set-server=utf8
    # 创建新表时将使用的默认存储引擎
    default-storage-engine=INNODB
    # 默认使用“mysql_native_password”插件认证
    default_authentication_plugin=mysql_native_password
    [mysql]
    # 设置mysql客户端默认字符集
    default-character-set=utf8
    [client]
    # 设置mysql客户端连接服务端时默认使用的端口
    port=3306
    default-character-set=utf8
    
  6. 启动管理员模式下的CMD,运行所有的命令:在windows系统 -> 命令提示符中右键选择以管理员方式运行

  7. 在命令提示符中输入 cd /d D:\Environment\mysql-5.7.33-winx64\bin 进入bin目录

  8. 若已安装mysql可输入 sc delete mysql 清空服务重新安装

  9. 进入bin目录后输入 mysqld -install(安装mysql),安装成功显示Service succeefully installed

  10. 输入 mysqld --initialize --console 初始化数据文件,密码为@localhost:后的,初始化成功会在MySQL目录下出现data目录

  11. 输入 net start mysql 启动MySQL,显示mysql 服务正在启动 .mysql 服务已经启动成功

  12. 用命令 mysql -u root -p 进入mysql管理界面

  13. 初始化密码:alter user user() identified by "123456"; 后显示 Query OK, 0 rows affected (0.00 sec)

  14. 若想修改密码可输入:update mysql.user set authentication_string=password('123456') where user='root' and Host = 'localhost';

  15. 刷新权限: flush privileges;

  16. 推出mysql:exit 之后重启mysql即正常使用:net stop mysql net start mysql

  17. 再次输入 mysql -u root -p 和密码或者直接输入 mysql -u root -p123456 进入mysql

1.6 安装SQLyog

官网:https://sqlyog.en.softonic.com/

带密匙:https://blog.csdn.net/wudinaniya/article/details/78735567

  1. 新建一个数据库school

在这里插入图片描述

  1. 新建一张表stdent:每一个sqlyog的执行,本质就是对应了一个sql,可以在软件中的历史记录中查看

在这里插入图片描述

  1. 查看表:右键student点击打开表,填写信息

1.7 连接数据库

命令行连接

mysql -u root -p123456  --连接数据库
update mysql.user set authentication_string=password('123456') where user='root' and Host = 'localhost';  --修改用户密码
flush privileges;  --刷新权限

--所有的语句都是用;结尾
show databases;  --查看所有的数据库
use school;  --切换数据库
show tables--查看数据库中所有的表
ctrl + C  --强行终止
describe student;  --显示数据库中所有表的信息
create database westos;   --创建一个数据库
exit;   --退出连接
DROP TABLE `school`.`student`;  --删除表

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

数据库 xxx 语言 CRUD 增删改查

DDL:数据库定义语言

DML:数据库操作管理语言

DQL:数据库查询语言

DCL:数据库控制语言

2 操作数据库(了解)

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

MySQL关键字不区分大小写

2.1 操作数据库

  1. 创建数据库
CREATE DATABASE [IF NOT EXISTS] westos;
  1. 删除数据库
DROP DATABASE [IF EXISTS] westos;
  1. 使用数据库
USE `school`;  --tab 键的上面,如果你的表名或者字段名是一个特殊字符,就需要带``
  1. 查看所有的数据库
SHOW DATABASES;

对比:SQLyog的可视化操作

学习思路:对照SQLyog可视化历史记录查看sql;固定的语法或关键字必须要强行记住

2.2 数据库的数据类型

  • 数值

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

    char固定大小的字符串0~255
    varchar(常用)可变字符串(保存常用的变量)0~65535(对应string)
    tinytext微型文本2^8 - 1
    text文本串(保存大文本)2^16 - 1
  • 时间日期 java.util.Date

    dateYYYY-MM-DD日期格式
    timeHH:mm:ss时间格式
    datetime(常用)YYYY-MM-DD HH:mm:ss时间格式
    timestamp1970.1.1到现在的毫秒数!时间戳
    year年份表示
  • null

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

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

Unsigned无符号的整数不能声明为负数
Zerofill零填充不足的位数,使用0前置填充
自增自动在上一条记录的基础上加1,通常用来设计唯一的主键,必须是整数类型,可以自定义设计自增的起始值和步长
非空not NUll必须有值,不赋值就会报错!若不点默认值为null
默认设置默认的值
  • 拓展
/* 每一个表,都必须存在以下五个字段!未来做项目用的,表示一个记录存在的意义
id 主键
`version` 乐观锁
is_delete 伪删除
gmt_create 创建时间
gmt_update 修改时间
*/

2.4 创建数据库(重点)

-- 注意点:使用英文(),表的名称 和 字段 尽量使用 `` 括起来
-- 自增: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 '姓名',
	`pws` VARCHAR(20) NOT NULL DEFAULT '123456' COMMENT '密码',
	`sex` VARCHAR(2) NOT NULL DEFAULT '男' COMMENT '性别',
	`birthday` DATETIME DEFAULT NULL COMMENT '出生日期',
	`adress` 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
事务支持不支持支持
数据行锁定不支持(表锁)支持
外键约束不支持支持
全文索引支持不支持
表空间的大小(内存)较小较大(约为MyISAM2倍)
常规使用操作节约空间,速度较快安全性高,支持事务的处理,多表多用户操作
  • 在物理空间存在的位置

    所有的数据库文件都存在Data目录文件下,一个文件夹就对应一个数据库。本质还是文件的存储! D:\Environment\mysql-5.7.33-winx64\Data

  • MySQL引擎在物理文件上的区别

    • InnoDB在数据库表中只有一个 *.frm文件,以及上级目录下的 ibdata1 文件
    • MyISAM对应的文件
      • *.frm 表结构的定义文件
      • *.MYD 数据文件(data)
      • *.MYI 索引文件(index)
  • 设置数据库表的字符集编码

CHARSET=utf8

如果不设置的话,会是MySQL默认的字符集编码Latin1~(不支持中文!)

也可以在my.ini配置默认的编码

character-set-server=utf8

2.6 修改删除表

  • 修改
-- 修改表: ALTER TABLE 旧表名 RENAME AS 新表名
ALTER TABLE test RENAME AS teacher

-- 增加表的字段: ALTER TABLE 表名 ADD 字段名 列属性
ALTER TABLE teacher ADD age INT(11)

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

-- 删除表的字段: ALTER TABLE 表名 DROP 字段名
ALTER TABLE teacher DROP age1
  • 删除
-- 删除表(如果表存在在删除)
DROP TABLE IF EXISTS teacher 

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

  • 注意点:
    • 用 `` 包裹字段名
    • 注释用 – 和 /**/
    • sql 关键字大小写不敏感,建议写小写
    • 所有的符号全部用英文

3 MySQL数据管理

3.1 外键(了解)

学生的 grade列 引用 年纪表的id(约束)

  • 方式一:在创建表的时候,增加约束(麻烦)
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

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

  • 方式二:创建表成功后,添加外键约束
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 `表` ADD CONSTRAINT `约束名` FOREIGN KEY(`作为外键的字段`) REFERENCES `哪个表`(`哪个字段`)
ALTER TABLE `student` ADD CONSTRAINT `FK_gradeid` FOREIGN KEY(`gradeid`) REFERENCES `grade` (`gradeid`)

以上的操作都是物理外键,数据库级别的外键,不建议使用!(避免数据库过多造成困扰,有可能导致死锁、性能下降)

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

3.2 DML语言(背)

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

DML语言:数据操作语言

  • Insert

  • update

  • delete

3.3 添加Insert

-- 插入语句(添加)
-- 插入多个字段:insert into 表名(`字段名1`, `字段名2`, `字段名3`)values('值1', '值2', '值3', ...)
-- 插入多行:insert into 表明(`字段名1`) values ('值1'), ('值2'), (...)
INSERT INTO `grade` (`gradename`) VALUES('大四')

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

-- 一般写插入语句,我们一定要数据和字段一一对应!
-- 插入多个字段
INSERT INTO `grade` (`gradename`) VALUES ('大二'), ('大一')

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

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

INSERT INTO `student` VALUES (6, '李四', 'aaaa', '男', '2000-01-01', 1, '西安', 'email')
  • 注意事项
    • 字段和字段之间使用英文逗号隔开
    • 字段是可以省略的,但是后面的值必须要一一对应
    • 可以同时插入多条语句,values后面的值需要使用逗号隔开 VALUES (``), (``), (``)

3.4 修改update

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

-- 语法:
UPDATE `表名` SET `列名`='值', [`列名`='值', ...] WHERE id = [];

-- 修改学员名字
UPDATE `student` SET `name`='狂神' WHERE id = 1;
UPDATE `student` SET `name`='狂神' WHERE id <= 3;

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

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

条件: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`='长江七号' WHERE `name` = '狂神' AND `sex` = '男'
  • 注意

    • 列名是数据库的列,尽量带上 ``
    • 条件,筛选的条件,如果没有指定,则会修改所有的列
    • value,是一个具体的值,也可以是一个变量
    • 多个设置的属性国之间,使用英文逗号隔开
    UPDATE `student` SET `name`='狂神', `birthday` = CURRENT_TIME WHERE id = 1;
    

3.5 删除

  • delete命令

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

-- 删除数据(避免这样写,会全部删除)
DELETE FROM `student`
-- 删除数据
DELETE FROM `student` WHERE id = 1;
  • truncate命令

作用:完全清空一个数据库表,表的结构和索引约束不会变

-- 清空student表
TRUNCATE TABLE `student`
  • delete 和 truncate

    • 相同点:都能删除数据,都不会删除表结构

    • 不同:

      • truncate:重新设置自增列,计数器会归零,不会影响事务

      • delete:计数器不会归零

      • delete删除的问题 :重启数据库现象

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

    -- 测试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`
    

PS:学习自狂神说java

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值