写点什么

白嫖!大厂年薪 50W 程序员分享的 MySQL 工作笔记,Github 上都找不到

发布于: 2021 年 06 月 07 日
白嫖!大厂年薪50W程序员分享的MySQL工作笔记,Github上都找不到

今日分享开始啦,请大家多多指教~

1、什么是 MySQL

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

MySQL 所使用的 SQL 语言是用于访问数据库的最常用标准化语言。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。

1.2、连接数据库

命令行连接!

数据库 xxx 语言

DDL 定义

DML 操作

DCL 控制

DQL 查询

1.3 操作数据库

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

创建数据库

CREATE DATABASE IF NOT EXISTS school;如果不存在数据库 school 则创建

删除数据库

DROP DATABASE IF EXISTS hello;如果存在数据库 hello 则删除

使用数据库

--tab 键上面,如果你的表名或者字段名是一个特殊字符,就需要到反引号

USE `SCHOOL`

1.4、数据库列类型

数值

  • tinyint 十分小的数据 1 个字节

  • smalint 较小的数据 2 个字节

  • mediumint 中等大小的数据 3 个字节

  • ==int 标准的整数 4 个字节 java 的 int ==

  • bigint 较大的数据 8 个字节

  • float 浮点数 4 个字节

  • double 浮点数 8 个字节

  • decimal 字符串形式的浮点数 金融计算的时候,一般使用 decimal

字符串

  • char 字符串固定大小的 0~255

==varchar 可变字符串 0~65535 ** 常用的 String==

  • tinytext 微型文本 2^8-1

  • text 文本串 2^16-1 保存大文本

时间日期

  • date YYYY-MM-DD,日期格式

  • time HH:mm:ss 时间格式

  • ==datetime YY-MM-DD HH:mm:ss 最常用的时间格式 ==

timestamp 时间戳 1970.1.1 到现在的毫秒值!

  • year 年份表示

null

  • 没有值,未知

  • 注意,不用使用 NULL 进行运算,跟 NULL 运算结果为 NULL

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

Unsigned:

●无符号的整数

●声明了该列不能声明为负数

zerofill:

●0 填充的

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

autoincrement:

● 通常理解为自增,自动在上一条记录的基础上+1(默认)

●通常来设计唯一的主键~ index,必须是整数类型

非空 NULL not null

●假如设置为 not null,如果不给他赋值,就会报错!

●NULL,如果不填写值,默认就是 null!

默认:

●设置默认的值!

●sex,默认值是男,如果不指定该列的值,则会有默认的值!

拓展:

  • id 主键

  • `version` 乐观锁

  • is_delete 伪删除

  • gmt_create 创建时间

  • gmt_update 修改时间

1.6、创建数据库表

格式

常用命令

1.7、数据表的类型

--关于数据库的引擎

INNODB 默认使用

MYISAM 早些年使用的

常规使用操作:

  • MYISAM 节约空间,速度较快

  • INNODB 安全性高,事务的处理,多表多用户操作

在物理空间存在的位置

所有的数据库文件都存在 data 目录下,一个文件夹就对应一个数据库

本质还是文件的存储!

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

  • INNODB 在数据库表中只有一个*.frm 文件,以及上级目录下的 ibdata1 文件

  • MYISAM 对应文件

*.frm - 表结构的定义文件

*.MYD - 数据文件(data)

*.MYI - 索引文件(index)

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

CHARSET=utf8

不设置的话,会是 MySQL 默认的字符集编码 latin-1(不支持中文)

在 my.ini 中配置默认的编码

character-set-server=utf8

2、修改删除表

2.1、修改

2.2、删除

--删除表(如果表存在则删除)

DROP TABLE IF EXISTS teacher1

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

注意点:

  • `反引号,字段名使用这个括起来

  • 注释-- /* */

  • sql 大小写不敏感,建议写小写

  • 所有的符号都用英文!

3、MySQL 数据管理

3.1、外键

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

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

方式二:创建表成功后,添加外键约束

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

最佳实现

  • 数据库就是单纯的表,只用来存数据,只有行(数据)和列(字段)

  • 我们想使用多张表的数据,想使用外键(程序去实现)

3.2、DML 语言

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

  • INSERT

  • UPDATE

  • DELETE

3.2.1、添加

insert

语法:INsert into 表名(字段名 1,字段名 2,字段名 3,......) values ('值 1','值 2','值 3',...)

注意事项:

1.字段和字段使用英文逗号隔开

2.字段是可以省略的,但是后面的值要一一对应,不能少

3.可以同时插入多条语句,VALUES 后面的值需要使用逗号隔开 VALUES (),(),......

3.2.2、修改

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

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

-- 通过多个条件定位数据

UPDATE `student` SET `name`='长江七号' WHERE `name`='RYGAR' AND `sex`='女'

语法:UPDATE 表名 SET 字段名 1=‘值 1’,字段名 2=‘值 2’,… WHERE 条件

注意:

  • 字段名尽量带上反引号`

  • 条件,筛选的条件,如果没有指定,则会修改所有的列

  • 值可以是一个具体的值,也可以是一个变量

