MySQL基础篇(一):数据库相关、数据类型
[TOC]
一、初识数据库
学习 MySQL之前一定要了解数据库,数据库管理系统和SQL之间的关系。
数据库
为了解决文件保存数据中的安全性和稳定性的问题,从而按照数据结构来组织、存储和管理数据的仓库,即长期存储在计算机内、有组织的、可共享的大量数据的集合,简称DB。
数据库管理系统
- 概念
一种操纵和管理数据库的大型软件,用于建立、使用和维护数据库。即位于用户和操作系统之间的一层数据管理软件,是基础软件,是一个大型复杂的软件系统,简称DBMS。
分类
- 关系型数据库:采用了关系模型来组织数据的数据库。 简单来说,关系模型指的就是二维表格模型,而一个关系型数据库就是由二维表及其之间的联系所组成的一个数据组织。
- 常见的关系型数据库:SQL Sever ,MySQL ,Oracle。
- 类似于excel 表格的方式来存储的。
- 非关系型数据库:存储方式比较灵活,功能更少,性能更快,能够更好的适应分布式开发环境
- Redis,HBase....
- 概念
- SQL语言
操作关系型数据库的编程语言,定义了一套操作关系型数据库的统一标准,简称SQL。
我们可以通过SQL来操作数据库管理系统,然后再通过数据库管理系统来操作数据库和数据库当中的数据。
二、详解MySQL
MySQL逐渐成为了最受欢迎的关系型数据库,无论你是前端,亦或是Java、Go、Python、C/C++、PHP....等这些语言的程序员,对于MySQL是必然要掌握的核心技术之一,下面我们来正式介绍MySQL。
- MySQL是一个客户端 - 服务器结构的软件,安装MySQL时已经将客户端和服务器都安装好了。
客户端和服务器,可以在一个主机上,也可以在不同的主机上,两者之间通过网络来通信。
MySQL的客户端和服务器之间的连接关系如下:
- 主动发送数据的一方为客户端,被动接收方为服务器。
- 客户端给服务器发送数据叫做请求,服务器给客户端返回数据叫做响应。
- 一个服务器可以给多个客户端提供服务。
MySQL默认只允许在服务器本机 使用 root 用户登录,要开启 root 用户的远程登录,在MySQL服务器
本机执行:
mysql -uroot -p
要求输入密码,没有设置密码则直接回车.
C:\Users>mysql -uroot -p Enter password: ****** Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 3 Server version: 5.7.27-log MySQL Community Server (GPL) Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql>
如果无法正常显示,需要检查MySQL服务器是否正常运行并重新启动MySQL服务器
MySQL 存储引擎
MySQL 支持多种存储引擎,你可以通过
show engines;
命令来查看 MySQL 支持的所有存储引擎。
从上图我们可以查看出, MySQL 当前默认的存储引擎是 InnoDB。并且,所有的存储引擎中只有 InnoDB 是事务性存储引擎,也就是说只有 InnoDB 支持事务。
MySQL 5.5.5 之前,MyISAM 是 MySQL 的默认存储引擎。5.5.5 版本之后,InnoDB 是 MySQL 的默认存储引擎 , 你可以通过
select version();
命令查看你的 MySQL 版本。
mysql> select version(); +------------+ | version() | +------------+ | 5.7.27-log | +------------+ 1 row in set (0.00 sec)
也可以通过
show variables like '%storage_engine%';
命令直接查看 MySQL 当前默认的存储引擎。
mysql> show variables like'%storage_engine'; +----------------------------------+--------+ | Variable_name | Value | +----------------------------------+--------+ | default_storage_engine | InnoDB | | default_tmp_storage_engine | InnoDB | | internal_tmp_disk_storage_engine | InnoDB | +----------------------------------+--------+ 3 rows in set, 1 warning (0.04 sec)
三、简单的库操作
- 设置数据库的编码字符集
MySQL默认的编码字符集是gbk和latin1,这两种字符集不支持中文, 需要我们去将这两种字符集修改为utf8或者utf8mb4。
- 修改MySQL 默认 配置文件 my.ini 中的两部分内容。
- 重启MySQL服务器即可
修改之后的效果:
创建数据库
- 语法:
create database 数据库名;
- 示例:
mysql> create database mytestdb; Query OK, 1 row affected (0.02 sec)
也可写为:
create database if not exists mytestdb;
IF NOT EXISTS
是语句的可选子句。IF NOT EXISTS
子句可防止创建数据库服务器中已存在的新数据库的错误。不能在MySQL数据库服务器中具有相同名称的数据库。也可以在创建数据库时,指定字符集utf8。
mysql> create database mytestdb charset utf8; Query OK, 1 row affected (0.02 sec)
显示数据库
SHOW DATABASES
语句显示MySQL数据库服务器中的所有数据库。可以使用SHOW DATABASES
语句来查看您要创建的数据库,或者在创建新数据库之前查看数据库服务器上的所有数据库。mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | dorinf | | mysql | | mytestdb | | performance_schema | | stuinfosystem | | sys | +--------------------+ 11 rows in set (0.00 sec)
在此MySQL数据库服务器当中有7个数据库information_schema,dorinf , mysql ,performance_schema,sys 是我们在安装MySQL时可用的默认数据库,其余的是我们新创建的数据库。
使用数据库
在使用指定数据库之前,必须通过使用
USE
语句告诉MySQL要使用哪个数据库。mysql> use mytestdb; Database changed
从现在开始,所有操作(如查询数据,创建新表或调用存储过程)都将对当前数据库(即
mytestdb
产生影响。也可以使用
select database();
用来查询当前使用的数据库。mysql> select database(); +------------+ | database() | +------------+ | mytestdb | +------------+ 1 row in set (0.00 sec)
删除数据库
删除数据库意味着数据库中的所有数据和关联对象将被永久删除,并且无法撤消。 因此,实际使用当中要格外注意。
mysql> drop database mytestdb ; Query OK, 0 rows affected (0.00 sec)
四、MySQL数据类型
数据库表包含具有特定数据类型(如数字或字符串)的多个列。 MySQL提供更多的数据类型,而不仅仅是数字或字符串,在实际使用中经常用到。
数值类型
数据类型 内存大小 指定值和范围 对应的Java数据类型 BIT(M) M指定位数,默认为1 二进制数M范围从1-64,存储数值范围从0 - 2^M - 1 Boolean TINYINT 1 1字节整数值,支持0~255的整数 Byte SMALLINT 2 2字节整数值,支持-32768-32767的整数 Short INT 4 4个字节的整数值,支持-2147483648 - 2147483648的数 Integer BIGINT 8 整数值,支持-9223372036854775808~9223372036854775807的数 Long FLOAT(M,D) 4字节 单精度,M指定长度,D指定小数位数,会发生精度丢失 Float DOUBLE(M,D) 8 双精度, M指定长度,D指定小数位数。会发生精度丢失 Double DECIMAL(M,D) M/D最大值+2 双精度,M指定长度,D表示小数点位数,精确数值 BigDecimal NUMERIC(M,D) M/D最大值+2 和DECIMAL一样 Big Decimal - MySQL没有内置的 BOOLEAN 或 BOOL 数据类型。所以要表示布尔值,MySQL使用最小的整数类型,也就是
TINYINT(1)
。 换句话说,BOOLEAN
和BOOL
是TINYINT(1)
的同义词。 - 数值类型可以指定为无符号(unsigned),表示不取负数。
- MySQL没有内置的 BOOLEAN 或 BOOL 数据类型。所以要表示布尔值,MySQL使用最小的整数类型,也就是
字符串类型
在MySQL中,字符串可以容纳从纯文本到二进制数据(如图像或文件)的任何内容.
数据类型 大小(字节) 说明 对应的Java类型 varchar(size) 0-65535 可变长度字符串 String char(size) 0-255 定长字符串 String text 0-65535 长文本数据 String mediumtext 0-16777215 中等长度文本数据 String blob 0-65535 一个小的BLOB(二进制大对象) byte[] - 变长的元素使用varchar性能更优,固定长度的元素使用char 性能更优。
- 日期类型
MySQL提供日期和时间的类型以及日期和时间的组合。 此外,MySQL还支持时间戳、数据类型,用于跟踪表的一行中的更改。
类型 | 大小 | 格式 |
---|---|---|
DATE | 3 | YYYY-MM-DD |
TIME | 3 | hh:mm:ss |
YEAR | 1 | YYYY或YY格式的年值 |
DATETIME | 8 | YYYY-MM-DD hh:mm:ss 格式的日期和时间值 |
TIMESTAMP | 4 | YYYY-MM-DD hh:mm:ss 格式的时间戳记值 |
获取当前的系统时间戳
mysql> select now();
+---------------------+
| now() |
+---------------------+
| 2022-12-07 21:00:39 |
+---------------------+
1 row in set (0.01 sec)