mysql基本介绍,截止到类型float的一部分介绍

目录

一、MySQL 基础概念与架构

二、MySQL 库的操作

三、MySQL 表的操作

四、MySQL 表操作与数据类型

五、总体小结

## 一、MySQL 基础概念与架构

MySQL 是关系型数据库管理系统(RDBMS);mysqld 是服务端守护进程;mysql 是客户端命令行工具。

mysql 作为一种网络服务,是 C/S 模式,

mysql 是一套给我们提供数据存取服务的网络程序,

数据库一般指的是在磁盘或内存中存储的、有一定结构的、有组织的数据,也就是存放在磁盘上存储的一套数据库方案。

mysql的出现原因:一般文件存储也提供了数据的存储,但是文件并没有提供非常好的数据管理能力,数据库的本质是对数据内容管理的一套解决方案。

工作过程:mysql 向 mysqld 发送请求,mysqld 在磁盘中调用数据文件,对数据进行分析,然后将处理完的数据返回给 mysql。

所谓创建数据库,本质就是创建文件夹,在数据库创建表,本质就是在指定目录下创建文件。

数据库本质就是文件,只是这些文件并不由程序员直接操作,而是由数据库服务帮我们操作。

库中存的表是二进制文件。

真实情况:MySQL 8.0 起表的元数据不再使用 .frm 文件,统一存入 InnoDB 数据字典表;InnoDB 默认 innodb_file_per_table 开启时,每张表是一个 .ibd 文件,含数据加索引。"一个表等于一个二进制文件"不是通用结论。

mysql 分三层:连接层〔网络连接、权限认证和安全管理〕、对语法和词法的分析层和存储引擎层

其实:规范分层是连接层、Server 服务层、存储引擎层。其中"分析层"只是 Server 服务层里的一部分,即解析器、优化器、执行器;顺序也应写成连接层、服务层、引擎层。

(存储引擎:进行增删查改的核心层,不同引擎进行的功能不同

最底层就是将数据存入硬盘中。

更正:存储引擎负责数据存取,但 InnoDB 有 Buffer Pool 内存缓存,读写不是每次都直接落盘;持久性靠 redo log,回滚靠 undo log。说"最底层就是存硬盘"漏掉了缓存与日志。)

因此 mysql 就是基于 OS 的文件系统的一个文件系统。

存储引擎:可以根据我们所需挑选特定的引擎。

SQL 语句分类:

① DDL:维护存储数据的结构,对数据库和表的操作

② DML:对表的数据进行操作

③ DCL:用于权限管理

补充:这条本身对。补充:SQL 分类通常还有 TCL,即 COMMIT、ROLLBACK、SAVEPOINT 等事务控制语句;以及 DQL,即 SELECT 查询。只列 DDL、DML、DCL 三分法是不完整的。

二、MySQL 库的操作

创建数据库

create database if not exists xxx;

旁注:\[\] 叫可选选项(但实际输入时不用加 \[\])

旁注:xxx 是数据库名

旁注:〔后面可跟〕charset,这是指定编码集

sudo ls /var/lib/mysql/ ⇒ 前面是 linux 指令,其余的是 mysql 内部的指令

mysql -uroot -p

show databases 展现已有数据库

删除数据库

drop database xxx; ⇒ 要带上分号,删掉 xxx 数据库

更正:语法对,但笔记没写风险。它会连同库内所有表一起删除,且不可恢复。

创建/删除数据库的本质就是在 /var/lib/mysql 下创建或删除一个目录

更正:数据目录由 datadir 参数决定,多数发行版默认确实是 /var/lib/mysql,但不能当成"永远如此"。可用 SHOW VARIABLES LIKE 'datadir'; 确认。

创建数据库时,有两个编码集:

1、数据库编码集 ------ 存储时数据库编码用的格式

2、数据库校验集 ------ 管理数据库的比较与排序方法

在对一个数据库操作时必须保证编码格式的一致性。

默认使用的是 utf-8

更正:三处问题。第一,默认字符集随版本变化,5.7 默认 latin1,8.0 默认 utf8mb4。第二,MySQL 里的 utf8 是 utf8mb3 的别名,最多 3 字节,存不了 emoji,应使用 utf8mb4。第三,带连字符的 utf-8 不是 MySQL 的合法字符集名。

例:create database d4 charset=utf8 collate utf8_general_ci

旁注:charset=utf8 设置编码集

旁注:collate ... 设置校验集

use xxx ⇒ 进入这个数据库

进入后 show tables ⇒ 展现所有的表名

看表结构要用 desc 表名,或 show create table 表名\G。

desc person ⇒ 展现一个表的内部结构

## 三、MySQL 表的操作

边栏:

use xxx ------ 进入这个数据库+show tales就是展现所有表名

desc xxx ------ 查看一个表中的列属性

show tables ------ 显示这个库中所有表

create database xxx ------ 建一个库

drop database xxx; ------ 删除库

mysql -uroot -p ------ 登录

正文:

MySQL 表的操作

create table 表名 ( 变量名 类型 comment '注释', 变量名 类型 ... )