UPDATE `student` SET `name`='孙悟空',`password`='sunwukong123',`birthday`=NOW() WHERE `name`='长江七号' AND `password`='lisi123'

这个 now()和 current_time 都是当前时间

3.2.3、删除

delete 命令

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

TRUNCATE 命令

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

--清空 student 表

--语法: TRUNCATE 表名

TRUNCATE `student`

DELETE 和 TRUNCATE 的区别

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

不同点:

1.TRUNCATE 重新设置自增列,计数器会归零

2.TRUNCATE 不会影响事务

DELETE 删除的问题,重启数据库,现象(MySQL5.0 版本有这些现象,但 MySQL8.0 版本修复了这些问题)

  • INNODB 自增列会从 1 开始(存在内存当中的,断点即失)

  • MYISAM 继续从上一个自增量开始(存在文件中的,不会丢失)

3.2.4、DQL 查询数据(重点)

DQL(Data Query Language:数据查询语言)

  • 所有的查询操作都用它 SELECT

  • 简单的查询,复杂的查询它都能做

  • 数据库中最核心的语言,最重要的语句

  • 使用频率最高的语句

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

去重 DISTINCT

作用:去除 SELECT 查询出来的结果中重复的数据,只显示一条

-- 查询一下哪些同学参加了考试,成绩

SELECT * FROM result -- 查询全部的考试成绩

SELECT `StudentNO` FROM result --查询有哪些同学参加了考试

发现有重复数据,去重使用 DISTINCT 关键词

SELECT DISTINCT `studentNo` FROM result -- 发现重复数据,去重

查看 MySQL 版本

SELECT version();

数据库的列(表达式)


数据库中的表达式:文本值,列,null,函数,计算表达式,系统变量…

select 表达式 from 表

3.2.5、where 条件子句

作用:检索数据中符合条件的值

搜索的条件由一个或者多个表达式组成! 结果为布尔值

逻辑运算符

| 运算符 | 语法 | 描述 |

|–|--|–|

| and && | a and b / a&&b | 逻辑与,两个都为真,结果为真 |

| or || | a or b / a || b | 逻辑或,其中一个为真,结果为真 |

| Not ! | not a / !a | 逻辑非,真为假,假为真! |

尽量使用英文字母


查询出了 1000 号学生的成绩


模糊查询:比较运算符

查询姓刘的学生

-- LIKE 关键词,%(代表 0 到任意个字符) _(一个字符)

SELECT `StudentNo`,`StudentName` FROM `student` WHERE `StudentName` LIKE '刘 %';

查询姓刘的学生,姓名为两个字的学生

SELECT `StudentNo`,`StudentName` FROM `student` WHERE `StudentName` LIKE '刘_';

查询姓刘的学生,姓名为三个字的学生

SELECT `StudentNO`,`StudentName` FROM `student` WHERE `StudentName` LIKE '刘__';

查询名字包含"嘉"字的学生

SELECT `StudentNo`,`StudentName` FROM `student` WHERE `StudentName` LIKE '&嘉 &';

==IN(具体的一个或者多个值)==关键字查询 1001,1003,1003 号学生

SELECT `StudentNo`,`StudentName` FROM `student` WHERE `StudentNo` IN (1001,1002,1003);

查询在安徽的学生和在河南洛阳的学生


查询有出生日期的学生,不为空

SELECT `StudentNo`,`StudentName` FROM `student` WHERE `BornDate` IS NOT NULL;

查询没有出生日期的学生(为空)

SELECT `StudentNo`,`StudentName` FROM `student` WHERE `BronDate` IS NULL;

今日份分享已结束,请大家多多包涵和指点!

用户头像

还未添加个人签名 2021.04.20 加入

Java工具与相关资料获取等WX: pfx950924(备注来源)

评论

发布
暂无评论
白嫖!大厂年薪50W程序员分享的MySQL工作笔记,Github上都找不到