「MySQL-01」MySQL基础

目录

一、数据库概念

1. 什么是数据库

2. 为什么要有数据库?

3. 数据库将数据存在哪里?

二、知名数据库介绍

1.知名数据库介绍

2.为什么要学习MySQL

三、MySQL的基本使用

0. 安装MySQL

1. 数据库客户端链接服务端

2. Windows下的MySQL服务端管理

3. 数据库的本质 及 服务器,数据库,表关系

4.数据库的物理存储和逻辑存储

「拓」对数据库的简单操作

四、MySQL架构

1. MySQL 是一个可移植的数据库

2. 这是怎么做到的呢?

3. MySQL服务端插件层的设计思想

五、存储引擎

六、SQL语句分类


一、数据库概念

1. 什么是数据库

1.1 从狭义层面上讲

        a.从服务端来讲:有没有启动数据库,这里的数据库就是指数据库的服务端,即mysqld

(我们安装的MySQL是一套网络服务,既有客户端也有服务端,这意味着我们在A主机上的MySQL服务端可以被B主机上的MySQL客户端访问。启动数据库服务端后我们才能通过数据库的客户端访问服务端,对数据进行增删改查。)

        b.从数据层面来讲:创建一个数据库,这里指的是创建一个数据库文件,即保存在在路径/var/lib/mysql的文件。

1.2 从宏观层面来讲

        为用户提供数据管理的软件集合(程序+数据)。

2. 为什么要有数据库?

2.1 存储数据用文件就可以了,为什么还要弄个数据库?

  • 文件和数据库都可以用来存储数据,但我们使用文件存储数据,数据的管理工作要我们自己做,如对文件里数据的查询和修改,需要我们自己设计程序完成。
  • 为了解决上述问题,专家们在用户和文件之间添加一个更加利于管理数据的应用层软件——数据库,它能帮助用户管理文件中的数据。(所以数据库也可以说是对文件内容进行管理的"文件系统")
  • 所以数据库的优势在于:数据库在存储数据的同时还管理着数据,对外提供基本的数据操作(增删查改),不用程序员手动进行数据管理。

2.2 对比数据库,单纯用文件保存数据有以下几个缺点:

文件不利于海量数据查询和管理
文件的安全性问题 (误删数据如何恢复?)

文件在程序中控制不方便 (要先将文件中的所有内容加载到内存中,才能获取其中某行内容)

3. 数据库将数据存在哪里?

磁盘 或 内存 (数据库存储数据也要创建文件,并将其保存在磁盘或内存中。)

二、知名数据库介绍

1.知名数据库介绍

  • SQL Sever: 微软的产品,适合中大型项目,.Net程序员的最爱。
  • Oracle 甲骨文产品,适合大型项目,复杂的业务逻辑,会提供配套的服务,并发性不如MySQL。一般都是银行或非互联网公司的大型企业在使用。
  • MySQL:世界上最受欢迎的数据库,属于甲骨文,并发性好,但不适合做复杂的业务。主要用在电商,SNS,论坛。对简单的SQL处理效果好。互联网公司一般都会使用MySQL。
  • PostgreSQL :加州大学伯克利分校计算机系开发的关系型数据库,不管是私用,商用,还是学术研究使用,都可以免费使用。学术研究机构可能用到PostgreSQL更多。
  • SQLite: 是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C中。它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。用于嵌入式开发。
  • H2: 是一个用Java开发的嵌入式数据库,它本身只是一个类库,可以直接嵌入到应用项目中。

2.为什么要学习MySQL

        因为MySQL开源,使用成本低,生态好,社区活跃,而且在不断迭代更新下现在MySQL的效率并不差,对于百万、千万级别的数据完全hold住,所以互联网公司一般都会使用MySQL,因此MySQL水平是衡量一个程序员水平的重要指标


三、MySQL的基本使用

0. 安装MySQL

关于Linux上MySQL的安装请看博主这篇文章:「MySQL-00」MySQL在Linux上的安装

1. 数据库客户端链接服务端

mysql -h 127.0.0.1 -P 3306 -u root -p-h : 主机,由于MySQL默认禁止跨网络服务,现在先本地回环127.0.0.1
-P : 端口号,MySQL服务端的端口号默认为3306
-u : 以哪个用户登录
-p : 用户密码