建表示例:

create table 表名(

**  字段1 类型 comment '注释',**

**  ...**

) charset=xxx collate=xxx engine=InnoDB;

旁注:表名 / 字符集 / 校验集 / 存储引擎

注意:charset 和 collate 不加会使用默认的

更正:方向对,但要说明默认值的来源,它继承服务器级和数据库级的默认设置。

desc 表名 ------ 查看一个表的信息

show create table 表名 \G ------ 查看创建表时的详细信息(所有属性)

由 \G 可以格式化

更正:\G 是 mysql 客户端的语句结束符,用来替代分号,作用是让结果竖排显示便于阅读。它是结束符,不是一个"格式化命令"。

修改表:

alter table xxx rename to xxx; ------ 修改表名

更正:正确。补充:RENAME TO 的 TO 可以省略,写成 ALTER TABLE a RENAME b; 同样合法。

alter table xxx add 变量名 类型; ------ 在表中加一个新变量

alter table xxx rename column 老名 to 新名; ------ 修改列名

更正:语法对,但 RENAME COLUMN 需要 MySQL 8.0 及以上;5.7 及更早只能用 CHANGE 老名 新名 类型。

alter table xxx drop 变量名; ------ 删除一列

alter table xxx modify 变量名 类型/属性 ------ 修改类型

更正:这条对,值得强调:MODIFY 只改类型和属性,不能改名。

alter table employee change xxx xxx ------ 修改字段(改名加改类型,类型也要改)

更正:对,但 CHANGE 必须把新类型完整写出来,不能省略。

## 四、MySQL 表操作与数据类型

drop table xxx ------ 删除表

更正:语法对,但 DDL 会隐式提交事务、无法回滚,删表前应确认或先备份。

DDL:对表结构的操作

DML:对数据库中数据的操作

DCL:管理权限

数据类型

※ 声明 类型

mysql 中整型有符号、无符号 / unsigned(即 tinyint unsigned)也有 tinyint(占 1 字节)

更正:tinyint 占 1 字节是正确的,1 字节等于 8 bit。

一是约束:mysql的特定类型不会存非法数据,mysql 会直接拦截用户的非法输入,保证数据的有效性。

bit 类型 ( )中是位的个数

更正:"括号中是位的个数"是对的。bit(M) 的 M 就是位数,范围 1 到 64,默认 1。

float(显示长度,小数点精度)> 4 字节

更正:第一,float(M,D) 这种写法在 MySQL 8.0.17 起已被废弃、会产生警告,建议直接用 float,要精确小数用 decimal(M,D),金额场景尤其如此。第二,字节数方面 float 是 4 字节(单精度),double 是 8 字节,笔记写 4 字节是对的。

(只是对float类型)使用 unsigned 时,负数范围直接砍掉,其余不变。

## 五、总体小结

架构:mysql 客户端到 mysqld 服务端,再到存储引擎,最后落到磁盘文件,中间还有 Buffer Pool 缓存与 redo、undo 日志。

库表本质:库对应数据目录下的目录,表对应文件,但 8.0 后表结构元数据已改为集中存放在数据字典中。

字符集与校验集:charset 管"怎么存",collate 管"怎么比、怎么排";默认值随版本与层级变化,生产环境建议显式写 utf8mb4 加 utf8mb4_general_ci。

DDL、DML、DCL:改结构、改数据、管权限,另需知道 TCL 与 DQL。

修改列:MODIFY 不改名,CHANGE 可改名但必须写全类型。

最需要优先记住的 5 条

1、sudo cd 不成立。cd 是内建命令,提权对它无效。

2、校验集 collate 不是"管理编码格式",它管的是比较与排序。

3、建表写 character=xxx 是错的,应为 charset= 或 character set。

4、unsigned 不是"其余不变",而是正数上限翻倍。

5、float 是 4 字节,double 是 8 字节;float(M,D) 写法已废弃,金额用 decimal(M,D)。

相关推荐
高级程序源1 小时前
django校企合作实习基地管理系统82506-计算机课程设计、毕业设计
vue.js·后端·python·mysql·django·课程设计·pygame
dkbnull1 小时前
数据库性能调优详解
数据库·mysql
yxlalm2 小时前
对话记忆持久化-Redis热与MySQL冷
android·redis·mysql
冰暮流星2 小时前
mysql多表练习2
数据库·sql·mysql
风哥2号11 小时前
数据库教程FGMT27‑MySQL数据库基础知识与体系架构
数据库·mysql
风哥2号14 小时前
数据库教程FGMT43‑MySQL性能分析与优化调整
数据库·mysql
默 语17 小时前
Java新手入门:从零开始安装JDK并配置环境变量
java·开发语言·python·mysql·group by·1024程序员节·数据去重
用户30745969820717 小时前
MySQL EXPLAIN 零基础完全精通指南:从"看不懂"到"会优化"
mysql
这个DBA有点耶18 小时前
自增主键用尽了怎么办?INT溢出、在线迁移与预防策略全解析
数据库·mysql·代码规范