MySQL复习

news2024/11/29 7:41:30

文章目录

  • 1、操作数据库
    • 1.1、操作数据库
    • 1.2、数据库的数据类型
    • 1.3、数据库的字段属性
    • 1.4、创建数据表
    • 1.5、MyISAM和InnoDB
    • 1.6、修改删除表
  • 2、MySQL数据管理
    • 2.1、外键
    • 2.2、DML语言(全部记住)
    • 2.3、添加
    • 2.4、修改
    • 2.5、删除
  • 3、DQL查询数据
    • 3.1、DQL
    • 3.2、查询指定的字段
    • 3.3、去重distinct
    • 3.4、数据库的列(表达式)
    • 3.5、Where条件子句
    • 3.6、模糊查询
    • 3.7、联表查询
    • 3.8、自连接
    • 3.9、分页和排序
    • 3.10、子查询和嵌套查询
    • 3.11、MySQL常用函数
  • 4、MySql的事务
    • 4.1、什么是事务
    • 4.2、事务常用命令
  • 5、索引
    • 5.1、索引的分类
    • 5.2、索引原则
  • 6、三大范式
    • 6.1、第一范式
    • 6.2、第二范式
    • 6.3、第三范式

1、操作数据库


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

1.1、操作数据库

操作命令
创建数据库create database [if not exists] 数据库名称;
删除数据库drop database [if exists] 数据库名称;
使用数据库use 数据库名称;
查看数据库show databases;

1.2、数据库的数据类型


数值

类型大小
tinyint十分小的数据 1个字节
smallint较小的数据 2个字节
mediumint中等大小的数据 3个字节
int标准的整数 4个字节
bigint较大的数据 8个字节
float浮点数 4个字节
double浮点型 8个字节
decimal字符串形式的浮点数

字符串

类型大小
char字符串固定大小 0-255
varchar可变字符串 0-65535 (对应java 里面的 String)
tinytext微型文本 2^8 - 1
text文本串 2^16 - 1 保存大文本

时间日期

java.util.Data

类型大小
dataYYYY-MM-DD , 日期格式
timeHH::mm:ss,时间格式
datatimeYYYY-MM-DD HH::mm:ss 最常用的
timestamp1970.1.1 到现在的毫秒数
year年份表示

null

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

1.3、数据库的字段属性


Unsigned:

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

zerofill:

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

autoincrement:

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

非空 not null:

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

默认:

  • 设置默认的值!
  • sex,默认值为男,如果不指定该列的值,就会自动填入默认值

在这里插入图片描述

1.4、创建数据表


create table if not EXISTS `student`(
	 `id` int(4) not null auto_increment COMMENT '学号',
	 `name` varchar(30) not null DEFAULT '匿名' COMMENT '姓名',
	 `pwd` varchar(30) 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;

show create database lianxi;  -- 查看创建数据库的语句

show create table student; -- 查看创建数据库表的语句

desc student; -- 查看表的具体的结构

1.5、MyISAM和InnoDB


关于数据库引擎

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

常规使用操作:

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

1.6、修改删除表


alter table student rename student1; -- 修改表名
alter table student1 add age int(11); -- 增加列属性
alter table student1 MODIFY age varchar(11); -- 修改表的字段(修改约束)
alter table student1 change age age1 int(1); -- 字段重命名
alter table student1 drop age1;  -- 删除表的字段
drop table if exists student1; -- 删除表

2、MySQL数据管理


2.1、外键


-- 班级表
create table if not EXISTS `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 '姓名',
	 `pwd` varchar(30) 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(10) not null COMMENT '学生的年级',
		PRIMARY key (`id`),
		key `FK_gradeid` (`gradeid`),
		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`)

       反正就按照这个记住,在学生这里的gradeid和grade中的grade有外键关系,那么我们创建student的时候,gradeid必须要在grade中有,然后删除grade中的时候,如果有student用的这个gradeid的话,就不能删除

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

最佳实践:

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

2.2、DML语言(全部记住)

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

DML语言:数据库操作语言

  1. 添加
  2. 修改
  3. 删除

