首页 > 编程学习 > MySQL基本概念与基本指令

MySQL基本概念与基本指令

发布时间:2022/10/1 4:44:09

文章目录

  • 一、对数据库的理解
    • 1.从软件角度
    • 2.从网络角度
  • 二、数据库中库与表的关系
  • 三、数据库的架构
  • 四、SQL分类
  • 五、数据库基本
    • 1.连接数据库
    • 2.查看存储引擎
    • 3.清理命令行
  • 六.库操作基本指令
    • 1.库文件目录
    • 2.创建数据库
    • 3.使用数据库
    • 4.查看所有数据库
    • 5.修改数据库(强烈不建议)
    • 6.数据库删除
    • 7.查看数据库连接情况
  • 七、表操作基本指令
    • 1.创建表
    • 2.查看表结构
    • 3.查看所有表
    • 4.修改表结构(强烈不推荐)
    • 5.向表中插入数据
    • 6.删除表

一、对数据库的理解

1.从软件角度

在产生数据库之前,我们都是通过文件操作来保存数据的。文件操作有以下一些缺点:

1.文件的安全性问题。
2.文件不利于数据查询和管理。
3.文件不利于存储海量数据。
4.文件在程序中控制不方便。

因此引入了数据库来对文件进行管理,数据库是一款软件,帮助用户程序更好的进行数据的管理,不用自己进行文件操作了,要访问文件或数据可以通过MySQL语句来让数据库帮忙进行操作和访问。
在这里插入图片描述
数据库也是通过文件的形式保存数据的,数据库可以通过存储引擎直接和文件打交道。

2.从网络角度

用户访问数据库从而对数据进行操作,本质是用户访问了一个数据管理系统:
在这里插入图片描述
数据库是基于网络的,其中用户就相当于是一个客户端,这个管理系统就相当于服务端。体现在云服务器上就是,我们所使用的mysql其实是数据库的客户端,而mysqld才是数据库的服务端。
在这里插入图片描述
因此,安装数据库的本质其实是安装客户端和服务器,启动数据库的本质是启动客户端和服务器,访问mysql实际上是用本地的客户端访问127.0.0.1默认端口号是3306。
当我们启动数据库之后,会发现链接已经处于监听状态:
在这里插入图片描述
在网络上,数据库属于应用层服务,它底层一定调用了OS的系统调用接口。
其中客户端mysql和服务器mysqld的位置在:

ls /usr/bin/mysql
/usr/sbin/mysqld

二、数据库中库与表的关系

  • 所谓的安装数据库,只是在机器上安装了一个数据管理系统程序,这个管理程序可以管理多个数据库,一般开发人员会针对每一个应用创建一个数据库。
  • 为保存应用中实体的数据,一般会在数据库中创建多个表,以保存程序中实体的数据。
  • 数据库服务器,数据库和表的关系如下。
    数据库是通过库与表来管理数据的,它们的关系如下图:
    在这里插入图片描述
    其中每一个库中可以有多个表,每一张表维护多个数据,因此在进行数据库的操作时,需要有对库进行操作的指令和对表进行操作的指令。

三、数据库的架构

MySQL是一个可移植的数据库,几乎能在当前所有的操作系统上运行,各种系统在底层的实现方面各有不同,但是MySQL基本上能保证在各个平台上的物理体系结构的一致性(编写多个匹配代码,然后使用条件编译)。它的总体结构如下图:
在这里插入图片描述
有了Linux内核的知识,我们可以很容易理解存储引擎的工作方式,可以理解成上层一个函数使用多态来调用这些子存储引擎完成不同的功能。

四、SQL分类

  • DLL:数据定义语言,用来维护存储数据的结构。(create,drop,alter)
  • DML:数据操纵语言,用来对数据进行操作。(insert,delete,update)
  • DCL:数据控制语言,主要负责权限管理和事务。(grant,revoke,commit)

五、数据库基本

1.连接数据库

mysql -h 127.0.0.1 -P 3306 -u root

其中-h表示的是主机地址,-P表示的是端口号,-u表示的是使用者。在我们主机使用的时候,指令可以简化为:

mysql -uroot

2.查看存储引擎

show engines;

在这里插入图片描述
注意在mysql命令行输入的命令一定要带分号。

3.清理命令行

system clear;

注意,mysql的指令和Linux下的指令完全不同。

六.库操作基本指令

1.库文件目录

我们所创建的所有库文件都在:

/var/lib/mysql

这个路径mysql的配置文件已经为我们配置好了,可以进行查看:
在这里插入图片描述

2.创建数据库

create database (if not exists) 库名(db_test) [选项];

在这里插入图片描述
其中if not exists表示的是如果没有该数据库,则创建。
创建成功之后,我们可以进入上述路径去查看一下:
在这里插入图片描述
此时就可以看到,一个db_test文件就已经被我们建立好了。进入目录,发现其中有一个.opt文件,打开它:
在这里插入图片描述
这两个东西就是我们要添加的选项来配置的,因为没有添加选项,因此使用的是系统默认的配置。
因此,创建数据库的本质其实就是创建一个目录。并且它的所属组和拥有者都是mysql。
在本次创建我们没有加任何选项,选项主要有两种:

  • CHARACTER:指定数据库采用的字符集。
  • COLLATE:指定数据库字符集的校验规则。

如果没有指定选项,则使用系统默认的选项,默认的是latin1,但是对中文等支持相当不友好。
通常使用的是utf8,而它对应的校验规则是utf8_general_ci。
我们也可以指定默认字符集和校验规则,创建一个数据库:

