初识MySQL数据库

一 、引言

假设现在你已经是某大型互联网公司的高级程序员,让你写一个火车票购票系统,来hold住双十一期间全国的购票需求,你怎么写?

因为同时抢票的人太多,你的程序不可能写在一台机器上,但多台机器应该一起分享用户的购票请求。

[En]

Because there are too many people grabbing tickets at the same time, it is impossible for your program to be written on one machine, but multiple machines should share users’ ticket requests together.

那么问题来了,票务信息的数据存储在哪里?它在文件里吗?

[En]

So the question is, where is the data of ticketing information stored? Is it in the file?

如果它存储在文件中,那么它存储在哪台机器上?是否每台机器上都存储了一份副本?

[En]

If it is stored in a file, which machine is it stored on? Is there a copy stored on every machine?

首先,如果其中一台机器上出售的票证对另一台机器是不可察觉的,

[En]

First of all, if the ticket sold on one of the machines is imperceptible to the other machine,

其次,如果我们把数据和程序放在同一台机器上,如果程序和数据之间出现问题,就会使整个服务不可用。

[En]

Secondly, if we put the data and the program on the same machine, if there is a problem between the program and the data, it will make the whole service unavailable.

最后,是操作文件,修改文件对Python代码来说是一件很麻烦的事。

基于上述问题,简单地将数据存储在与程序相同的机器上的文件中是不明智的。

[En]

Based on the above problems, it is unwise to simply store the data in a file on the same machine as the program.

初识MySQL数据库

二、初识数据库

2.1 为什么要用数据库

根据上面的例子,我们已经知道:

[En]

Based on the above example, we already know:

  1. 将文件和程序在一台机器上是很不合理的。
  2. 操作文件是一件很麻烦的事。

所以就出现了一个新的概念——数据库。

你可以理解为:数据库是一个可以在一台机器上独立工作的,并且可以给我们提供高效、便携的方式对数据进行 增删改查的一种工具。

这有助于我们解决上面的问题,将所有数据存储在单独的计算机上,而为用户提供服务的计算机只存储您编写的代码。

[En]

This helps us solve the problem above, storing all the data on a separate machine, while the machine that provides services to users only stores the code you write.

初识MySQL数据库

2.2 数据库的优势

  • 程序稳定性:这样,任何服务所在的机器崩溃都不会影响数据和其他服务。
    [En]

    Program stability: in this way, the crash of the machine in which any service is located will not affect the data and other services.*

  • 数据一致性:所有数据都存储在一起,所有程序操作的数据是统一的,不会出现数据不一致的情况。
    [En]

    data consistency: all data are stored together, and the data operated by all programs are unified, so there will be no data inconsistencies.*

  • 并发:数据库可以良好地支持并发,所有的程序操作数据库都是通过网络,而数据库本身支持并发的网络操作,不需要我们自己写socket。
  • 效率:使用数据库来添加、删除、修改和查询数据,比我们自己处理文件的效率要高得多。
    [En]

    efficiency: using the database to add, delete, modify and query data is much more efficient than our own processing of files.*

三、认识数据库

3.1 什么是数据(Data)

描述事物的符号记录被称为数据,描述事物的符号不仅可以是数字,还可以是文字、图片、图像、声音、语言等。数据可以以多种形式表达,所有这些形式都可以数字化并存储在计算机中。

[En]

The symbolic records that describe things are called data, and the symbols that describe things can be not only numbers, but also words, pictures, images, sound, language and so on. Data can be expressed in many forms, all of which can be digitized and stored in a computer.

要在计算机中描述事物,需要提取事物的典型特征并形成记录,这相当于文件中的一行内容,例如:

[En]

To describe a thing in a computer, you need to extract the typical features of the thing and form a record, which is equivalent to a line of content in a file, such as:

1 jason,不详,83,1935,上海,oldboy

一张简单的记录没有任何意义。如果我们依次定义每个字段的含义,并用逗号分隔,则相当于定义了表的标题:

[En]

A simple record doesn’t make any sense. If we define the meaning of each field in turn, separated by commas, it is equivalent to defining the title of the table:

id,name,sex,age,birth,work_addr,company  # 字段/列名
1 jason,不详,83,1935,上海,oldboy  # 数据

这样我们就可以了解到:jason,性别不详,年龄83岁,出生于1935年,在上海工作,公司是oldboy。

3.2 什么是数据库(DataBase,简称DB)

