初识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)

大家都在看

  • JavaWeb核心篇(2)——Request和Response

    JavaWeb核心篇(2)——Request和Response 上篇文章中提及到了Servlet,在Servlet中我们主要继承了HTTPServlet类,在HTTPServlet…

    数据库 2023年6月14日
    098
  • PHP设计模式—享元模式

    定义: 享元模式(Flyweight):运用共享技术有效地支持大量细粒度的对象。 结构: Flyweight:享元抽象类,所有具体享元类的接口,通过这个接口,Flyweight 可…

    数据库 2023年6月14日
    076
  • 2022-8-10 JAVA的反射机制

    反射机制 AVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方…

    数据库 2023年6月14日
    072
  • XtraBackup 搭建从库的一般步骤及 XtraBackup 8.0 的注意事项

    这里,我们重点看看如何基于 XtraBackup 搭建从库。 整个过程其实比较简单,无非是备份和还原。建立复制时唯一需要注意的是位置点的选择,包括: [En] The whole …

    数据库 2023年5月24日
    0100
  • JavaWeb详解

    一、基本概念 1.前言 web开发: web,网页的意思 静态web html,css 提供给所有人看的数据始终不会发生变化 动态web 提供给所有人看的数据始终会发生变化,每个人…

    数据库 2023年6月16日
    091
  • Python 垃圾回收总结

    前言 最近在阅读《垃圾回收的算法与实现》,里面将讲到了一些常用的垃圾回收(Garbage Collect)算法,如:标记-清除、引用计数、分代回收等等。后面讲到了 Python 的…

    数据库 2023年6月6日
    099
  • 为什么说不变模式可以提高性能

    在Java中基础类型的包装类都是不可变的类,如Boolean、Byte、Character、Double、Float、Integer、Long、Short,另外还有String。这…

    数据库 2023年6月16日
    092
  • Question08-查询没学过”张三”老师授课的同学的信息

    * SELECT * FROM Student WHERE SID NOT IN ( SELECT DISTINCT Student.SID FROM Student , SC ,…

    数据库 2023年6月16日
    083
  • OAuth2 Authorization Server

    基于Spring Security 5 的 Authorization Server的写法 先看演示 pom.xml <?xml version="1.0&quot…

    数据库 2023年6月14日
    0103
  • Stripe支付介绍在asp.net mvc中开发对接,图文加代码说明

    最近一个国外的电商项目,需要对接支付功能,国内的支付一般使用微信支付、支付宝、银联等等,但国际上一般使用Paypal、Skrill、BrainTree、Stripe等,经过内部综合…

    数据库 2023年6月14日
    0100
  • Java Script 循环,数组,对象,判断,阶乘,查找-综合运用合集

    输出100个hello world. for (var i = 1; i console.log("hello world");} 创建一个包含1~100的数组…

    数据库 2023年6月11日
    082
  • 啥是Session?

    什么是 Session 会话? 1、Session 就一个接口(HttpSession)。2、Session 就是会话。它是用来维护一个客户端和服务器之间关联的一种技术。3、每个客…

    数据库 2023年6月11日
    071
  • MYSQL(进阶篇)——一篇文章带你深入掌握MYSQL

    MYSQL(进阶篇)——一篇文章带你深入掌握MYSQL 我们在上篇文章中已经学习了MYSQL的基本语法和概念 在这篇文章中我们将讲解底层结构和一些新的语法帮助你更好的运用MYSQL…

    数据库 2023年5月24日
    087
  • 4_Spring

    Spring的基本组成: 1、最完善的轻量级核心框架。 2、通用的事务管理抽象层。 3、JDBC抽象层。 4、集成了Toplink, Hibernate, JDO, and iBA…

    数据库 2023年6月11日
    066
  • 学会Linux,看完这篇就行了!

    转载请注明出处❤️ 作者:测试蔡坨坨 原文链接:caituotuo.top/797ab07d.html 你好,我是测试蔡坨坨。 对于测试同学来说,Linux基本属于必学必会内容,招…

    数据库 2023年6月11日
    071
  • 线程本地存储 ThreadLocal

    线程本地存储提供了线程内存储变量的能力,这些变量是线程私有的。 线程本地存储一般用在跨类、跨方法的传递一些值。 线程本地存储也是解决特定场景下线程安全问题的思路之一(每个线程都访问…

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