create database db_test2 charset=utf8 collate utf8_general_ci;

此时我们就创建了一个字符集为utf8,校验规则为utf8_general_ci。
字符集表示数据以什么方式进行存储的,而校验规则指的是数据以什么方式进行读取的。这就是因为默认字符集是utf8,它的默认校验规则就是utf8_general_ci的原因,因为一般二进制存进去的格式和取出来的格式是对应的。
可以使用如下指令可以来查看编码格式和校验规则的对应关系:

show charset
show collation

在这里插入图片描述
此时我们再在该数据库对应的目录下,打开.opt文件,就可以发现字符集和校验规则已经被配置好了:
在这里插入图片描述
关于校验规则对数据库的影响,我们介绍表的时候再进行详细介绍。

3.使用数据库

use db_test

只有进行使用数据库的指令,才能对该数据库进行操作,比如建表删表,改表中数据等等,这些操作我们在下面的表操作中介绍。
在这里插入图片描述
我们可以将该操作理解成cd db_test,即进入db_test的内部。

4.查看所有数据库

show databases;

在这里插入图片描述
此时我们就可以看到,我们创建的两个数据库了,其他四个是数据库系统自带的,不需要我们进行操作。

show create database db_test

该条指令表示的是显示创建数据库db_test的全过程,注意一定是一个已经存在的数据库。
在这里插入图片描述
注意这里的/*不是注释,表示的是如果如果当前数据库版本大于4.01版本,则执行下面这句话,即将它的charset设置为latin1。

5.修改数据库(强烈不建议)

通常情况下,数据库和表建立好了之后就不要进行修改了,因为在公司中数据库修改一点点,上层也许就都需要修改。
对数据库的修改主要修改的是字符集和校验规则:

alter database db_test charset=gbk;

在这里插入图片描述
此时我们发现在配置文件中的字符集以及校验规则都被修改了。我们还可以再查看一下数据库的建立过程:
在这里插入图片描述
发现这里也已经被修改了。
强烈建议不要进行修改。

6.数据库删除

drop database db_test

删除之后的结果:

  • 数据库内部看不到对应的数据库。
  • 对应的数据库文件夹被删除,级联删除,里面的数据表全部被删。

不要随便删除数据库。

7.查看数据库连接情况

show processlist

在这里插入图片描述
可以看到哪些用户在使用你的数据库。

七、表操作基本指令

1.创建表

在使用表之间,一定要先use一个数据库,表示在该库中进行操作。

create table tb_name(
-> field1 datatype,
-> field2 datatype,
-> field3 datatype,
);character set 字符集 collate 校验规则 engine 存储引擎;

其中,field表示的是列名,datatype表示的是列的类型,character set字符集,如果没有指定字符集怎以所在库的字符集为准,collate校验规则,如果没有指定的校验规则,则以所在库的校验规则为准。engine可以使用默认的。
我们使用charset为utf8的库来进行举例:

mysql> create table tb(
-> id int,
-> name varchar(20),
-> password char(10),
-> birthday date
-> );

在每一类型的后面可以跟一个堆这个列名的说明,比如:

name varchar(20) comment “张三”,

但是注意这是说明,而不是插入的数据,还可以加上not null来表示该列不能为空。
此时一个表格就创建成功了。此时我们可以在该数据库的文件夹中看到:
不同的存储引擎创建的结构表的文件是不一样的。
在这里插入图片描述

2.查看表结构

desc 表名

desc tb;
在这里插入图片描述
其中第一列表示的是字段名字,第二列表示的是类型,第三列表示的是是否允许为空,Key表示索引,default表示默认值,Extra表示扩充。

3.查看所有表

show tables;

在这里插入图片描述

4.修改表结构(强烈不推荐)

alter table add(column datatype [DEFAULT expr][,column datatype]…);
alter table modify(column datatype [DEFAULT expr][,column datatype]…);
alter table drop(column);

其中add表示的是在表中增加,modify表示修改,drop表示删除。

alter table tb add asserts varchar(100) after birthday;

在这里插入图片描述
此时就在birthday后面插入了一行,注意只能是after而没有before。

alter table tb modify asserts varchar(60);

还可以将其大小修改为60。
在这里插入图片描述

不建议这么干,因为建立好表之后就不要再改动了,我们将它删掉:

alter table tb drop asserts;

5.向表中插入数据

insert into tb values(1,‘a’,‘b’,‘1999-1-1’),(2,‘c’,‘d’,‘1998-1-1’);

此时就插入了两条数据,在插入之前,一定要先查看表的结构从而确定参数的个数和类型。

select * from tb;

该语句用来查看表中数据。
在这里插入图片描述
使用单引号和双引号插入的是两条数据。
有了查看表的语句,是时候来演示不同的校验规则的不同影响了:
我们建立一个tb3来进行测试,向其中插入数据’a’,‘b’,‘A’,‘B’,然后使用select语句进行查询:

select * from tb3 where name=‘a’;

此时我们可以发现,它将a和A都筛选出来了,说明utf8_general_ci是不区分大小写的。
在这里插入图片描述
如过我们将编码规则改为utf8_bin,则查询的结果为:
在这里插入图片描述

6.删除表

drop table tb;

即将表删除。

Copyright © 2010-2022 mfbz.cn 版权所有 |关于我们| 联系方式|豫ICP备15888888号