数据库即存放数据的仓库,只不过这个仓库是在计算机存储设备上,而且数据是按照一定的格式存放的。

人们过去把数据存储在文件中,但现在数据量太大,不再适用。

[En]

People used to store data in files, but now the amount of data is so large that it is no longer applicable.

数据库是长期存储在计算机中的有组织的、可共享的数据的集合。

[En]

Database is a collection of organized and shareable data stored in the computer for a long time.

数据库中的数据按照一定的数据模型进行组织、描述和存储,冗余度小,数据独立性高,易于扩展,可供各类用户共享。

[En]

The data in the database is organized, described and stored according to a certain data model, with less redundancy, high data independence and easy expansibility, and can be shared by all kinds of users.

3.3 什么是数据库管理系统(DataBase Management System 简称DBMS)

在了解了Data与DB的概念后,如何科学的组织和存储数据,如何高效获取和维护数据成了关键。

这使用了一个系统软件–数据库管理系统。

[En]

This uses a system software– database management system.

如MySQL、Oracle、SQLite、Access、MS SQL Server

mysql主要用于大型门户,例如搜狗、新浪等,它主要的优势就是开放源代码,因为开放源代码这个数据库是免费的,他现在是甲骨文公司的产品。
oracle主要用于银行、铁路、飞机场等。该数据库功能强大,软件费用高。也是甲骨文公司的产品。
sql server是微软公司的产品,主要应用于大中型企业,如联想、方正等。

数据库管理员 DBA(Database Administrator)

3.4 数据库服务器、数据管理系统、数据库、表与记录的关系(重点)

记录:1 朱葛 13234567890 22(多个字段的信息组成一条记录,即文件中的一行内容)

表:userinfo,studentinfo,courseinfo(即文件)

数据库:db(即文件夹)

数据库管理系统:如mysql(是一个软件)

数据库服务器:一台计算机(对内存要求比较高)

3.5 数据演变史

  1. 单独的文本文件
  2. 没有固定的存放位置和格式
  3. 文件名:user.txt userinfo.txt data.txt
  4. 数据格式:jason|123 tony~123 kevin$123 程序彼此之间无法兼容
  5. 软件开发目录规范 规定了文件名和存储位置 文件的查找变得简单了 并没有解决核心问题
  6. 数据库阶段 规定了文件的存储位置和数据格式 目前正在使用的阶段 解决了核心问题

3.6 数据库管理技术的发展历程(了解)

一 人工管理阶段

20世纪50年代中期以前,计算机主要用于科学计算。

当时的硬件水平:外存只有纸带、卡片、磁带,没有磁盘等直接存取的存储设备

当时的软件状况:没有操作系统,没有管理数据的软件,数据的处理方式是批处理。

人工管理数据具有以下特点:

  • 数据不保存:计算机主要用于科学计算,数据临时用,临时输入,不保存

  • 应用程序管理数据:数据要有应用程序自己管理,应用程序需要处理数据的逻辑+物理结构,开发负担很重

  • 数据不共享:一组数据只对应一个程序,多个程序之间涉及相同数据时,必须各自定义,造成数据大量冗余
  • 数据不具有独立性:数据的逻辑结构或物理结构发生变化后,必须对应用程序做出相应的修改,开发负担进一步加大

初识MySQL数据库

二 文件系统阶段

20世纪50年代后期到60年代中期

硬件水平:有了磁盘、磁鼓等可直接存取的存储设备

软件水平:有了操作系统,并且操作系统中已经有了专门的数据管理软件,即文件系统;处理方式上不仅有了批处理,而且能够联机实时处理

文件系统管理数据具有以下优点:

  • 数据共享性差,冗余度大:一个文件对应一个应用程序,不同应用有相同数据时,也必须建立各自的文件,不能共享相同的数据,造成数据冗余,浪费空间,且相同的数据重复存储,各自管理,容易造成数据不一致性
  • 数据独立性差:一旦数据的逻辑结构改变,必须修改应用程序,修改文件结构的定义。应用程序的改变,也将引起文件的数据结构的改变。因此数据与程序之间缺乏独立性。可见,文件系统仍然是一个不具有弹性的无结构的数据集合,即文件之间是孤立的,不能反映现实世界事物之间的内存联系。

初识MySQL数据库

三 数据系统阶段

