MySQL数据库随笔

2023-05-16

提示:本文章仅供个人学习使用,如有错误请及时私信通知

文章目录

  • 前言
  • 一、MySQL的基本操作命令
    • (1)连接数据库
    • (2)修改用户密码
    • (3)刷新权限
    • (4)查看所有数据库
    • (5)查看数据库中所有的表
    • (6)更改当前查看的数据库
    • (7)显示数据库中所有表的信息
  • 二、MySQL的注释
    • (1)单行注释
    • (2)多行注释
  • 三、数据库的列类型
    • (1)数值
    • (2)字符串
    • (3)日期时间
    • (4)其他
  • 四、数据库的字段属性
    • (1)unsigned
    • (2)autoincrease
    • (3)zerofill
    • (4)not null
    • (5)default
  • 五、数据库的常用命令
    • (1)显示创建数据库的sql语句
    • (2)显示创建表的sql语句
    • (3)显示表的结构
    • (4)设置数据表的字符编码
    • (5)修改、删除表
      • 1)修改表名
      • 2)增加表的字段
      • 3)修改表的字段
      • 4)删除表
      • 5)删除表的字段
  • 六、数据表的类型
  • 七、MySQL数据管理
    • (1)插入数据
    • (2)更新数据
    • (3)删除数据
  • 八、DQL查询数据
    • (1)select查询
    • (2)去重
    • (3)数据库表达式
  • 九、where子句和逻辑表达式
    • (1)逻辑运算符
    • (2)where语句的应用
  • 十、模糊查询
    • (1)like模糊查询
    • (2)in模糊查询
  • 十一、joinOn联表查询
    • (1)左连接查询
    • (2)右连接查询
    • (3)内连接查询
    • (4)三者的区别
  • 十二、分页和排序
    • (1)排序
    • (2)分页
  • 十三、子查询
  • 十四、MySQL的常用函数
    • (1)常用函数
      • 1)数学函数
    • 2)字符串函数
      • 3)日期和时间函数
    • (2)聚合函数
      • 1)分组和过滤
  • 十五、数据库级别的MD5加密
    • (1)什么是MD5加密
  • 十六、事务
    • (1)事务执行的四个基本特性
    • (2)脏读、幻读、不可重复读
  • 十七、索引
    • (1)索引的分类;
  • 十八、插入一百万条数据
  • 十九、数据库的三大范式
    • (1)第一范式-1nf
    • (2)第二范式-2nf
    • (3)第三范式-3nf
  • 总结


前言

MySQL数据库作为一种主流的数据库管理系统,在我们日常的编程生活中不可或缺。我们在没有接触到这个系统之前,总是苦于Java的原生链接数据库的烦恼,以及对数据库进行IDUS操作的繁杂性。而MySQL则为我们解决了这一苦恼。接下来我就要对MySQL进行深入的学习与了解,争取能在一段时间后能对各种数据的查询了如指掌。

一、MySQL的基本操作命令

(1)连接数据库

连接到数据库一般都是通过命令行的方式进行操作登录,相比可视化操作来说一般都是运用在Linux系统中

示例代码
mysql -u root -p 123

(2)修改用户密码

在我们觉得之前所设置的密码过于复杂或难以记住的时候,我们就可以使用下面的代码来修改数据库的登录密码

示例代码
update mysql.user set authentication_string=password('123') where user='root' and host='127.0.0.1';

(3)刷新权限

示例代码

flush privileges;

(4)查看所有数据库

通过该代码在命令行查看已在内存中的所有数据库

示例代码
show databases;

(5)查看数据库中所有的表

在选择某数据库后我们可以使用指令来查看数据库中所有的表

示例代码
show tables;

(6)更改当前查看的数据库

比如说我当前在1号数据库中,而我想要切换到2号数据库中

示例代码
use database2

(7)显示数据库中所有表的信息

当我们使用了这个数据库后,我们根据任务的需要所以需要查看表中的所有数据,此时我们有两种方法来查看所有的数据,第一种是通过sql查询语句,第二种是通过命令语句,这两种方法都可以来查看表中的所有数据,依据个人喜好来使用就好。

示例代码(1)-sql
select * from table_name

示例代码(2)-命令语句

describe table_name

二、MySQL的注释

(1)单行注释

示例代码
--在这里插入sql代码

(2)多行注释

示例代码
/*在这里插入sql代码
*在这里插入sql代码
*在这里插入sql代码
*/

三、数据库的列类型

