目录
引言
数据库是每一个资深程序员都必须要掌握的知识,今天我就来带大家从0开始学习MySQL的基础知识、库/表操作和数据类型的选择,带大家入门MySQL数据库。
1、MySQL基础知识
什么是数据库?
数据库简单来说就是用来一个用来存储数据的仓库,它的底层也是目录和文件。此时就有了一个疑问:文件已经有了存储文件的能力,为什么还要数据库呢?一般的文件确实提供了数据的存储功能,但是文件并没有提供非常好的数据管理能力,我们对于存储数据不仅仅要求其能存起来,还要能帮我们管理,方便以后的增删查改。
文件保存数据有以下几个缺点:
1、文件的安全性问题。
2、文件不利于数据查询和管理。
3、文件不利于海量存储数据。
4、文件在程序中控制不方便。
你可以把数据库想象成一个超级智能的电子文件柜:
1、有结构:不是随便堆在一起,而是分门别类、有条理地存放。比如一个学校数据库里,学生信息、课程信息、成绩信息各自放在不同的"抽屉"里。
2、能管理:不只是存,还能快速查找、修改、删除、统计。比如"找出所有数学成绩大于90分的学生",几毫秒就能给你结果。
3、可共享:多个用户或程序可以同时使用,并且保证数据不冲突、不丢失。
4、持久化:数据存在硬盘上,关机重启也还在,不像内存里的数据一断电就没了。
MySQL就是一种数据库,MySQL是目前市面上最主流的数据库之一,绝大部分的公司和个人都会选择用MySQL来作为自己程序的数据库。它的本质是一种基于C(mysql)S(mysqld)模式的一种网络服务。
数据库的格式
数据库在客户端的格式分为三层;最外层是MySQL服务器,一个服务器里有多个数据库;中间层是数据库,每一个数据库里可以存储多张表;核心层是表,表负责存储各种数据。

2、库/表操作
接下来我们来学习数据库和表的操作,先来学习如何进入数据库,通过在命令行输入以下指令进入数据库服务器,进入服务器后,我们就可以通过指令对数据库进行操作了
//‘-u’指名登录用户
//‘-p’指名输入密码登录
mysql -uroot -p

库操作
进入服务器后,我们可以先查看当前有多少个数据库,我们可以通过一个SQL语句来显示当前服务器内的所有数据库。记住,数据库操作中的所有语句都要带分号。
//显示当前所有的数据库
show databases;

这上面大部分数据库都是系统自带的,那个名为project1的数据库是我自己创建的,如何创建一个新数据呢?通过以下SQL语句来实现
//创建数据库 //要创建的数据库名字
create database db_name;
删除数据库
//删除数据库
create database db_name;
进入数据库
//进入数据库
use db_name;
查看当前在哪个数据库
//查看当前在哪个数据库
select database();
编码集
创建数据库时,有两个编码集:
1、数据库编码集 - - 数据库未来存储数据时采用的编码集
2、数据库校验集 - - 支持数据库进行字段比较,使用同样的编码,也就是读取数据库中数据时采用的编码格式。
数据库无论对数据做任何操作,都必须保证操作的编码是一致的。在通常情况下,数据库默认的编码集都是utf-8,如果想改变数据库的编码格式,创建数据库时就要指名创建什么编码格式的编码。
//查看所有编码格式
show character set;
通过查看所有编码格式的指令我们可以查看当前数据库支持的所有编码格式。

此为截取的一部分编码格式,第一个红框表示编码集名称,第二个红框表示校验集名称,我们以gbk为例,则创建一个编码格式为gbk的数据库的指令为:
create database db_name
character set gbk //编码为gbk
collate gbk_chinese_ci; //校验码为gbk_chinese_ci
表操作
创建一张表
create table(
//表的字段信息
...
);
查看表的详细信息
//查看表的详细信息
desc tb_name;

修改表
//1、修改表名
ALTER TABLE 旧表名 RENAME TO 新表名;
//或者
RENAME TABLE 旧表名 TO 新表名;
//2、修改字段(修改列)
ALTER TABLE 表名 MODIFY 字段名 新类型 [约束];
//3、添加字段(列)
ALTER TABLE 表名 ADD 字段名 类型 [约束] [FIRST | AFTER 某字段];
//4、删除字段
ALTER TABLE 表名 DROP 字段名;
3、数据类型

之前在我们学习C语言或C++时,如果将一个类型与变量本身类型不符的数据存入变量中,编译器往往会通过隐式类型转换或者是截断之类的方法来将数据存储进去,但是在MySQL中,如果我们向MySQL特定的类型中插入不合法的数据,MySQL一般会直接拦截我们,不让我们做对应的操作。反过来,如果一个数据被成功插入,说明它一定是合法的。在MySQL里,数据类型本身也是一种约束
bit类型
位字段类型,M代表每个值的位数,范围为1~64,如果M值被忽略,默认为1,写法为
bit(M)
浮点类型
MySQL中浮点类型总共有三种,除了我们熟悉的float和double之外,还有一个decimal类型。decimal类型与前两者的区别是:在存储数据个数上,decimal能存储的数字位数最少;在数据精度上,decimal存储的数据精度会比float和double更高,更精确。三者的写法格式相等,m表示浮点数的长度上限,n代表保留的小数位数
float(M,N) //约±3.4×10³⁸位,精度范围为7
double(M,N) //约±1.8×10³⁰⁸位,精度范围为15~17
decimal(M,N) //由 M,D 决定,最大 65 位,精确数字
字符类型
char,固定长度字符串类型,创建表时写了多少后面无法改变,长度最大不能超过255个字符。
varchar,可变长度字符串类型,最大长度65535个字节,21845个字符。varchar的可变体现在,varchar在创建表时规定的长度为字符串最大长度,实际上在插入数据时数据有几个字节就分配几个字节的空间,但char的长度为固定值,无论插入的数值有多短,都会开固定长度的空间。
| 实际存储 | char(4) | varchar(4) | char占用字节 | varchar占用字节 |
| abcd | abcd | abcd | 4*3=12 | 4*3+1=13 |
| A | A | A | 4*3=12 | 1*3+1=4 |
| Abcde | × | × | 数据超过长度 | 数据超过长度 |
那么,在实际使用时,该如何选择使用定长或变长字符串呢?
1、如果数据确定长度都一样,就用char,如:身份证,手机号
2、如果数据长度有变化,就用varchar,如:姓名,地址
3、定长的磁盘空间比较浪费,但是效率高。变长的磁盘空间比较节省,但是效率低
4、定长的意义是直接开辟好对应的空间。变长的意义是,在不超过自定义范围的前提下,用多少,开多少。
enum
枚举类型,enum中可以定义多个常量,插入数据时即可以插入对应的常量,也可以写对应常量的下标,下标从一开始,只可以选择一个。
set
集合类型,也可以定义多个常量,但是在插入时不仅可以插入一个常量,也可以插入多个常量,以逗号做分隔符,前提是常量都是存在的。
set类型也支持数字插入,但这里的数字并不表示下标,而是做位图结构表示,有几个常量,就有对应的几个比特位,比特位为1,代表有该数据,为0则为无该数据。
结语
好了,到这里这篇 MySQL 基础就聊得差不多了。从数据库概念、库表操作,到字段类型的选择,咱们把地基过了一遍。别看内容基础,真正写项目时,很多坑恰恰出在这些地方——比如金额用了 double、库表编码不统一。希望这篇能帮你少踩几个坑。后面还有查询、索引、事务等更精彩的内容,咱们下篇见。
671



被折叠的 条评论
为什么被折叠?



