学习笔记 2021.12.7mysql

2021.12.7

mysql

数据库常识

为什么需要数据库

实现数据的持久化。

而数据库在实现这一功能上的特点就是存储的量很大,存储的结构可以更复杂。

image-20211207112725915

重要概念

DBMS:数据库管理系统。是一种操纵和管理数据库的大型软件。常说的Mysql即是属于这种管理系统。

大概的示意图:

image-20211207112959599

数据库中即是常见的.doc之类的文件

SQL:结构化查询语言。专门用来实现与数据库通信的语言。

常见的DBMS

oracle,属于RDBMS。适合一些大型跨国企业,对性能和安全性有更高的要求。

mysql,也属于RDBMS。属于mysql的一些优点:

image-20211207113913697

RDBMS和非RDBMS

即关系型的和非关系型的DBMS

  • 关系型数据库即将数据结构归结为简单的二元关系,即二维表格的形式。很多表合在一起则就称作一个库。
  • 表和表之间也存在着关系,这种关系也就称作关系模型。也就是关系型的名字的由来。

image-20211207163330686

非关系型

可以看作是上面的阉割版本,但是有舍也有得。具体的形式还包括:

键值型数据库。如Redis

文档型数据库。

搜索引擎数据库。

关系型数据库的设计规则

基本的表的结构也是遵从ORM的思想,与JAVA的对应关系如下:

数据库中的一个表 == java中的一个类。

表中的一行数据 == 具体的一个对象。

表中的一列 == 类中定义的属性。

表之间的关系

一对一关联、一对多、多对多、自我引用

这里都是有个印象就好,后面涉及到具体的设计的时候再去深入的了解。

mysql的安装

安装社区版就完事了,其他有些版本都是针对企业级开发的需求的。

主要注意三个部分,一个是DBMS要对应一个东西、一个是具体的数据库存放的位置要对应一个东西、一个是环境变量也要进行配置。做到下面这种地步就可以了

image-20211207164551194

mysql的启动和登陆

首先是一个服务的启动,这个通过命令行或者任务管理器界面都可以实现。任务管理器的界面如下:

image-20211207164836953

登陆的话通过在控制台输入指令

mysql -uroot -p+具体密码就可以了,此时默认登陆的是根用户。

此时登陆的指令还有一些待使用的参数,具体可以操控的内容包括mysql的具体版本,登陆的数据库的主机所在位置之类的,知道在命令行下能够这么操作即可。

mysql的编码字符集的问题

5.7需要去配置下编码从而适配中文,8.0就默认采取utf-8的编码形式了。有一点小tips就是在命令行中的操作注意后面要加分号。

image-20211207170122235

mysql的图形化管理工具

有很多,包括收费的和不收费的,这里选择navicat作为集成的开发环境。

基本的就是建立连接就可以看到可视化界面了,同时也可以在编辑界面进行sql语言的填写。就是注意对于这里的mysql8.0登陆的时候也需要进行一定的设置即可。

密码abc123。

更多的细节参考尚硅谷部分的markdown文件。

mysql 的目录结构

data目录下:

image-20211207172901442

其中Data部分存储的就是具体的数据库,my.ini就可以理解成mysql的配置文件。

这里大部分也略掉了,有涉及到底层的操作后再来进行熟悉。

SQL语言

全名:Structure Query Language。结构化查询语言。

SQL有两个重要的标准,分别是SQL92和SQL99。

SQL的分类

DDL:数据定义语言。常见的create、alter之类的都是属于这种语言。

DML:数据操作语言。常见的比如说insert、delete、select之类的具体对象的操作的语言。也是使用频率最高的语言。

DCL:数据控制语言。控制具体操作的语言比如说commit、savepoint之类的指令。是与事务相关的。

SQL的规则和规范

规则

  • SQL 可以写在一行或者多行。为了提高可读性,各子句分行写,必要时使用缩进
  • 每条命令以 ; 或 \g 或 \G 结束
  • 关键字不能被缩写也不能分行
  • 关于标点符号
    • 必须保证所有的()、单引号、双引号是成对结束的
    • 必须使用英文状态下的半角输入方式
    • 字符串型和日期时间类型的数据可以使用单引号(' ')表示
    • 列的别名,尽量使用双引号(" "),而且不建议省略as

规范

  • MySQL 在 Windows 环境下是大小写不敏感的
  • MySQL 在 Linux 环境下是大小写敏感的
    • 数据库名、表名、表的别名、变量名是严格区分大小写的
    • 关键字、函数名、列名(或字段名)、列的别名(字段的别名) 是忽略大小写的。
  • 推荐采用统一的书写规范:
    • 数据库名、表名、表别名、字段名、字段别名等都小写
    • SQL 关键字、函数名、绑定变量等都大写

在SQL中注释是通过#来标识的。

SQlyog中数据的导入

直接通过图形界面中的工具->执行sql脚本再去选中具体的数据库文件即可了。导入后的整体目录结构如下图所示:

image-20211207214223398

基本的SELECT结构

基本的用法:SELECT 字段1、字段2... FROM 表名。意思即是从表中查询出符合字段描述的结果。

image-20211207214322815

上面的dual就是构建一个虚表的意思

其中字段如果是*,则表明是查询表中的所有对象。

image-20211207214447083

这里再具体一点即是字段可以筛选出具体的列名从而呈现:

image-20211207214515020

列的别名

其实就是一个在表的查询过程中将表中数据进行处理后选择是否重命名呈现的一种方式,具体的三种重命名的方式都在下面展示了,注意如果重命名中包含空格的话,则务必要加上双引号:

image-20211207214746472

数据的去重

即将重复的数据只显示一次的操作:

image-20211207214943643

空值参与运算

空值即某字段为null,注意此时null不等于0。

注意空值参与运算的话,会强制将所有的运算数都弄成null。此时为了实现空值参与运算的话,就需要加入流程控制的语句:

image-20211207215510877

着重号

即为了区分表名和sql中的关键字的名字的操作

image-20211207220005793

查询常数:

看操作即可,即是一个展示的方式,没有啥实际意义

image-20211207220049780

显示表结构

作用即是显示字段的详细信息相关:

image-20211207220147491

过滤数据

即查询一些只满足条件的对象,通过过滤条件来筛选,具体示例如下:

image-20211207220502519

这里自然也就要结合一些运算符一起使用,也是很好理解得了。但是还是要注意一下就是字符串内容本身还是要区分大小写的。

posted @ 2021-12-07 22:11  damndamit  阅读(68)  评论(0)    收藏  举报