MySQL安装卸载与数据库操作指南
一.mysql卸载和安装
查看当前是否有mysql的服务启动
sudo systemctl status mysql关闭mysql的服务
systemctl stop mysql卸载
sudo apt purge mysql-server mysql-client mysql-common mysql-server-core-* mysql-client-core-*安装mysql
sudo apt install mysql-server二.什么是数据库
1.为什么需要数据库
为什么需要数据库?使用Excel或普通文件存储数据不是更方便吗?
实际上,数据库系统相比Excel和文件存储具有显著优势:
- 安全性更强:数据库提供完善的安全机制
- 高效管理海量数据:Excel处理大数据量时性能很差(可能加载一整天最终失败)
- 程序集成更便捷:数据库提供标准化的编程接口,比直接操作文件更高效可靠
为什么需要数据库?使用Excel或普通文件存储数据不是更方便吗?
实际上,数据库系统相比Excel和文件存储具有显著优势:
- 安全性更强:数据库提供完善的安全机制
- 高效管理海量数据:Excel处理大数据量时性能很差(可能加载一整天最终失败)
- 程序集成更便捷:数据库提供标准化的编程接口,比直接操作文件更高效可靠
2.数据库服务器和存储引擎
●连接服务器
mysql -h 127.0.0.1 -P 3306 -u root -p●安装数据库服务器本质上是在计算机上部署一个数据库管理系统(DBMS),该系统能够同时管理多个数据库。通常每个应用程序会对应创建一个独立的数据库。
●在实际应用中,我们会根据业务需求在数据库中建立多张表,用于存储各类实体数据。具体来说,数据库服务器、数据库和表之间形成如下层级关系:

●存储引擎
●存储引擎是指数据库管理系统中实现数据存储、索引建立以及数据更新、查询等核心功能的技术架构。
查看存储引擎
show engines
大部分情况下用的都是innodb
- 需要事务支持:必须选择InnoDB
- 读多写少:考虑MyISAM,但要权衡锁问题
- 临时数据处理:Memory引擎适合短期缓存
- 全文搜索:MyISAM原生支持,InnoDB需5.6+版本
- 高并发写入:优先InnoDB
三.数据库基本操作
库的操作

操作数据库的基本流程如下:
- 创建数据库
- 建立数据表结构
- 填充数据
从技术实现来看:
- 数据库本质上对应Linux系统中的一个目录
- 数据表则对应于该目录下的具体文件
整体架构遵循"数据库->表结构->数据"的三层逻辑关系
展示当前有哪些数据库
show databases;1.建立数据库
create database 此处写库的名字;选择数据库
use 数据库名字2.字符集和校验集
创建一个使用utf8字符集的 db2 数据库
create database db2 charset=utf8;
创建一个使用utf字符集,并带校对规则的 db3 数据库
create database db3 charset=utf8 collate utf8_general_ci;字符集和校验规则
查看系统默认校验集和字符集字符集设置 charset 校验集设置 collate
显示数据库语句
show create database 数据库名;3.修改数据库
ALTER DATABASE db_name对数据库主要修改就是 修改字符集和校验集
4.数据库删除
DROP DATABASE [IF EXISTS] db_ name;删除操作执行后,系统将彻底移除该数据库:
- 数据库列表中将不再显示该数据库
- 对应的数据库文件目录会被完整删除
- 该数据库包含的所有数据表都会被级联删除
5.备份和恢复
备份
mysqldump -P3306 -u root -p 密码 -B 数据库名 > 数据库备份存储的文件路径恢复
mysql> source 路径;
查看连接情况
show processlist四.表的基本操作
1.创建表
CREATE TABLE table_name (
field1 datatype,
field2 datatype,
field3 datatype
) character set 字符集 collate 校验规则 engine 存储引擎;field 指代列名
datatype 用于指定列的数据类型
character set 定义字符集,如未显式指定则默认采用数据库的字符集
collate 设置校验规则,如未显式指定则默认采用数据库的校验规则
2.查看表结构
desc 表名;3.修改表
修改表结构需要把
i 增添结构
ALTER TABLE tablename ADD (column datatype [DEFAULT expr][,column
datatype]...);ii 更改结构
ALTER TABLE tablename MODIfy (column datatype [DEFAULT expr][,column
datatype]...);iii 删除结构
ALTER TABLE tablename DROP (column);iv.更改表名
mysql> alter table oldname rename to newname;4.向表内添加数据
insert into tablename /如果不填表结构 默认value全要写上/ values();5.删除表
DROP [TEMPORARY] TABLE [IF EXISTS] tbl_name [, tbl_name]五.数据类型
1.数值类型