「拓1」如何更改MySQL服务端的默认端口号?

        使用vim打开MySQL配置文件 :  vim /etc/my.cnf
        然后在最后一行之前加上 : port=修改后端口号即可
        最后重启MySQL客户端 : systemctl restart mysqld

        在工作中建议修改,如果仅是练习就没有必要修改了。


「拓2」如何查看MySQL服务端的默认端口号?

        在Linux输入命令 netstat -nltp 进行查询。

2. Windows下的MySQL服务端管理

执行 win+r 输入 services.msc 打开服务管理器

通过下图左侧停止,暂停,重启动按钮进行服务管理

3. 数据库,表,服务端,客户端的本质和关系

3.1 创建一个数据库的本质:

        在mysql中,建立一个数据库create database XXX,本质在linux下是建立了一个目录!


3.2 在数据库中建表的本质:

        在mysql中,建立一个表create table 表名(); ,本质是在Linux上对应的数据库目录下创建对应的文件!


3.3 对数据库操作的本质:

        所以我们对数据库或数据库里的表进行操作,本质上就是在对Linux上对应的目录和文件进行操作。


3.4 数据库服务端的本质:

        所谓安装数据库服务端,只是在机器上安装了一个数据库管理系统程序,即musqld(数据库服务端),这个管理程序可以管理多个数据库。


3.5 数据库客户端的本质:

        Linux中的mysql通过命令行访问MySQL服务端,这是一个客户端。

        图像界面中访问数据库的软件,也是一个客户端。

        程序中引入MySQL中通过的第三方库来访问MySQL服务端,那么这个程序也是一个客户端。


3.6 总结

数据库客户端、服务端、数据库和表的关系如下:

 MySQL的客户端通过SQL语句向服务端发起请求,服务端再根据请求对数据库进行操作。

4.数据库的物理存储和逻辑存储

4.1 物理存储:以二进制的形式保存在文件中。


4.2 逻辑存储: 以行和列的形式保存在表中。

「拓」对数据库的简单操作

  • show databases;  : 展示已创建的数据库(注意数据库命令以分号结尾)。
  • create database 数据库名称; : 创建一个数据库(注意数据库命令以分号结尾)。
  • system 系统命令  :  执行Linux系统命令,经常使用system clear (执行系统命令清屏,结尾不用带;)。
  • use 数据库名称;  :  进入一个数据库。
  • select database();  :  查看当前正在哪一个数据库里。(需要先进入一个数据库)
  • create table 表名(表头);  :  创建一个表。(需要先进入一个数据库)
  • show tables;  :  查看数据库里所有的表。(需要先进入一个数据库)

四、MySQL架构

1. MySQL 是一个可移植的数据库

        MySQL 是一个可移植的数据库,几乎能在当前所有的操作系统上运行,如 Unix/LinuxWindows、 Mac 和 Solaris。各种系统在底层实现方面各有不同,但是 MySQL 基本上能保证在各个平台上的物理体系结构的一致性。即,MySQL的底层实现在各平台上不同,但是在各平台上对外暴露的上层接口是一样的。

2. 这是怎么做到的呢?

MySQL的服务端架构主要分三层:

  • 链接层:对与客户端的链接进行管理,如鉴权。
  • SQL语句的接口识别&语法解析&性能调优层:SQL语句在传入下层时就已经被处理、解析好了。
  • 插件(存储引擎)层:把解析好的SQL语句,给选出的存储引擎,存储引擎根据SQL语句和OS的文件系统进行交互。

3. MySQL服务端插件层的设计思想

        MySQL服务端插件层里有多个存储引擎,对于这些存储引擎必须要进行管理,怎么管?当然是先描述,再组织了。由于MySQL是使用C/C++写的,所以对于这些存储引擎,可以使用类来描述,类中的成员方法中既有提供给上层的调用接口,也有对下层的操作方法。在未来用户要使用某个存储引擎,直接靠类new一个对象出来即可;不需要了,直接delete掉即可,这就是插件式开发。对于已经存在的存储引擎对象,用列表、顺序表等数据结构进行组织,这样就完成了对所有存储引擎的管理。


五、存储引擎

1.是什么?

        存储引擎是:数据库管理系统如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术 的实现方法。真正执行SQL语句的部分。(MySQL的核心就是插件式存储引擎,且支持多种存储引擎。 )