2.3、添加

在这里插入图片描述

  • 注意事项
  1. 字段和字段之间使用英文逗号隔开
  2. 字段是可以省略的,但是后面的值必须要一一对应
  3. 可以同时插入多条数据,VALUES后面的值,需要使用,隔开即可

2.4、修改

在这里插入图片描述

操作符含义范围结果
=等于5=6false
<> 或 !=不等于5<>6true
<
>
<=
>=
between … and …在某个范围里面[2,5]
and我和你&&5> 1 and 1>2false
or我或你 ||5>1 or 1>2true

注意

在这里插入图片描述

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

2.5、删除

在这里插入图片描述

这个之前不知道:Truncate作用:清空表中的数据,表的结构和索引约束不会变

delete 和 truncate 区别

  • 相同点:都能删除数据,都不会删除表的结构
  • 不同:
    • Truncate 重新设置 自增列 ,计数器会归零
    • Truncate 不会影响事务

了解即可:Delete删除后,重启数据库的现象

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

3、DQL查询数据

3.1、DQL

(Data Query LANGUAGE):数据查询语言

  • 所有的查询操作都用它 Select
  • 简单的查询,复杂的查询它都能做
  • 数据库中最核心的语言,最重要的语句
  • 使用频率最高的语句

3.2、查询指定的字段

在这里插入图片描述

3.3、去重distinct

作用:取出select查询出来的结果中重复的数据,只显示一条
在这里插入图片描述

3.4、数据库的列(表达式)

在这里插入图片描述
数据库中的表达式:文本值、列、null、函数、计算表达式、系统变量…

3.5、Where条件子句

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

搜索的条件由一个或多个表达式组成,结果是布尔值
在这里插入图片描述
在这里插入图片描述

3.6、模糊查询

运算符语法描述
is nulla is null如果操作符为null,结果为真
is not nulla is not null如果操作符不为mull,结果为真
betweena between b and c若a在b之间,则结果为真
likea like bSQL匹配,如果a匹配b,则结果为真
ina in (a1, a2…)假设a在a1,或a2…其中的某一个值中,结果为真

在这里插入图片描述
在这里插入图片描述

3.7、联表查询

在这里插入图片描述
在这里插入图片描述

举个例子

在这里插入图片描述
在这里插入图片描述

-- 左连接
select a.id, a.name from tablea as a left JOIN tableb as b on a.id = b.id;

-- 右连接
select b.id, b.name from tablea as a right JOIN tableb as b on a.id = b.id;

-- 内连接
select a.id, a.name from tablea a INNER JOIN tableb b on a.id = b.id;

-- 特殊左连接
select a.id, a.name from tablea as a left JOIN tableb b on a.id = b.id where b.id is null;

-- 特殊右连接
select b.id, b.name from tablea a right JOIN tableb b on a.id = b.id where a.id is null;

-- 全连接
select a.id, a.name from tablea a left join tableb b on a.id = b.id union 
select b.id, b.name from tablea a right join tableb b on a.id = b.id;

-- 显示两个表独有的数据
select a.id, a.name from tablea as a left JOIN tableb b on a.id = b.id where b.id is null union
select b.id, b.name from tablea a right JOIN tableb b on a.id = b.id where a.id is null;

在这里插入图片描述

3.8、自连接

自己的表和自己的表连接,核心:一张表拆为两张一样的表

在这里插入图片描述

在这里插入图片描述

也就是说相当于我们用一张表存下了一个上下级关系,如果要查上级的话,where pid = 1,就可以查出来了,如果查对应的下级的话,根据上级的categoryid = pid去查找下级即可

3.9、分页和排序

排序

在这里插入图片描述

分页

在这里插入图片描述

3.10、子查询和嵌套查询


本质:在where语句中嵌套一个子查询

在这里插入图片描述
在这里插入图片描述

链表查询和子查询都可以使用,看你怎么搞了

3.11、MySQL常用函数