1.bit类型
bit[(M)] : 位字段类型。M表示每个值的位数,范围从1到64。如果M被忽略,默认为1。
bit 类型内的数值默认以 ascll码的形式展现,0-64个bit位
![]()
![]()
2.小数类型
float
float[(m, d)] [unsigned] : M指定显示长度,d指定小数位数,占用空间4个字节
小数类型如果插入 数据与设定的长度不符合 会插入失败,但如果是小数位多位会进行四舍五入。
有符号情况下float(4,2)表示范围就是 -99.99-99.99 如果插入类似 50.555这样的数 存储后会变为 50.56
无符号范围为00.00-99.99
float的精度大约为7位,float类型的精度并不高 如果存储小数过长会导致 丢失精度 这是需要高精度的小数类型
decimal
decimal的精度很高,可以满足高精度的需求
decimal(m, d) [unsigned] : 定点数m指定长度,d表示小数点的位数
2.字符串类型
1.定长char
char(L): 固定长度字符串,L是可以存储的长度,单位为字符,最大长度值可以为255


如果插入的字符串高于 设定的长度会插入失败
2.变长字符串类型 varchar
varchar(L): 可变长度字符串,L表示字符长度,最大长度65535个字节
和char一样超过设定的长度会插入失败
3.varchar 和char之间的区别
| 实际存储 | char(4) | varchar(4) | char占用实际字节 | varchar占用实际字节 |
|---|---|---|---|---|
| abcd | abcd | abcd | 12 | 13 |
| A | A | A | 12 | 4 |
| abcde | 插入失败 | 插入失败 |
char的字节是固定的,而varchar的字节是根据插入数据大小而改变的,当字符小于设定的字符长度,varchar根据当前字符数目 占用字节长度
当我们的表的编码是utf8时,varchar(n)的参数n最大值是65532/3=21844[因为utf中,一个字符占 用3个字节],如果编码是gbk,varchar(n)的参数n最大是65532/2=32766(因为gbk中,一个字符 占用2字节)。
之所以最大字节长度是65532 而不是65535是因为 有三个字节被用来记录当前数据的大小,所以有效字节是65532;
3.日期类型和时间类型
date : 日期 'yyyy-mm-dd' ,占用三字节datetime: 时间日期格式 'yyyy-mm-dd HH:ii:ss' 表示范围从 1000 到 9999 ,占用八字节timestamp :时间戳,从1970年开始的 yyyy-mm-dd HH:ii:ss 格式和 datetime 完全一致占用四字节
timestamp时间戳会自动记录当前数据插入的时间;
4.set和enum
枚举类型和集合类型
先举个例 枚举类型就是选择题的单选题,集合就是多选(可以多选一)

比如性别用枚举类型,只能选择男或女进行插入,或者用数字下标插入,默认起始数字是1;

set类型


对于set插入时也可以用数字,但是这个数字是位图
篮球足球赛车乒乓球睡觉
0 0 0 0 1
比如上列,则对应的数字就是16;对应10000;
查找
默认查找set是严格匹配的,如果查找篮球 就只会出现 只有篮球这一个爱好的列;
如果想要查找所有包含篮球的列,就需要用mysql的函数

六.表的约束
1.空属性NOT NULL
2.default默认值
默认值:某一种数据会经常性的出现某个具体的值,可以在一开始就指定好,在需要真实数据的时候, 用户可以选择性的使用默认值。
默认值就是当插入数据时,未写入数据内容就会插入设定的默认值
注:default可以和not null一起使用 ,并不矛盾
3.comment
mysql> create table tt12 (
-> name varchar(20) not null comment '姓名',
-> age tinyint unsigned default 0 comment '年龄',
-> sex char(2) default '男' comment '性别'
-> );类似于语言中的注释 用于解释这一列的属性是什么意思,但查看表结构不会显示
4.zerofill
是一种补齐0的约束
比如int(10) 类型 如果约束zerofill 插入的数据不足十位就会 补0 直到有10位
5.主键 primary key
主键:primary key用来唯一的约束该字段里面的数据,不能重复,不能为空,一张表中最多只能有一个 主键;主键所在的列通常是整数类型
mysql> create table tt13 (
-> id int unsigned primary key comment '学号不能为空',
-> name varchar(20) not null);当表建好后,如果没有主键可以追加主键,但要保证设定主键的列 不能有重复的数据
alter table 表名 add primary key(字段列表) 增
alter table 表名 drop primary key; 删
一个表只能有一个主键 ,但是多个字段可以拥有一个主键 ,叫做复合主键。
只有插入这两个字段内数据完全一样的数据才会插入失败,部分相同不会插入失败。
6.自增 auto_increment
auto_increment:当对应的字段,不给值,会自动的被系统触发,系统会从当前字段中已经有的最大值 +1操作,得到一个新的不同的值。通常和主键搭配使用,作为逻辑主键。
1.任何一个字段要做自增长,前提是本身是一个索引(key一栏有值)2.自增长字段必须是整数3.一张表最多只能有一个自增长
7.唯一键 unique
类似主键,但唯一键可以有多个,而且唯一键允许为空,并且可以多个为空,空之间不做唯一键比较。
主键和唯一键的关系就像是 身份证和学号,都不能重复,但主键只能有一个,为了保证学号唯一就需要唯一键,或者身份证号不能为空,学号可以为空这种情况,都需要唯一键
8.外键
foreign key (字段名) references 主表(列)