2. 查看存储引擎

        show engines;

3. 常用的存储引擎

  • InnoDB  :建议设置为默认存储引擎,因为它支持事物。
  • MyISAM :常用于大量查找的情况。

4.设置存储引擎

  • 使用vim打开MySQL配置文件 :  vim /etc/my.cnf
  • 然后在最后一行skip-grant-tables前面加上行:default-storage-engine=存储引擎名
  • 最后重启MySQL客户端 : systemctl restart mysqld

六、SQL语句分类

根据SQL语句的应用场景对其分类:

  • DDLdata definition language数据定义语言,用来创建、修改、删除存储数据的结构(如数据库、表、视图)
    代表指令: create, drop, alter
  • DMLdata manipulation language数据操纵语言,用来对数据进行操作
    代表指令: insertdeleteupdate
    DML中又单独分了一个DQL
    ,数据查询语言,代表指令: select
  • DCLData Control Language数据控制语言,主要负责权限管理和账户管理
    代表指令: grantrevokecommit

------------------------END-------------------------

才疏学浅,谬误难免,欢迎各位批评指正。

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

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

相关文章

昌硕科技、世硕电子同步上线法大大电子合同

近日,世界500强企业和硕联合旗下上海昌硕科技有限公司(以下简称“昌硕科技”)、世硕电子(昆山)有限公司(以下简称“世硕电子”)的电子签项目正式上线。上线仪式在上海浦东和硕集团科研大楼举行&…

使用fastjson2的@JSONField注解解决日期格式记录

最近在做一个三方对接&#xff0c;对方的日期格式数据要求时间日期格式: yyyyMMddHHmmss或者 yyyyMMdd&#xff0c;我一下想起了fastjson2工具包&#xff0c;所以很愉快的解决了此问题。 依赖jar如下&#xff1a; <dependency><groupId>com.alibaba.fastjson2</…

每日一博 - 闲聊云原生和容器编排

文章目录 概念1. 云原生&#xff08;Cloud Native&#xff09;&#xff1a;2. 容器编排&#xff08;Container Orchestration&#xff09;&#xff1a; 小结 概念 云原生和容器编排是两个不同的概念&#xff0c;但它们之间有着密切的联系。下面将分别介绍这两个概念&#xff0…

【C++】const成员 | 取地址运算符重载

Ⅰ. const成员 两种const 我们知道&#xff0c;用const修饰 能起到保护&#xff0c;使之不被修改的作用。 修饰指针的const有两种位置&#xff1a; 我们学过的this指针&#xff0c;就被后者所修饰&#xff0c;因此无法被修改。 const成员函数 ➡️为了保护函数里的成员&…

《Java极简设计模式》第05章:原型模式(Prototype)

作者&#xff1a;冰河 星球&#xff1a;http://m6z.cn/6aeFbs 博客&#xff1a;https://binghe.gitcode.host 文章汇总&#xff1a;https://binghe.gitcode.host/md/all/all.html 源码地址&#xff1a;https://github.com/binghe001/java-simple-design-patterns/tree/master/j…

Elasticsearch 8.X reindex 源码剖析及提速指南

1、reindex 源码在线地址 为方便大家验证&#xff0c;这里给出 reindex github 源码地址。 https://github.com/elastic/elasticsearch/blob/001fcfb931454d760dbccff9f4d1b8d113f8708c/server/src/main/java/org/elasticsearch/index/reindex/ReindexRequest.java reindex 常见…

开源软件的崛起:历史与未来

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

Lambda函数

一.概念 1.利用lambda表达式可以编写内嵌的匿名函数&#xff0c;用以替换独立函数或者函数对象 2.每当你定义一个lambda表达式后&#xff0c;编译器会自动生成一个匿名类&#xff08;这个类当前重载了&#xff08;&#xff09;运算符&#xff09;&#xff0c;我们称为闭包类型…

Lazada商品详情接口 获取Lazada商品详情数据 Lazada商品价格接

一、引言 随着电子商务的迅速发展和普及&#xff0c;电商平台之间的竞争也日趋激烈。为了提供更好的用户体验和更高效的后端管理&#xff0c;Lazada作为东南亚最大的电商平台之一&#xff0c;开发了一种商品详情接口&#xff08;Product Detail API&#xff09;。该接口允许第…