函数名称作用
ABS绝对值
SQRT求二次方根
MOD求余
LENGTH计算字符串长度,返回字符串字节长度
LOWER将字符串中的字母变成小写
UPPER将字符串中的字母变成大写
SUBSTRING截取字符串,返回从指定位置开始的指定长度的字符串
REVERSE字符串反转
CURDATE / CURRENT_DATE返回当前系统的日期值
CURTIME / CURRENT_TIME返回当前系统的时间值
NOW / SYSDATE返回当前系统的日期和时间值
MONTH获取指定日期中的月份
YEAR获取年份
MAX查询指定列最大值
MIN查询指定列最小值
COUNT统计查询结果的行数
SUM求和
AVG求平均值,返回指定列数据的平均值

4、MySql的事务

4.1、什么是事务

要么都成功,要么都失败,将一组SQL放在一个批次中去执行

事务原则:ACID原则,原子性、一致性、隔离性、持久性 ;(脏读、幻读)

  • 原子性:是指一个事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生

  • 一致性:事务前后数据的完整性必须保持一致

  • 隔离性:事务的隔离性是多个用户并发访问的时候,数据库为每一个用户开启的事务,不能被其他事务的数据所干扰,多个并发事务之间要相互隔离

  • 持久性:指一个事务一旦被提交,它对数据库中数据就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响(事务一旦提交就不可逆了)

脏读、不可重复读和幻读

  • 脏读:指一个事务读取了另外一个事务未提交的数据
    在这里插入图片描述
  • 不可重复读:在一个事务中读取表中的某一行数据,多次读取结果不同(这个不一定是错的,知识某些场合不对)
    在这里插入图片描述
  • 幻读:指的是一个事务读取到了别的事务插入的数据,导致前后数据不一致

4.2、事务常用命令

命令作用
set autocommit = 0;关闭事务自动提交
set autocommit = 1;开启事务自动提交(默认开启)
start transaction标记一个事务的开始,从这个之后的sql都在同一个事务下
commit手动提交
rollback回滚到原来的样子
savepoint 保存点名设置一个事务的保存点,这个可以和rollback联合使用,当事务失败的时候,rollback to savepoint 保存点名 即可
RELEASE SAVEPOINT ·保存点名·删除保存点

在这里插入图片描述

案例

在这里插入图片描述

5、索引

       MySQL官方对索引的定义为:索引(index)是帮助MySql高效获取数据的数据结构。提取句子主干,就可以得到索引的本质:索引是数据结构

5.1、索引的分类

在一个表中,主键索引只能有一个,唯一索引可以有多个

  • 主键索引(PRIMAY KEY)
    • 唯一的标识,主键不可重复,只能有一个列作为主键
  • 唯一索引(UNION KEY)
    • 避免重复的列出现,唯一索引可以重复,多个列都可以标识位 唯一索引
  • 常规索引(KEY/INDEX)
    • 默认的,index。key关键字来设置
  • 全文索引(FULLTEXT)
    • 在特点的数据库引擎下才有,MyISAM
    • 快速定位数据

5.2、索引原则

  • 索引不是越多越好
  • 不要对进程变动数据加索引
  • 小数据量的表不需要加索引
  • 索引一般加在常用来查询的字段上

索引的数据结构
Hash类型的索引
Btree:InnoDB的默认数据结构

6、三大范式

为什么需要数据规范化

  • 信息重复
  • 更新异常
  • 插入异常
    • 无法正常显示信息
  • 删除异常
    • 丢失有效的信息

6.1、第一范式


要求数据库表的每一列都是不可分割的原子数据项

在这里插入图片描述

6.2、第二范式


满足第一范式,每张表只描述一件事情

在这里插入图片描述

6.3、第三范式


满足第一、第二范式,第三范式需要确保数据表中的每一列数据和主键直接相关,而不能间接相关

在这里插入图片描述


规范性 和 性能的问题
    关联查询的表不得超过三张

  • 考虑商业化的需求和目标(成本、用户体验),数据库的性能更加重要
  • 在规范性能的问题的时候,需要适当考虑一下规范性
  • 故意给某些表增加一些冗余的字段(从多表查询变为单表查询)
  • 故意增加一些计算列(从大数据量降低为小数据量的查询;增加索引)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/590056.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