20世纪60年代后期以来,计算机用于管理的规模越来越大,应用越来越广泛,数据量急剧增长,同时多种应用,多种语言互相覆盖地共享数据结合要求越来越强烈

硬件水平:有了大容量磁盘,硬件架构下降

软件水平:软件价格上升(开发效率必须提升,必须将程序员从数据管理中解放出来),分布式的概念盛行。

数据库系统的特点:

  • 数据结构化(如上图)
  • 数据共享,冗余度低,易扩充
  • 数据独立性高
  • 数据由DBMS统一管理和控制
  • a:数据的安全性保护
  • b:数据的完整性检查
  • c:并发控制
  • d:数据库恢复

四、初识MySQL

4.1 数据库的分类(重点)

管理数据的工具有很多种,不止MySQL一个。关于分类其实可以从各个纬度来进行划分,但是我们最常使用的分类还是根据他们存取数据的特点来划分的,主要分为关系型和非关系型。

可以简单的理解为,关系型数据库需要有表结构,非关系型数据库是key-value存储的,没有表结构。

两类数据库的区别:

关系型数据库:

  • 有固定的表结构,表间可以建立代码级关系。
    [En]

    have a fixed table structure, and a code-level relationship can be established between tables.*

非关系型数据库:

  • 没有固定的表结构。数据存储采用的是K:V键值对的形式
4.1.1 关系型数据库

MySQL、Oracle、PostgreSQL、MariaDB、sqlite、sql server、db2

  • MySQL:开源免费 使用非常规范
  • Oracle:收费 维护成本高 大型公司可能会使用
  • PostgreSQL:支持二次开发
  • MariaDB:MySQL的替代产品(并且有自己的特性)
  • sqlite:小型数据库(django框架自带该数据库)

注意:

SQL语句通用

4.1.2 非关系型数据库

Redis、mongoDB、memcache

  • Redis:目前最火的缓存数据库 具有很多数据结构 功能强大
  • mongoDB:文档型数据库 可以用在大数据和爬虫领域
  • memcache:已经被redis淘汰

4.2 MySQL

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件。

MySQL是一种关系数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。

MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。

主要版本:

  • 5.6:使用频率较高的版本
  • 5.7:目前正在过渡的版本
  • 8.0:目前最新的版本

不同的版本主要区别在于底层的逻辑 SQL语句几乎是一模一样的。

4.3 软件下载和安装

mysql为我们提供开源的安装在各个操作系统上的安装包,包括ios,linux,windows。

mysql的安装、启动和基础配置 —— linux版本https://www.cnblogs.com/Eva-J/articles/9664401.html)

mysql的安装、启动和基础配置 —— mac版本https://www.cnblogs.com/Eva-J/articles/9664401.html)

mysql的安装、启动和基础配置 —— windows版本https://www.cnblogs.com/Eva-J/articles/9669675.html)

4.4 基本使用

上面的博客有一个基本用法的解释,所以我不会在这里详细介绍,只是总结一下。

[En]

There is an explanation on the basic use of the above blog, so I won’t go into it in detail here, just summarize it.

一定要先启动服务端再启动客户端;前期在操作的时候最好使用管理员cmd操作。

  1. 环境变量的配置
  2. 直接输入mysqld启动服务端(当前cmd窗口不要关闭)
  3. 开设一个新的cmd窗口操作客户端
mysql   # 游客模式登陆
mysql -u用户名 -p密码  # 账号登录(本地使用)
mysql -hIP地址 -P端口号 -u用户名 -p密码  # 完整命令
"""第一次登录 root用户没有密码 直接连续回车即可"""

4.5 系统服务

将MySQL的服务端制作成系统服务,实现开机自启动。

  1. 先关闭之前的服务端(没启动服务端则忽略)
  2. 以管理员身份打开cmd窗口后,将目录切换到你解压文件的bin目录,输入 mysqld --install回车运行

    这里只是添加到了系统服务,第一次还是需要手动启动,后续便不需要手动启动。

  3. cmd中输入 services.msc可以打开当前计算机服务列表
  4. 启动MySQL服务 以管理员身份在cmd中输入: net start mysql,服务启动成功之后,就可以登录了
"""
停止服务
    net stop mysql
移除系统服务
    mysqld --remove
"""

4.6 密码相关

4.6.1 针对管理员用户需要设置密码

方式1:直接在cmd窗口内使用mysqladmin命令

mysqladmin -uroot -p原密码 password 新密码

