【MySQL篇】:MySQL基础了解以及库和表的相关操作
✨感谢您阅读本篇文章,文章内容是个人学习笔记的整理,如果哪里有误的话还请您指正噢✨
✨ 个人主页:余辉zmh–CSDN博客
✨ 文章所属专栏:MySQL篇–CSDN博客
文章目录
- 一.MySQL基础
- 1.mysql的大致理解
- 2.基本使用
- 3.客户端,服务器,数据库,表关系
- 4.SQL语句分类
- 5.存储引擎
- 二.MySQL库的操作
- 1.创建数据库
- 2.字符集和检验规则
- 3.操纵数据库
- 三.MySQL表的操作
- 1.创建表
- 2.查看表结构
- 3.修改表
- 4.删除表
一.MySQL基础
1.mysql的大致理解
mysql
对应的是数据库服务的客户端,mysqld
(一般带有d
结尾的进程是一个守护进程)对应的是数据库服务的服务器端,所以mysql
本质上是一种基于C(mysql) S(mysqld)
模式的网络服务;
既然是一种网络服务,那么就可以查到对应绑定的端口号:
mysql
是一套给我们提供数据存取服务的网络程序;
数据库一般指的是,在磁盘或者内存中存储的特定结构组织的数据——将来在磁盘或者内存上存储的一套数据库方案;
但是存储数据用文件就够了,为什么还要弄个数据库?
这是因为文件保存数据有以下几个缺点:
- 文件的安全性问题;
- 文件不利于数据查询和管理;
- 文件不利于存储海量数据;
- 文件在程序中控制不方便;
所以一般的文件确实提供了数据的存储功能,但是文件并没有提供非常好的数据管理能力(从用户的角度);
因此数据库本质上是对数据内容存储的一套解决方案,用户给数据库字段或者要求,数据库就可以直接给用户返回结果;
2.基本使用
登录mysql(连接服务器)指令:
mysql -h 127.0.0.1 -P 3306 -u [user] -p
选项:
-h
:指明登录部署了mysql服务的主机;-P
:指明我们要访问的端口号;-u
:指明登录用户;-p
:指明需要输入密码
执行该指令进行登陆时,需要输入密码,输入密码时不会显示
退出mysql(断开连接)指令:
quit
直接输入quit即可退出;
3.客户端,服务器,数据库,表关系
1.数据库服务器:
- 定义:数据库服务器是一台运行数据库管理系统(主流的有
MySQL
,PostgreSQL
,Cracle
等)的计算机,负责存储,管理和保护数据,并响应客户端的请求;- 作用:相当于“数据仓库的管理员”,负责数据的存储,查询,修改等操作;
2.数据库客户端:
- 定义:数据库客户端是用来连接数据库服务器的工具或程序,可以是命令行工具(比如
mysql
),图形化工具(比如Navicat
)等;- 作用:相当于“访问仓库的访客”,通过客户端向服务器发出请求(比如查询,插入,删除数据等);
3.数据库:
- 定义:数据库是服务器上的一个数据集合,一个服务器可以有多个数据库,每个数据可之间相互独立;
- 作用:相当于“仓库里的一个房间”,每个房间存放着不同类型的数据;
4.表:
- 定义:表是数据库中的基本存储结构,每个表由行(记录)和列(字段)组成;
- 作用:相当于“房间里的柜子”,每个柜子(表)用来存放某一类数据(比如用户信息,订单信息等);
具体的数据流向:
用户输入查询 → 客户端 → 网络传输 → 服务器 → 数据库 → 表 → 数据↓
用户看到结果 ← 客户端 ← 网络传输 ← 服务器 ← 数据库 ← 表 ← 数据
4.SQL语句分类
-
DDL[data definition language]
:数据定义语言,用来维护存储数据的结构;代表指令:
create,drop,alter
; -
DML[data manipulation language]
:数据操纵语言,用来对数据进行操作;代表指令:
insert,delete,update
;DML
中又单独分了一个DQL
,数据查询语言,代表指令:select
; -
DCL[data control language]
:数据控制语言,主要负责权限管理和事务;代表指令:
grant,revoke,commit
;
5.存储引擎
存储引擎是:数据库管理系统如何存储数据,如何为存储的数据建立索引和如何更新,查询数据等技术的实现方法;
MySQL
的核心就是插件式的存储引擎,支持多种存储引擎(先了解吧,后面用到了再讲解)。
二.MySQL库的操作
1.创建数据库
create database [if not exists] db_name [[default] character set charset_name, [default] collate collation_name];
说明:
-
if not exists
:表示如果不存在就直接创建; -
[]
中的是可选项; -
character set
:指定数据库采用的字符集; -
collate
:指定数据库字符集的检验规则;
示例:
创建一个名为mydatabase
的数据库:
create database mydatabase;
(当我们创建数据库时没有指定字符集和检验规则时,系统会使用默认字符集:utf8
;
检验规则:utf8_general_ci
);
创建一个数据库本质就是在/var/lib/mysql/
下创建一个目录:
所以数据库本质上也是文件!!!只不过这些文件并不由程序员直接操作,而是由数据库服务帮我们进行操作;
2.字符集和检验规则
创建数据库的时候,有两个编码集:
- 数据库编码集:数据库用来存储数据;
- 数据库校验集:支持数据库进行字段比较使用的编码,本质上也是一种读取数据库中的数据所采用的编码格式;
数据库无论对数据做任何操作,都必须保证操作和编码必须是一致的!
1.查看系统默认字符集和校验规则:
show variables like 'character_set_database';
show variables like 'collation_database';
2.查看数据库支持的字符集:
show charset;
字符集主要是控制用什么语言,比如utf8
就可以使用中文;
3.查看数据库支持的字符集校验规则:
shwo collation
4.检验规则对数据库的影响:
以下面的这个为例:
- 查找时不区分大小写:
// 创建数据库
create database test1 collate utf8_general_ci;// use + 数据库名 可以理解为进入该数据库中,比如cd某个目录中
use test1;// 创建表
create table person (name varchar(20));// 插入
insert into person (name) values ('a');
insert into person (name) values ('A');
insert into person (name) values ('b');
insert into person (name) values ('B');// 筛选
select * from person where name='a';
- 查找时区分大小写:
// 创建数据库
create database test2 collate utf8_bin;use test2;// 创建表
create table person (name varchar(20));// 插入
insert into person (name) values ('a');
insert into person (name) values ('A');
insert into person (name) values ('b');
insert into person (name) values ('B');// 筛选
select * from person where name='a';
3.操纵数据库
1.查看数据库:
show database;
2.查看当前在哪个数据库中:
select database();
3.显示创建语句:
show create database db_name;
4.修改数据库:
alter database db_name [[default] character set charset_name, [default] collate collation_name];
注意:对数据库修改主要是修改数据库的字符集或者校验规则;
示例:
将mydatabase
数据库的字符集修改为gbk
;
alter database mydatabase charset=gbk;
5.删除数据库:
drop database [if exists] db_name;
执行删除之后的结果就是数据库内部看不到对应的数据库,本质就是删除对应的目录,里面的数据全部被删除;
注意:不要随意删除数据库;
示例:
删除数据库test2
:
drop database test2;
删除前/var/lib/mysql/
目录下:
删除后:
6.备份和恢复:
备份:
在系统命令行中指令备份
mysqldump -P3306 -u use_name -p -B db_name > 数据库备份存储的文件路径
示例:
mysqldump -P3306 -u zmh_1 -p -B test1 > /home/zmh01/mytest1.sql
还原:
在mysql
中输入指令:
source 数据库备份存储的文件路径;
示例:
先删除数据库test1
,然后再恢复:
drop database test1;source /home/zmh01/mytest1.sql;
备份时其实就是把整个创建数据库,建表,导入数据的所有语句都装载到这个文件中,然后恢复时再依次执行这个文件中的所有语句。
注意事项:
- 如果备份的不是整个数据库,而是其中的一张表呢?
mysqldump -u use_name -p db_name 表名1 表名2... > 备份存储的的文件路径
- 同时备份多个数据库
mysqldump -u use_name -p -B 数据库名1 数据库名2... > 备份存储的文件路径
- 如果备份一个数据库时,没有带上参数
-B
,在恢复数据库时,需要先创建空数据库,然后use
使用数据库,再还原;
7.查看连接情况:
show processlist
可以检查当前有哪些用户连接到我们的数据库,如果查出某个用户不是我们正常登陆的,很有可能我们的数据库被其他人入侵了;所以如果在使用数据库时发现比较慢,可以使用这个指令查看数据库连接情况;
三.MySQL表的操作
1.创建表
create table table_name(field1 datatype,field2 datatype,...
)character set 字符集 collate 校验规则 engine 存储引擎;
说明:
field
:表示列名;datatype
:表示列的数据类型;character set
:字符集,如果没有指定字符集,就以所在的数据库的字符集为准;collate
:校验规则,如果没有指定校验规则,也是以所在的数据库的校验规则为准;engine
:存储引擎不同,创建表的文件不一样
示例:
create table s1(name varchar(10),gender char(2),age int);
在数据库test1
中创建一个s1
表,然后查看对应的test1
目录下的文件:
可以发现test1
目录下多了一个表文件s1.ibd
,因此创建表实际上就是在对应的目录下创建文件;
因为创建表s1
时,没有指定存储引擎,可以通过指令查看默认的存储引擎是哪个:
show create table 表名
根据图中的内容可以发现,默认采用的存储引擎是InnoDB
;
而前面提到不同的存储引擎,会创建不同的表文件,所以再创建一个其他存储引擎的表来对比看看:
create table s2(name varchar(10),gender char(2),age int)engine MyISAM;
可以发现存储引擎为MyISAM
的表s2
会创建三个不同的文件
2.查看表结构
desc 表名
field
:字段名type
:字段类型null
:是否允许为空key
:索引类型default
:默认值extra
:扩充
3.修改表
在实际项目中,经常修改某个表的结构,比如字段名字,字段大小,字段类型,表的字符集类型,表的存储引擎等等;以及各种需求添加字段,删除字段等,这时候就需要对表进行修改。
这里直接展示示例:
- 在
s1
表中添加两条记录
insert into s1 values('李四','男',30),('王五','男',18);
- 在
s1
表中添加一个新字段
添加关键字add
alter table s1 add address varchar(30) comment '地址' after age;
插入新字段后,对原来的数据没有影响,依然存在。
- 修改字段
name
长度变为60
修改字段类型关键字modify
alter table s1 modify name varchar(60);
- 删除
gender
列
删除关键字drop
alter table s1 drop gender;
注意:删除字段时一定要小心,删除字段及其对应的列数据就全没了。
- 表名重命名为
test1
重命名关键字rename
alter table s1 rename to test1;
to
可以省略。
- 将字段
name
列修改为xingming
修改字段名关键字change
alter table test1 change name xingming varchar(60); --新字段需要完整定义
4.删除表
drop table [if exists] 表名;
删除多个表时,表名之间用逗号隔开;
以上就是关于MySQL基础了解以及库和表的相关操作的讲解,如果哪里有错的话,可以在评论区指正,也欢迎大家一起讨论学习,如果对你的学习有帮助的话,点点赞关注支持一下吧!!!