(1)数值

1)tinyint 十分小的数据 1字节

2)smallint 比较校的数据 2字节

3)mediumint 中等大小的数据 3字节

4)int 正常大小的数据 4字节 常用类型

5)bigint 较大的数据 8字节

6)floa 浮点类型(单精度) 4字节

7)double 浮点类型(双精度)8字节

8)decimal 字符串型的浮点数

(2)字符串

1)char 不可变长度 ,长度固定 0-255

2)varchar 可变长度 0-65535 常用string

3)tinychar 微型文本 2^8-1

(3)日期时间

1)data YYYY-MM-DD

2)time HH:mm:ss

3)datatime YYYY-MM-DD HH:mm:ss 最常用的时间格式

4)timestamp 时间戳

5)year

(4)其他

1)null 一般为数据库的表种没有内容的时候填写的类型

四、数据库的字段属性

(1)unsigned

无符号整数,标明改列不能为负数

(2)autoincrease

自动增加1或用户设置的增长梯度,适用于唯一主键

(3)zerofill

0填充,当需要填充数据的时候使用这个就能将要填充的地方填上0

(4)not null

不为空,表明该列的数据不能为空

(5)default

默认值,表明该列的默认值一旦不更改就是根据设置的默认值显示

五、数据库的常用命令

(1)显示创建数据库的sql语句

示例代码

show create database `database_name`

(2)显示创建表的sql语句

示例代码

show create table `table_name`

(3)显示表的结构

示例代码

desc table_name

(4)设置数据表的字符编码

示例代码

charset=utf8 

(5)修改、删除表

1)修改表名

示例代码

alter table table_name rename as new_table_name;

2)增加表的字段

示例代码

alter table table_name add need_name TYPE();

3)修改表的字段

示例代码

alter table table_name modify need_name TYPE();--修改约束,不能修改字段名字

alter table table_name change need_name change_name TYPE();--修改字段名

4)删除表

示例代码

drop table table_name

5)删除表的字段

示例代码

alter table able_name drop need_name

注意事项:可以在删除表的前面添加一个if exists

六、数据表的类型

myisaminnodb
事务支持不支持支持
数据行锁定不支持支持
外键约束不支持支持
全文引索支持不支持
表空间大小较小较大

七、MySQL数据管理

(1)插入数据

往表中插入一条或多条数据

示例代码
insert into table_name(value1,value2,...,valuen) value(a,b,...,n)--插入一行数据

insert into table_name(value1,value2,...,valuen) value(a,b,...,n),...,(a,b,...,n)--插入多行数据

(2)更新数据

更新表种的数据

示例代码
--更新一个值
update table_name set colnum_name=value where condition=...[条件]
--更新多个值
update table_name set colnum1_name=value1,...,colnumn_name=valuen 
where condition=...[条件]
操作符含义范围结果
=等于5=6false
<>或!=不等于5!=6或5<>6true
>大于5>6false
<小于5<6true
<=小于等于5<=5true
>=大于等于5>=5true
between and处于一个范围内
and
or

(3)删除数据

示例代码

#第一种删除方式
delete from table_name where [条件]
#第二种删除方式(清空表)
truncate table_name

两种方式的区别

相同点:都能删除数据,且都会保留表结构

不同点:truncate能让自增列的计数器归零且不会影响事务

八、DQL查询数据

(1)select查询

该语句是所有查询语句的开始,不论是简单查询还说复杂查询

示例代码
#简单查询
select * from table_name where [条件]
#复杂查询
select value_name,value_name from table_a a left join table_b b where [条件]

(2)去重

当我们查询一个数据的时候难免会有重复的数据,而此时我们可以使用以下代码来进行去重

示例代码
select *from table_name #查询表中的全部数据
select * from table_name where [条件] #根据某条件来进行查询
select [] from table_name where [条件] #根据某条件来进行查询报表中的某值
#但是前面的三种都会出现重复的数据,而下面的这一种则会去重
select distinct [] from table_name where [条件]

(3)数据库表达式

有时候在数据库里面不一定全都是sql类型的语句也有使用函数,表达式,变量的形式展示出来。就入下面的代码所示

示例代码
#查看系统版本
select version();
#使用select语句来进行计算
select 123*56-12 as 计算结果
#使用select来查询变量
select @@auto_increment_increment #查询自增的步长
#当我们需要将数据库中的某一行的数据全部加1或者其他数值
select []+1 from table_name where [条件];