eg:
mysqladmin -uroot -p password 123
mysqladmin -uroot -p123 password 666

方式2:直接在登录状态下修改当前登录用户的密码

set password=PASSWORD('密码')
4.6.2 忘记密码如何解决(了解)

方式1:前期如果数据库里面没有数据,干脆重来 !!!

方式2:跳过授权表

1.如果有启动服务端则关闭之前的服务端
    net stop mysql
2.以跳过授权表的方式重新启动服务端,只需要提供用户名就可以登录
    mysqld --skip-grant-tables
3.以管理员身份登录
    mysql -uroot -p
4.修改管理员用户密码
    update mysql.user set password=password(123) where user="root" and host="localhost";
5.关闭服务端再正常启动
    net stop mysql
    net start mysql
6.使用修改之后的密码进行登录即可

五、初识SQL语句

设想一下,当我们想要从文件中存取数据的时候,是一个非常繁琐的过程,主要是因为文件中所有的内容对我们来说是连续的,没有规则的。如果我们将数据按照规则存在一个文件中,再设计一种规则可以拼凑组合成我们需要的操作,并通过这些指示在文件中存取数据,那么操作数据是不是能够变得更加简单快速呢?这串规则就被我们称为SQL。

SQL : 结构化查询语言(Structured Query Language)简称SQL(发音:/ˈes kjuː ˈel/ “S-Q-L”),是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。

SQL语言主要用于存取数据、查询数据、更新数据和管理关系数据库系统,SQL语言由IBM开发。SQL语言分为3种类型:

  1. DDL语句 数据库定义语言: 数据库、表、视图、索引、存储过程,例如CREATE DROP ALTER
  2. DML语句 数据库操纵语言: 插入数据INSERT、删除数据DELETE、更新数据UPDATE、查询数据SELECT
  3. DCL语句 数据库控制语言: 例如控制用户的访问权限GRANT、REVOKE

5.1 基本SQL语句

"""SQL语句的结束必须使用分号"""
1.如何查看所有的数据库名称
    show databases;  '''会有一个临时产生在内存的库:in...sc'''

2.如何查看某个库所有的表名称
    use 库名;  '''切换库(类似于双击了文件夹)'''
    show tables;

3.如何某个表查看所有的记录
    select * from 表名;
"""如果内容较多展示不全出现错乱的情况 可以在语句后面加\G"""

5.2 针对库的SQL语句

增
    create database 数据库名;
查
    show databases;  # 查看所有的库名
    show create database 数据库名;  # 定向查看某个库
改
    alter database 数据库名 charset='utf8';
删
    drop database 数据库名;

5.3 针对表的SQL语句

"""
要想操作表必须得先有库
    1.先创建库
        create database db1;
    2.查看当前所在的库名
        select database();
    3.切换库
        use db1;
"""
增
    create table 表名(字段名1 字段类型1,字段2 字段类型2);
查
    show tables;  # 查看当前库下面所有的表名
    show create table 表名;  # 查看指定的表信息
    describe 表名;  # 查看表的具体信息(常用)  可简写为:desc 表名;
改
    alter table t1 rename ttt;  # 修改表名
    alter table ttt change id nid int;  # 修改字段名和类型
    alter table ttt modify nid char(4);  # 修改字段类型
删
    drop table 表名;

5.4 针对记录的操作

"""
要操作记录,必须首先确定库和表。<details><summary>*<font color='gray'>[En]</font>*</summary>*<font color='gray'>To manipulate the record, you must first determine the library and table.</font>*</details>
"""
增
    insert into 表名 values(数据,数据,数据);  '''单条数据'''
    insert into 表名 values(),(),();  '''多条数据'''
查
    select * from 表名;  '''查询表中所有的数据'''
改
    update 表名 set 字段名='新数据' where 筛选条件;
删
    delete from 表名 where 筛选条件;

5.5 字符编码问题

查看MySQL内部默认的编码情况
    \s

"""MySQL默认的配置文件>>>:mydefault.ini"""
1.拷贝默认的配置文件并且重新命名为my.ini
2.拷贝固定的配置信息
    [mysqld]
    character-set-server=utf8
    collation-server=utf8_general_ci
    [client]
    default-character-set=utf8
    [mysql]
    default-character-set=utf8
3.重启MySQL服务端