EMPIRE: LUPINONE实战演练

文章目录 EMPIRE: LUPINONE实战演练一、前期准备1、相关信息 二、信息收集1、端口扫描2、访问网站3、查看源码4、dirsearch扫描目录5、访问robots文件6、访问myfiles文件7、模糊测试8、访问秘密文件9、查找秘钥10、查看秘钥11、解码12、解密13、远程连接 三、提权1、查找flag2、…

Unity---委托与事件

目录 1.委托和事件在使用上的区别是什么&#xff1f; 2. delegate委托 2.1示意图 2.2 DelegetTest.cs 2.3 Deleget_A.cs 2.4 Deleget_B.cs 2.5 运行unity. 点击按键 A 2.6 点击按键 B 3.Event 事件 3.1单个通知 3.1.1示意图 3.1.2 Event_Test.cs 3.1.3 Event_A.cs 3…

专家警告AI可能会导致人类灭绝

人工智能可能导致人类灭绝&#xff0c;包括 OpenAI 和 Google Deepmind 负责人在内的专家警告说 数十人支持在人工智能安全中心 的网页上发表的声明。 它写道&#xff1a;“减轻人工智能灭绝的风险应该与其他社会规模的风险&#xff08;如流行病和核战争&#xff09;一起成为全…

Spring(二)获取bean和依赖注入

一、获取bean的三种方式&#xff1a; 1.根据bean的id获取&#xff1a; Student studentOne (Student) ioc.getBean("studentOne"); 2.获取bean所需要的类型的class对象&#xff1a; Student student ioc.getBean(Student.class); 我们运行之后如下所示&#xff1…

为kong网关添加限流插件

限流用于控制发送到上游服务的请求速率。 它可用于防止 DoS 攻击、限制网络抓取和其他形式的过度使用。 如果没有速率限制&#xff0c;客户可以无限制地访问您的上游服务&#xff0c;这可能会对可用性产生负面影响。 一、全局范围内的限流 1、启用限流 [rootmin ~]# curl -i…

AI落地:儿童节贺卡

昨天有个朋友Lisa找到我&#xff0c;她是幼儿园的老师&#xff0c;看到我最近搞了个爱落地星球&#xff0c;在研究各行各业AI落地的事情&#xff0c;问我能不能用AI帮她写一百多张贺卡。 说起来写贺卡&#xff0c;我只会写“节日快乐”。现在有了ChatGPT&#xff0c;那就大不一…

十六、多线程(中)

文章目录 一、线程互斥&#xff08;一&#xff09;四个概念1.临界资源2.临界区3.互斥特性4.线程互斥5.原子性 二、互斥&#xff08;一&#xff09;在执行语句的任何地方&#xff0c;线程可能被切换走&#xff08;二&#xff09;切换会保存上下文&#xff08;三&#xff09;抢票…

用HTML、CSS和JavaScript实现鼠标可交互的3D太阳和月亮切换效果

部分数据来源&#xff1a;ChatGPT 引言 太阳和月亮对于我们来说是一种常见的对比&#xff0c;这篇文章将介绍一个使用HTML、CSS和JavaScript创建的网页场景&#xff0c;能够把太阳和月亮切换展示给用户。这个场景能够让用户使用鼠标和滚轮与场景互动&#xff0c;带来更多的趣…

解锁Qt QListWidget的全部潜力——用最佳实践和技巧赢得用户的喜爱和赞誉!

文章目录 前言一、属性和方法添加列表项获取当前选中的列表项删除列表项列表显示模式交替背景色 二、信号与槽选中的行数变化item被点击 三、解决icon图标模式下图标不对称的问题1、设置属性2、面向结果的手动换行 总结 前言 在现代的GUI应用程序中&#xff0c;列表框是必不可…

什么是千兆光模块和万兆光模块?它们有什么区别?