九、where子句和逻辑表达式

(1)逻辑运算符

运算符语法描述
&& anda and, b a&&b逻辑与 两个都为真 结果为真
11 ora or b, a11b逻辑或 其中一个为真 结果为真
!notnot a, !a逻辑非 真为假、假为真

(2)where语句的应用

使用where语句来增加查询条件,这样查询出来的结果就会有个初步的筛选。

示例代码
#逻辑与条件查询
select [] from table_name
where [条件A] =[条件值] and  [条件A]=[条件值]
或者
where [条件A] between [条件值1] and [条件值2] 
#逻辑或查询
select [] from table_name
where [条件A] =[条件值] or  [条件A]=[条件值]
或者
where [条件A] between [条件值1] or [条件值2] 
#逻辑非查询
select [] from table_name 
where [条件]!=[条件值]

十、模糊查询

运算符语法描述
is nulla is null如果操作符为空则结果为真
is not nulla is not null如果操作符不为空则结果为真
betweena between a and c若a在b和c之间则结果为真
likea like bSQL匹配如果a匹配到b则结果为真
ina in (a1,a2…an)如果a在a1~a2这个集合中,则结果为真

(1)like模糊查询

示例代码

##有一个学生表,其中的属性有学生id,学生名字
#比如说需求要求查找名字以孙开头的所有名字
select student_name from student_table where student_name like '孙%'
#上面的这种方法可以查询孙以后0~n个字符的名字
#但是如果需要只查询孙字后面只带一个字的就不能使用%而是使用_
select student_name from student_table where student_name like '孙_'
#当然如果要指定只有两个字的那么就以此类推,需要指定几个就用几个_
#而需要查询比如书名或者什么作品名只知道中间名的时候,那么只需要将_或者%的位置放到关键字的前面或者后面即可
select gName  from  galgame where gName like '%千恋万花%'

(2)in模糊查询

示例代码

#当我们所需要查询的值是在某一个范围的时候我们就可以使用in关键字来进行模糊查询
select student_id from studen_table where student_id in(101,102,103)

十一、joinOn联表查询

(1)左连接查询

示例代码

SELECT a.*,b.role_name FROM sch_colleges_process_config a LEFT JOIN sch_colleges_process_audit_config b ON a.`sch_config_id`=b.`sch_config_id` WHERE school_id=#{school_id}</select>
    

(2)右连接查询

示例代码

SELECT a.*,b.role_name FROM sch_colleges_process_config a RIGHT JOIN sch_colleges_process_audit_config b ON a.`sch_config_id`=b.`sch_config_id` WHERE school_id=#{school_id}</select>
    

(3)内连接查询

示例代码

SELECT process_name,audit_level,`role_name` FROM sch_colleges_process_config a 
INNER JOIN sch_colleges_process_audit_config b ON a.`sch_config_id`=b.`sch_config_id``sch_colleges_process_config``sch_colleges_process_config`

(4)三者的区别

示例代码

查询语句描述
内连接查询只有当两张表都有同一个数据的时候,才会查询出结果
左连接查询比对判断条件如果条件不成立,则任然会显示出左表的数据
右连接查询比对判断条件如果条件不成立,则任然会显示出右表的数据

十二、分页和排序

(1)排序

关键字:order by 。升序关键字:ASC ,降序关键字:DESC

示例代码
#通过升序排序将数据查询出来
select * from students 
where student_score >60
order by student_score ASC

#通过降序排序将数据查询出来和升序一样只不过是将ASC换成DESC
select * from students 
where student_score >20
order by student_score DESC

(2)分页

语法:limit 起始值 页面大小

分页分n页的规律 limit (n-1)*页面大小

示例代码
SELECT a.*,b.role_name FROM sch_colleges_process_config a
LEFT JOIN sch_colleges_process_audit_config b
ON a.`sch_config_id`=b.`sch_config_id` AND school_id=1
LIMIT 1,2 
#从第一页开始,每页两条数据

十三、子查询

查询分数大于80分的学生学号和姓名,并且查出高等数学的编号

示例代码

在这里插入图片描述

十四、MySQL的常用函数

(1)常用函数

1)数学函数

示例代码

#绝对值
select abs();
#向下取整
select FLOOR();
#向上取整
selec CEILING();

2)字符串函数

示例代码

#查询字符串的长度
select LENGTH()
#替换字符串函数
SELECT INSERT('Football',2,4,'Play') AS col1
#转换成大写
select UPPER()
#转换成小写
select lower()

