MySQL基础知识(一)
文章目录
00 MySQL安装
Windows下通过MySQL Installer安装MySQL服务
01 数据库介绍
1.1 什么是数据库
存储数据用文件就可以了,为什么还要弄个数据库?
文件保存数据有以下几个缺点:
-
文件的安全性问题
-
文件不利于数据查询和管理
-
文件不利于存储海量数据
-
文件在程序中控制不方便
数据库存储介质:
- 磁盘
- 内存
为了解决上述问题,专家们设计出更加利于管理数据的软件------数据库,它能更有效的管理数据。数据库可以提供远程服务,即通过远程连接来使用数据库,因此也称为数据库服务器。
1.2数据库分类
数据库大体可以分为关系型数据库 和非关系型数据库
-
关系型数据库(RDBMS):
是指采用了关系模型来组织数据的数据库。简单来说,关系模型指的就是二维表格模型,而一个关系型数据库就是由二维表及其之间的联系所组成的一个数据组织。
基于标准的SQL,只是内部一些实现有区别。常用的关系型数据库如:
- Oracle:甲骨文产品,适合大型项目,适用于做复杂的业务逻辑,如ERP、OA等企业信息系统。收费。
- MySQL:属于甲骨文,不适合做复杂的业务。开源免费。
- SQL Server:微软的产品,安装部署在windows server.上,适用于中大型项目。收费。
-
非关系型数据库:
(了解)不规定基于SQL实现。现在更多是指NoSQL数据库,如:
-
基于键值对(Key-Value):如memcached、redis
-
基于文档型:如mongodb
-
基于列族:如hbase
-
基于图型:如neo4j
关系型数据库与非关系型数据库的 区别:
关系型数据库 非关系型数据库 使用SQL 是 不强制要求,一般不基于SQL实现 事务支持 支持 不支持 复杂操作 支持 不支持 海量读写操作 效率低 效率高 基本结构 基于表和列,结构固定 灵活性比较高 使用场景 业务方面的OLTP系统 用于数据的缓存、或基于统计分析的OLAP系统 -
02 SQL分类
-
DDL数据定义语言,用来维护存储数据的结构
代表指令:
create,drop,alter
-
DML数据操纵语言,用来对数据进行操作
代表指令:
insert,delete,update
- DML中又单独分了一个DQL,数据查询语言,代表指令:
select
- DML中又单独分了一个DQL,数据查询语言,代表指令:
-
DCL数据控制语言,主要负责权限管理和事务
代表指令:
grant,revoke,commit
03 数据库操作
MySQL是一个客户端,服务器结构的程序,MySQL的服务器是真正的本体,负责保存和管理数据,数据都是存储在硬盘上的。
操作数据库的命令,也就是"SQL语句",也可以理解为一种编程语言。
说明:操作数据库的时候,数据库对于字母的大小写不敏感,也就是说可以大写也可以小写。
3.1显示数据库
语法:show databases;
3.2创建数据库
语法:create database 数据库名字;
- 注意点就是,我们创建的数据库不能同名。
这里有解决方法:
就是在创建的时候加上修饰if not exists
来解决问题。如图:
它也是可以适用于我们以后创建数据库保险一点的操作,因为在实际工作中,很多时候我们是将一系列的sql写到一个文件中,批量执行的,很少会一行一行去执行,那么在批量执行的情况下,要是其中有一条sql语句写错了,后续的失去了语句就无法继续执行了。
创建数据库的时候,可以手动指定一下字符集
语法:character set 字符集名字
亦或是:charset 字符集名字
- 当我们创建数据库没有指定字符集和校检规则的话,系统会默认使用默认字符集:
utf8
,校检规则是:utf8_general_ci
- 如果我们需要在数据库中保存中文,因为MySQL默认字符集是拉丁文,并不支持中文,所以我们必须在创建数据库的时候,手动将编码方式指定为支持中文的编码。(GBK、UTF8)
- MySQL中的
utf8
其实是一个残本,不是完全体的utf8
,少了一些复杂的中文,以及一些emoji表情,若想在MySQL中使用utf8
的完全体,则我们需要输入utf8mb4
.
3.3选中数据库
语法:use 数据库名字;
数据库最重要的操作,就是针对表进行增删改查。表是属于数据库的,要针对表操作,就要先把哪个数据库的表这个事情搞清楚!
3.4删除数据库
语法:drop database 数据库名;
删除操作,删掉的不仅仅是database
,而且也删除了database
中的所有表,还有表里的所有数据。
那不然怎么经常有:从删库到跑路这句话呢~🐶🐶🐶
04 常用数据类型
MySQL中支持的数据类型。
一个表,包含很多行,每一行也称为一条记录。一个行里可以有很多列,每一列也称为是一个字段。每个列都是有一个具体类型的。
4.1数值类型
bit(m) | m指定位数,默认1 | 二进制数,m范围1-64,存储数值范围0-2^m-1 | 常用boolean对应bit,此时默认是1位,即只能存0和1 |
---|---|---|---|
tinyint | 1 | byte | |
smallint | 2 | short | |
int | 4 | integer | |
bigint | 8 | long | |
float(m,d) | 4 | 单精度,m指定长度,d指定小数位数。会发生精度丢失 | float |
double(m,d) | 8 | double | |
decimal(m,d) | m/d最大值+2 | 双精度,m指定长度,d指定小数位数。精确数值 | bigdecimal |
numeric(m,d) | m/d最大值+2 | 双精度,m指定长度,d指定小数位数。精确数值 | bigdecimal |
拓展:
-
数值类型可以指定为无符号(unsigned),表示不取负数。
-
1字节(bytes)= 8bit。
-
对于整型类型的范围:
-
有符号范围:-2^(类型字节数*8-1)到2^(类型字节数*8-1)-1,如int是4字节,就
是-2^31到2^31-1
-
无符号范围:0到2^(类型字节数*8)-1,如int就是2^32-1
-
-
尽量不使用unsigned,对于int类型可能存放不下的数据,int unsigned同样可能存放不下,与其
如此,还不如设计时,将int类型提升为bigint类型。
4.2字符串类型
数据类型 | 大小 | 说明 | 对应Java类型 |
---|---|---|---|
varchar(size) | 0-65535字节 | 可变长度字符串 | String |
text | 0-65535字节 | 长文本数据 | String |
mediumtext | 0-16777215字节 | 中等长度文本数据 | String |
blob | 0-65535字节 | 二进制形式的长文本数据 | byte[] |
关于上表的一些小解读:
4.3日期类型
数据类型 | 大小 | 说明 | 对应Java类型 |
---|---|---|---|
datetime | 8字节 | 范围从1000到9999年,不会进行时区的检索及转换。 | java.util.Date、java.sql.Timestamp |
timestamp | 4字节 | 范围从1970到2038年,自动检索当前时区并进行转换。 | java.util.Date、java.sql.Timestamp |