根据源码,模拟实现 RabbitMQ - 转发规则实现(6)

目录 一、转发规则实现 1.1、需求分析 1.2、实现 Router 转发规则 1.2.1、bindingKey 和 routingKey 参数校验 1.2.2、消息匹配规则 1.2.3、主题交换机匹配规则 一、转发规则实现 1.1、需求分析 这里主要实现 routingKey 和 bindingKey 参数的校验&#xff0c;以及 Topic…

Python(.pyc)反编译:pycdc工具安装与使用

本文将介绍如何将python的.pyc文件反编译成源码&#xff0c;以便我们对源码的学习与改进。pycdc工具安装 下载地址&#xff1a; 1、Github地址&#xff1a;https://github.com/zrax/pycdc &#xff0c;下载后需要使用CMake进行编译。 2、已下载好及编译好的地址&#xff1a;ht…

ISIS路由协议

骨干区域与非骨干区域 凡是由级别2组建起来的邻居形成骨干区域&#xff1b;级别1就在非骨干区域&#xff0c;骨干区域有且只有一个&#xff0c;并且需要连续&#xff0c;ISIS在IP环境下目前不支持虚链路。 路由器级别 L1路由器只能建立L1的邻居&#xff1b;L2路由器只能建立L…

1.2 Kali Linux的网络配置

前言 最新文章请见此处&#xff0c;持续更新&#xff0c;敬请订阅&#xff01;https://blog.csdn.net/algorithmyyds/category_12418682.html 网络在如今的社会已是十分重要的媒介&#xff0c;如果没有网络&#xff0c;很多事情将难以办成。渗透测试也是一样——毕竟在攻击机…

学习设计模式之享元模式,但是宝可梦

前言 作者在准备秋招中&#xff0c;学习设计模式&#xff0c;做点小笔记&#xff0c;用宝可梦为场景举例&#xff0c;有错误欢迎指出。 享元模式 1 介绍 享元模式很好理解&#xff0c;它主要是为了减少创建对象的数量&#xff0c;属于结构型设计模式 目的&#xff1a;减少…

Jacoco XML 解析

1 XML解析器对比 1. DOM解析器&#xff1a; ○ 优点&#xff1a;易于使用&#xff0c;提供完整的文档树&#xff0c;可以方便地修改和遍历XML文档。 ○ 缺点&#xff1a;对大型文档消耗内存较多&#xff0c;加载整个文档可能会变慢。 ○ 适用场景&#xff1a;适合小型XML文档…

函数式编程-Stream流学习第二节-中间操作

1 Stream流概述 java8使用的是函数式编程模式,如同它的名字一样&#xff0c;它可以用来对集合或者数组进行链状流式操作&#xff0c;让我们更方便的对集合或者数组进行操作。 2 案例准备工作 我们首先创建2个类一个作家类&#xff0c;一个图书类 package com.stream.model;…

03.sqlite3学习——数据类型

目录 sqlite3学习——数据类型 SQL语句的功能 SQL语法 SQL命令 SQL数据类型 数字类型 整型 浮点型 定点型decimal 浮点型 VS decimal 日期类型 字符串类型 CHAR和VARCHAR BLOB和TEXT SQLite 数据类型 SQLite 存储类 SQLite 亲和类型(Affinity)及类型名称 Boo…

opencv案例03 -基于OpenCV实现二维码生成,发现,定位,识别

1.二维码的生成 废话不多说&#xff0c;直接上代码 # 生成二维码 import qrcode# 二维码包含的示例数据 data "B0018" # 生成的二维码图片名称 filename "qrcode.png" # 生成二维码 img qrcode.make(data) # 保存成图片输出 img.save(filename)img.sh…

vue关闭弹窗刷新父页面 this.$refs

代码截图 主页面 弹出框页面 接这一篇文章后续 参考链接

Python 数据分析——matplotlib 快速绘图

matplotlib采用面向对象的技术来实现&#xff0c;因此组成图表的各个元素都是对象&#xff0c;在编写较大的应用程序时通过面向对象的方式使用matplotlib将更加有效。但是使用这种面向对象的调用接口进行绘图比较烦琐&#xff0c;因此matplotlib还提供了快速绘图的pyplot模块。…