Original: https://www.cnblogs.com/JZjuechen/p/15906648.html
Author: JZEason
Title: 初识MySQL数据库

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/507816/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • MySQL实战45讲 9

    09 | 普通索引和唯一索引,应该怎么选择? 每个人都有一个唯一的身份证号,而且业务代码已经保证了不会写入两个重复的身份证号。如果市民系统需要按照身份证号查姓名,就会执行类似这样的…

    数据库 2023年5月24日
    0116
  • 使用Java刷评论为平台引流的经历

    场景:需要在一网站中批量评论留言。分析接口:列表接口获取idList,返回的是json数据直接用FastJson转就可以,如果返回的是HTML片段,则需要使用Jsoup进行提取,值…

    数据库 2023年6月14日
    0117
  • 【运维】– Docker基础必知必会(1)

    1.Docker简介 Docker的出现简单地说就是为了解决运行环境和软件配置相关的不一致性问题,采用Docker镜像的方式将软件所需要的运行环境打包。通过Docker build…

    数据库 2023年6月6日
    0118
  • 数据库基础,看完这篇就够了!

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    数据库 2023年6月11日
    0102
  • IO模型

    Unix IO模型 对于一个套接字上的输入操作,分为两步: 等待数据准备好(从网络中到达,到内核缓冲区) 将数据从内核缓冲区复制到应用进程缓冲区 I/O模型主要为以下五种: 阻塞I…

    数据库 2023年6月11日
    087
  • 什么是回表,怎么解决?

    表tbl有a,b,c三个字段,其中a是主键,b上建了索引,然后编写sql语句SELECT * FROM tbl WHERE a=1这样不会产生回表,因为所有的数据在a的索引树中均能…

    数据库 2023年6月16日
    0126
  • 熟悉javaEE主流框架Spring boot,Spring Cloud,Mybatis,了解Servlet,JDBC

    什么是Tomcat 阿帕奇提供的小型服务器软件,支持servet和jsp规范 lib包:存放jar包 WabApp:发布项目的目录 work:jsp编译生成。class的目录 LO…

    数据库 2023年6月16日
    0120
  • 正则表达式

    正则表达式:REGEXP,REGular EXPression。正则表达式分为两类: Basic REGEXP(基本正则表达式 Extended REGEXP(扩展正则表达式) 元…

    数据库 2023年6月15日
    0144
  • MySQL 主从同步延迟监控

    MySQL5.7和8.0支持通过 replication_applier_status 表获同步延迟时间,当从库出现延迟后,该表中的字段 REMAINING_DELAY 记录延迟秒…

    数据库 2023年6月11日
    0112
  • Redis-缓存雪崩,击穿,穿透

    小结 布隆过滤器 工作原理:布隆过滤器是一个由初值为0的长度为L的bit数组和N个哈希函数组成。当有向数据库写入操作时,对键进行N次哈希值计算,并对计算后的值取L的模,对数组相应位…

    数据库 2023年6月11日
    076
  • 设计模式之简单工厂

    一、简单工厂:为了客户类和服务类之间的解耦,把对象的创建任务交给第三方类,这个第三方类就充当工厂的作用,严格来说简单工厂不属于23种设计模式之一。 二、实现思路 :创建一个简单工厂…

    数据库 2023年6月14日
    090
  • mysql主从搭建

    mysql主从搭建 环境:ubuntu20.04.1,mysql:8.0.22。主:192.168.87.3备:192.168.87.6 安装数据库 sudo apt-get in…

    数据库 2023年6月11日
    082
  • 5、基于EasyExcel的导入导出

    一、Apach POI处理Excel的方式: 传统Excel操作或者解析都是利用Apach POI进行操作,POI中处理Excel有以下几种方式: 1、HSSFWorkbook: …

    数据库 2023年6月6日
    0125
  • 数据库操作语句大全(sql)

    数据库操作语句大全(sql) 一、基础 1、说明:创建数据库 CREATE DATABASE database-name 2、说明:删除数据库 drop database dbna…

    数据库 2023年6月9日
    096
  • 12、HSSFWorkbook实现多张sheet导出

    转载自 一、封装一个通用的装载数据的实体类: import lombok.AllArgsConstructor; import lombok.Data; import lombok…

    数据库 2023年6月6日
    0112
  • springcloud~nacos通过@refreshScope进行配置热更新

    配置类 @Data @ConfigurationProperties("auth") public class AuthProperties { private…

    数据库 2023年6月6日
    097
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球