众所周知千兆光模块和万兆光模块的主区别在于它们的传输速率不一样&#xff0c;那你还知道千兆光模块和万兆光模块的其他区别吗&#xff1f;接下来海翎光电的小编将对千兆光模块和万兆光模块的区别进行详细解析。 什么是千兆光模块&#xff1f; 千兆光模块即传输速率为1000Mbps…

Java之路:构建坚实基础,系统学习Java技术的终极指南

无论是初学者还是有经验的专业人士&#xff0c;在学习一门新的IT技术时&#xff0c;都需要采取一种系统性的学习方法。作为一名Java技术er&#xff0c;下面我将介绍我是如何系统的学习Java技术的。 一、Java技术介绍 Java是一种广泛应用于软件开发的高级编程语言&#xff0c;…

数据链路层:点对点协议PPP

数据链路层&#xff1a;点对点协议PPP 笔记来源&#xff1a; 湖科大教书匠&#xff1a;点对点协议PPP 声明&#xff1a;该学习笔记来自湖科大教书匠&#xff0c;笔记仅做学习参考 数据链路层只负责直接相连的两个结点之间的通信 PPP是点对点数据链路层协议 用户通过ISP接入因特…

sklearn实现余弦相似度计算

from sklearn.metrics.pairwise import cosine_similarity cosine_similarity() 这个函数的输入是 n 个长度相同的 list 或 array 函数的处理是计算这 n 个 list 两两之间的余弦相似性 最后生成的是一个 n*n 的相似性矩阵s&#xff0c;s[i][j] 表示输入中第 i 个和第 j 个元…

如何在 Ubuntu Linux 上使用 SNAP 安装 Docker?

Docker 是一种开源的容器化平台&#xff0c;它允许开发人员将应用程序和其依赖项打包到一个可移植的容器中&#xff0c;以便在不同的环境中运行。在 Ubuntu Linux 上&#xff0c;我们可以使用 SNAP&#xff08;一种软件包管理系统&#xff09;来安装和管理 Docker。本文将详细介…

ProtoBuf 语法(一)

系列文章 ProtoBuf 语法&#xff08;二&#xff09; ProtoBuf 语法&#xff08;三&#xff09; 文章目录 前言一、字段规则二、消息类型的定义与使用2.1 定义2.2 使用 三、enum 类型3.1 定义规则3.2 注意事项 四、any 类型4.1 类型说明4.2 类型使用 五、oneof 类型六、map 类型…

HACKER KID: 1.0.1实战演练

文章目录 HACKER KID: 1.0.1实战演练一、前期准备1、相关信息 二、信息收集1、端口扫描2、访问网站3、扫描目录4、查看源码5、请求参数6、burpsuite批量请求7、编辑hosts文件8、DNS区域传输9、编辑hosts10、访问网站11、注册账号12、burpsuite抓包13、XML注入14、解密15、登录网…

供应链对于小程序、app等平台能带来什么好处?

供应链对于小程序、 app等平台的重要性不言而喻&#xff0c;这是一个企业生存的根本&#xff0c;只有保证了供应链&#xff0c;才能获得足够的产品和服务&#xff0c;保证企业能够长期稳定发展。因此很多企业都开始重视供应链&#xff0c;同时也在为之努力。 那么&#xff0c;…

gradle环境的spring boot搭建

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

tensorrt yolov7 推理

参考 源码修改如下&#xff1a;如果将源代码cpp/norm/yolo.hpp修改为自己训练的数据时修改如下&#xff1a; class YOLO{ const char* INPUT_BLOB_NAME "images"; const char* OUTPUT_BLOB_NAME "output"; }根据自己转换onnx模型采用netron打开查看 输入…

(2022,MoCA)Few-shot 图像生成的原型记忆(Prototype Memory)和注意力机制

Prototype Memory and Attention Mechanisms for Few Shot Image Generation 公众号&#xff1a;EDPJ 目录 0. 摘要 1. 简介 2. 相关工作 3. 方法 3.1 原型记忆学习 3.2 记忆概念注意力&#xff08;MEMORY CONCEPT ATTENTION&#xff0c;MoCA&#xff09; 3.3 空间上…