3)日期和时间函数

示例代码

#获取系统当前日期
select CURRENT_DATE()
#获取系统当前时间
select CURRENT_TIME()
#获取本地时间
select LOCALTIME()
#获取当前时间
select NOW()


(2)聚合函数

函数名描述使用方法
count计数select count(列名)、select count(*)、select count(1)
sum求和select student_name,sum(student_score) as ‘总成绩’ from student
max最大值
min最小值
avg平均值

三种count的区别

1、指定列名,但是在计数时忽略掉列中的null值

2、计数所有的行数,不会忽略掉null值

3、计数所有的行数,不会忽略掉null值,和上一种*方法几乎没有区别

1)分组和过滤

示例代码图

在这里插入图片描述

十五、数据库级别的MD5加密

(1)什么是MD5加密

MD5是一种被广泛使用的密码散列函数,可以产生一个128位的散列值,用于保存信息的完整性。且一旦加密,整个过程就不可逆转。

## (2)测试MD5加密

在这里插入图片描述

上图为创建测试数据库的代码,以下面sql语句进行MD5加密测试

示例代码
#插入数据
insert into testmd5 values(1,'张三','2113'),(2,'李四','2121'),(1,'王五','2411')
#对已插入的数据中的密码进行MD5加密
update testmd5 set pwd =MD5(pwd)
#对未插入的数据中的密码进行MD5加密
insert into testmd5 values(4,'嘉庆',MD5('2116'))
#和前端传入的用户名和密码在后台进行比对
select name,pwd from testmd5 where name=${name} and pwd = MD5(${pwd})

十六、事务

(1)事务执行的四个基本特性

1)原子性:要么都完成,要么一个也不完成

2)一致性:不论经过何种的操作,总量与操作之前的总量是一样的,是相同的,是不会改变的。

3)隔离性:多个用户之间同时操作并不会影响各个的操作。

4)持久性:若事务没有提交,则恢复到原状。若事务已提交,则保持不变。

(2)脏读、幻读、不可重复读

1)脏读:指读取到了一个未提交的数据

2)幻读:指一个事务在读取的时候,突然发现读取到的行数不正确

3)不可重复读:在一个事务内多次读取到的事务不相同

十七、索引

(1)索引的分类;

1)主键索引:primary key

2)唯一索引:unique key

3)常规索引:key/index

4) 全文索引:fulltext

十八、插入一百万条数据

通常我们会遇到让我们往数据库里面插入很多数据的时候,这时候我们就可以执行下面的代码

示例代码

在这里插入图片描述

十九、数据库的三大范式

(1)第一范式-1nf

原子性;保证每一列不可再分

(2)第二范式-2nf

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

(3)第三范式-3nf

满足第一第二范式,且每一列要与主键直接相关,不能间接相关。如果出现间接相关则直接拆分。



总结

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MySQL数据库随笔 的相关文章

随机推荐

  • Makefile

    1 基本规则 目标 依赖 目标 要生成的目标文件 tab 命令 依赖 目标文件由那些文件生成 命令 通过执行该命令由依赖文件生成目标 举例 add o add c gcc c add c o add c 1 其他规则 目标的时间必须晚于依赖
  • 计算机组成原理测试题

    随堂测试 1 单项选择题 第1题 主频为10MHZ xff0c 则时钟周期为 10ns 100ns xff08 答案 xff09 1000ns 第2题 冯 诺伊曼机工作方式的基本特点是 D 存储器按内容选择地址 C 堆栈操作 B 按地址访问
  • js练习题(3)

    1 序列 xff1a 1 xff0c 2 xff0c 3 xff0c 5 xff0c 8 xff0c 13 找出第20个数是多少 得出前20个数之和是多少 xff1f span class token keyword function sp
  • JAVA 两数求商

    题目描述 xff1a 给定两个整数 a 和 b xff0c 求它们的除法的商 a b xff0c 要求不得使用乘号 除号 以及求余符号 注意 xff1a 整数除法的结果应当截去 xff08 truncate xff09 其小数部分 xff0
  • 约瑟夫环总结

    约瑟夫环 N个人围成一圈 xff0c 从第一个人开始报数 xff0c 报到m的人出圈 xff0c 剩下的人继续从1开始报数 xff0c 报到m的人出圈 xff0c 如此往复 问题一 xff1a 所有人都出圈 xff0c 求出圈的人的编号顺序
  • Linux操作系统实验:生产者和消费者问题

    一 实验目的及要求 生产者消费者 问题是一个著名的同时性编程问题的集合 通过编写经典的 生产者消费者 问题的实验 xff0c 读者可以进一步熟悉 Linux 中多线程编程 xff0c 并且掌握用信号量处理线程间的同步互斥问题 二 实验仪器设
  • COCO数据集解析

    1 简介 官方网站 xff1a http cocodataset org 全称 xff1a Microsoft Common Objects in Context xff08 MS COCO xff09 支持任务 xff1a Detecti
  • U盘启动盘cmd制作

    U盘 移动硬盘启动盘cmd手工制作 插入 gt 61 8G的u盘 移动硬盘 1 win 43 r打开运行窗口 xff0c 输入cmd回车打开命令行 xff08 命令提示符不分大小写 xff09 2 在DOS命令行窗口中输入 diskpart
  • 系统调用的概念和作用

    一 什么是系统调用 xff0c 有何作用 1 概念 用户接口 命令接口 允许用户直接使用 程序接口 允许用户通过程序间接使用 xff1a 由一组系统调用组成 系统调用 系统调用 是操作系统提供给应用程序 xff08 程序员 编程人员 xff
  • linux系统下键盘按键的重新映射——xmodmap工具和xev工具

    虽然linux下小键盘还是不能用 xff0c 但是找到一篇好文章 linux系统下键盘按键的重新映射 xmodmap工具和xev工具 文章目录 1 xev工具 xff1a 2 xmodmap工具 大家会不会有时候 xff0c 感觉键盘上的某
  • Sorry, you have been blocked(Chatgpt登录被屏蔽)

    解决办法 xff1a 关闭浏览器 xff0c 重新打开 vpn换个地区 xff0c 换个美国的vpn
  • Linux查看ip地址出错,ens33不显示inet解决

    在我的私人博客中也有写 xff0c 大家去看看哦 Linux 查看 ip 地址出错 xff0c ens33 不显示 inet 解决 白都 baidu2001 top 问题 xff1a 在 CentOS7中输入 ip addr 时 xff0c
  • Java多线程(超详解)

    目录 1 线程简介 1 1 程序 1 2 进程 1 3 线程 1 4 多线程 1 5 普通方法调用和多线程 2 线程创建 2 1 继承Thread类 2 2 实现Runnable接口 2 3 实现Callable接口 xff08 了解 xf
  • 学习Java的路线

    JavaSE 18 20天 xff09 数据库 xff08 4天 xff09 前端 xff08 7天 xff09 Javaweb xff08 7天 xff09 SSM框架 xff08 9天 xff09 Linux xff08 7天 xff0
  • Java常用类的使用方法小结

    文章目录 前言一 常用类有哪些 xff1f 二 常用类使用方法1 Object类0 xff09 所用的对象1 xff09 getClass方法2 xff09 hasCode方法3 xff09 toString方法4 xff09 equals
  • Java I/O流

    文章目录 前言一 什么是流 xff1f 二 流的分类1 根据流向来分1 xff09 输入流2 xff09 输出流 2 根据单位来分1 xff09 字节流2 xff09 字符流 3 根据功能来分1 xff09 节点流2 xff09 过滤流 三
  • Java 网络编程

    文章目录 前言一 什么是计算机网络 xff1f 二 网络通信的两个重要因素1 通讯双方的地址1 xff09 ip2 xff09 端口号 2 规则 xff1a 网络协议 三 Ip地址1 InetAddress2 Ip的分类1 xff09 ip
  • ScrumMaster的教练职责

    ScrumMaster是Scrum团队的敏捷教练 Ken Rubin说 xff0c 类似于运动团队的教练 xff0c ScrumMaster观察团队使用Scrum的过程 xff0c 帮助团队提高工作绩效 教练不是顾问 xff0c 不提供解决
  • Java多线程

    文章目录 前言一 多线程1 进程 xff0c 线程 xff0c 多线程2 继承Thread类1 xff09 同时下载多个网图通过继承Thread类 3 实现Runnable接口1 xff09 下载多个网图通过实现Runnable接口2 xf
  • MySQL数据库随笔

    提示 xff1a 本文章仅供个人学习使用 xff0c 如有错误请及时私信通知 文章目录 前言一 MySQL的基本操作命令 xff08 1 xff09 连接数据库 xff08 2 xff09 修改用户密码 xff08 3 xff09 刷新权限