从零开始的云计算生活——第二十四天,重起航帆,初见MySQL数据库
一.故事剧情
接下来要进入到一条比较长的路——mysql数据库,之后会用一段时间来学习mySQL数据库的内容,今天先从基础开始介绍mysql数据库。
二.MySQL数据库概述
1.数据库概念
数据库(Database)
简称DB,按照一定格式存储数据的一些文件的组合,顾名思义就是存储数据的仓库,实际上就是一堆文件。这些文件中存储了具有特定格式的数据 。数据库管理数据有诸多优点,如降低存储数据的冗余度,存储的数据可以共享,便于维护数据完整性,能够实现数据的安全性等。数据库的发展经历了萌芽、初级、中级、和高级阶段。
数据库管理系统(DateBase Management System)
简称DBMS,数据库管理系统是专门用来管理数据库中的数据的,可以对数据库当中的数据进行增、删、改、查 等操作,常见的数据库管理系统:MySql、Oracle、MS SQLServer(淘汰)、DB2、sysbase等…postgreSQL
SQL(Structured Query Language)
结构化查询语言,针对关系型数据库的一种语言;SQL 是一种操作数据库的语言,包括创建数据库、删除数据库、查询记录、修改记录、添加字段等。SQL在MySql中可以使用,同时在Oracle中也可以使用,在DB2中也可以使用 。
2.数据库的类型
关系型数据库(存储位置在磁盘)
-
MariaDB/MySQL
-
Oracle
-
DB2
-
MS SQLServer,只能用于windows系统
国产数据库
-
达梦
-
人大金仓
-
TiDB,分布式关系型数据库
NOSQL数据库
-
Redis,缓存数据库
-
MongoDB,文档型数据库
3.关系型数据库模型
-
层次模型
-
网状模型
-
关系模型
关系模型的相关概念:
-
实体(Entity) :实体是指现实世界中可以区分的对象,它可以是具体的人、事物或概念,也可以是抽象的物体。在数据库中,实体通常对应于表中的行,而表则实体的一种集合。例如,在一个学生信息管理系统中,学生、课程和教师都可以被视为实体。
-
属性(Attribute): 属性是实体的特征或性质,它提供了关于实体的具体信息。属性可以是简单的数据类型,如姓名、年龄或地址,也可以是更复杂的结构,如电话号码或电子邮件地址。在数据库中,属性通常对应于表中的列,每列代表实体的一种属性。例如,学生的姓名、学号和年龄都是学生的属性。
-
联系(Relationship): 联系描述了不同实体之间的关系。在现实世界中,实体之间往往存在各种形式的关联。在数据库中,联系通过关系表来实现,这个表通常包含两个或更多的实体作为表的列。例如,学生选修课程的关系表就包含了学生实体和课程实体的相关信息,描述了哪位学生选修了哪门课程。
在关系模型中,实体和联系通常通过以下三种类型来进一步分类:
-
一对一(1:1):这种联系表示两个实体之间存在一对一的关系,即每个实体只有一个相关的实体,反之亦然。例如,一个部门与一个负责人之间可能存在一对一的联系。
-
一对多(1:N):这种联系表示一个实体与多个实体相关,但每个相关实体只与一个实体相关。例如,一个教师可以教授多门课程,但每门课程只能由一个教师教授。
-
多对多(M:N):这种联系表示两个实体之间存在多对多的关系,即每个实体可以与多个实体相关,同时每个相关实体也可以与多个实体相关。例如,学生可以选修多门课程,同时每门课程也可以被多个选修。
在设计数据库时,正确地识别实体、属性和联系,以及它们之间的类型,对于创建一个结构良好、能够有效存储和检索数据的数据库至关重要。
4.关系数据库相关概念
-
库(Database): 库是一个存储数据的容器,它可以包含多个数据库。在某些管理系统中,库等同于数据库。
-
表(Table): 表是数据库中的一个表格,由行和列组成。表是存储数据的主要结构,每个表通常对应一个实体类型。表的列名称为属性,而表的行名称为记录。
-
行(Record): 行也称为记录,它是表中的一个单元,代表表中的一个具体实例。每一行包含了一组属性值,这些值共同描述了一个实体的状态。
-
列(Column): 列是表中的一列,它代表了表的一个属性。每列都有一个数据类型,用于定义存储在其中的数据的种类和格式。
-
字段(Field): 字段通常指的是表中的行与列的交叉点,它存储了单个数据项。在数据库中,每个字段都有其特定的数据类型和用途。
-
数据(Data): 数据是存储在数据库中的信息。它可以是文本、数字、日期、图像、声音等各种形式。数据是数据库管理和操作的核心。
二、MySQL数据库安装(CentOS7)
1.先下载安装源
https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.20-linux-glibc2.12-x86_64.tar.xz
2.解压安装
然后解压到/usr/local下,并重命名
然后新建用户和组(将数据库开在新建用户上可以保证对系统绝大部分位置是不可写的,这样当数据库被攻击时可以限制受到的影响)
3.文件授权
然后将mysql目录授权给用户mysql
然后去根下创建一个用来存放数据库数据的文件,并且授权
4.修改配置文件
然后去/etc/my.cnf修改配置文件(将原有的注释掉)
[mysqld]
bind-address=0.0.0.0
port=3306
user=mysql
basedir=/usr/local/mysql8
datadir=/data/mysql
socket=/tmp/mysql.sock
log-error=/data/mysql/mysql.err
pid-file=/data/mysql/mysql.pid
#character config
character_set_server=utf8mb4
symbolic-links=0
explicit_defaults_for_timestamp=true
lower_case_table_names=1[client]
default-character-set=utf8mb4
socket=/tmp/mysql.sock[mysql]
default-character-set=utf8mb4
socket=/tmp/mysql.sock
5.初始化信息
回到/usr/local/mysql8/bin/下,初始化基础信息,得到数据库的初始密码
参数: --basedir 为mysql解压目录,–datadir 为mysql数据存放目录。(注意安装路径是否一致)
6.创建MySQL服务
复制 mysql.server文件到/etc/init.d/并重命名为mysqld
此时启动mysqld服务,并检查状态
7.更改环境变量
然后再去/etc/profile,去编辑一下环境变量,再最下边加上
然后立即生效环境变量
8.登录数据库并改写密码
此时使用命令 mysql -uroot -p ,并且输入默认生成的密码即可进入数据库
第一次登录需要更改密码,需要满足复杂度要求
ALTER USER 'root'@'localhost' IDENTIFIED BY 'xxx';
此时使用命令,会提醒你更改密码,使用命令更改结束后即可使用命令。
三.mysqld数据库配置与命令
服务启动时读取的默认配置文件
mysqld操作命令
mysql命令
mysql数据库登录的命令行工具,本地登录时且root用户没有密码,输入mysql,等效于”mysql -uroot -hlocalhost -P3306“
mysql [options] db_name
常用选项
选项 | 含义 |
-u | 指定登录用户 |
-p | 指定用户密码 |
-h | 指定登录数据库的IP或者域名 |
-P | 指定登录数据库的端口号 |
-e | 能够在终端执行数据库指令 |
使用案例
#直接在外部执行查看数据库的命令
mysqladmin命令
语法
mysqladmin [options] command [command-arg] [command [command-arg]] ...
设置root用户密码
mysqladmin -uroot password '123.com'
使用密码登录
mysql -uroot -p123.com -h127.0.0.1 -P3306
四、默认数据库
information_schema
信息数据库,存储所有的库、表、列的名称,任意可登录数据库的用户都可读;sql注入
表名 | 作用 |
---|---|
CHARACTER_SETS | 字符集信息表。用于查看和管理MySQL数据库中的字符集信息。 |
CLIENT_STATISTICS | 客户端统计信息表。用于查看和管理客户端的统计信息,例如连接数、请求次数等。 |
COLLATIONS | 排序规则信息表。用于查看和管理MySQL数据库中的排序规则信息。 |
COLLATION_CHARACTER_SET_APPLICABILITY | 字符集和排序规则的适用性表。用于查看和管理字符集和排序规则之间的适用关系。 |
COLUMNS | 数据表的列信息表。用于查看和管理MySQL数据库中数据表的列信息。 |
COLUMN_PRIVILEGES | 列级别的权限信息表。用于查看和管理列级别的权限信息,例如用户对各个列的SELECT、INSERT、UPDATE等权限。 |
ENGINES | 存储引擎信息表。用于查看和管理MySQL数据库中支持的存储引擎信息。 |
EVENTS | 定时事件信息表。用于查看和管理MySQL数据库中的定时事件信息。 |
FILES | 文件信息表。用于查看和管理MySQL数据库服务器上文件的信息。 |
GLOBAL_STATUS | 全局状态信息表。用于查看和管理MySQL数据库服务器的全局状态信息。 |
GLOBAL_VARIABLES | 全局变量信息表。用于查看和管理MySQL数据库服务器的全局变量信息。 |
INDEX_STATISTICS | 索引统计信息表。用于查看和管理MySQL数据库中索引的统计信息。 |
KEY_CACHES | 键缓存表。用于查看和管理MySQL数据库中的键缓存信息。 |
KEY_COLUMN_USAGE | 键列使用表。用于查看和管理键列的使用情况。 |
PARAMETERS | 参数表。用于查看和管理MySQL数据库的参数信息,例如连接超时时间、最大连接数等。 |
PARTITIONS | 分区表。用于查看和管理MySQL数据库中的分区信息。 |
PLUGINS | 插件表。用于查看和管理MySQL数据库中的插件信息。 |
PROCESSLIST | 进程列表表。用于查看当前正在运行的MySQL进程,包括连接的客户端和正在执行的查询等。 |
PROFILING | 性能分析表。用于启用性能分析,记录和分析SQL查询的性能数据。 |
REFERENTIAL_CONSTRAINTS | 外键约束表。用于查看和管理外键约束的信息,包括外键列和参考列等。 |
ROUTINES | 存储过程和函数表。用于查看和管理MySQL数据库中的存储过程和函数的信息,包括创建时间、修改时间、函数名等。 |
SCHEMATA | 架构表。用于查看和管理MySQL数据库中的架构信息,包括架构名、架构下的表名等。 |
SCHEMA_PRIVILEGES | 架构权限表。用于查看和管理架构下的权限信息,包括用户对架构下表的SELECT、INSERT、UPDATE等权限。 |
SESSION_STATUS | 会话状态信息表。用于查看和管理当前会话的状态信息,例如会话的连接时间、查询时间等。 |
SESSION_VARIABLES | 会话变量表。用于查看和管理当前会话的变量信息,例如会话的最大连接数、最大内存使用量等。 |
STATISTICS | 统计信息表。用于查看和管理MySQL数据库中表的统计信息,包括表的行数、平均行大小等。 |
TABLES | 数据表信息表。用于查看和管理MySQL数据库中的数据表信息,包括表名、引擎类型等。 |
TABLESPACES | 存储空间表。用于查看和管理MySQL数据库中的存储空间信息,包括存储空间名、大小等。 |
TABLE_CONSTRAINTS | 表约束信息表。用于查看和管理表的约束信息,包括主键约束、外键约束等。 |
TABLE_PRIVILEGES | 表级别的权限信息表。用于查看和管理表级别的权限信息,例如用户对各个表的SELECT、INSERT、UPDATE等权限。 |
INNODB_CMPMEM_RESET | InnoDB 内存比较器重置表。此表用于记录 InnoDB 内存比较器(comparison memory)的清除操作。 |
INNODB_RSEG | InnoDB 重做段表此表用于记录 InnoDB 数据文件的重做段信息。 |
INNODB_UNDO_LOGS | InnoDB 撤销日志表。此表用于记录 InnoDB 撤销操作的日志信息。 |
INNODB_CMPMEM | InnoDB 内存比较器表。此表用于记录 InnoDB 内存比较器的分配和使用情况。 |
INNODB_SYS_TABLESTATS | InnoDB 系统表统计信息表。此表用于记录 InnoDB 系统表的统计信息,如数据量、碎片率等。 |
INNODB_LOCK_WAITS | InnoDB 锁等待信息表。此表记录 InnoDB 锁等待的情况,包括等待锁的线程 ID、等待时间等。 |
INNODB_INDEX_STATS | InnoDB 索引统计信息表。此表用于记录 InnoDB 索引的统计信息,如索引大小、索引列的数据类型等。 |
INNODB_CMP | InnoDB 比较器表。此表用于记录 InnoDB 比较器的分配和使用情况。 |
INNODB_CHANGED_PAGES | InnoDB 更改页表。此表用于记录 InnoDB 数据文件中已更改的页的信息。 |
INNODB_BUFFER_POOL_PAGES | InnoDB 缓冲池页表。此表用于记录 InnoDB 缓冲池中每个页的信息,包括页的类型、页的状态等。 |
INNODB_TRX | InnoDB 事务表。此表用于记录 InnoDB 事务的信息,如事务 ID、事务状态等。 |
INNODB_BUFFER_POOL_PAGES_INDEX | InnoDB 缓冲池页索引表。此表用于记录 InnoDB 缓冲池中每个页的索引信息。 |
INNODB_LOCKS | InnoDB 锁表。此表用于记录 InnoDB 锁的信息,如锁的类型、锁的持有者等。 |
INNODB_BUFFER_PAGE_LRU | InnoDB 缓冲池页 LRU 表。此表用于记录 InnoDB 缓冲池中每个页的最近最少使用(Least Recently Used,LRU)信息。 |
INNODB_SYS_TABLES | InnoDB 系统表信息表。此表用于记录 InnoDB 系统表的信息,如表名、表状态等。 |
INNODB_SYS_FIELDS | InnoDB 系统字段信息表。此表用于记录 InnoDB 系统表中每个字段的信息,如字段名、字段类型等。 |
INNODB_SYS_COLUMNS | InnoDB 系统列信息表。此表用于记录 InnoDB 系统表中每个列的信息,如列名、列类型、列长度等。 |
INNODB_SYS_STATS | InnoDB 系统统计信息表。此表用于记录 InnoDB 系统统计信息,如表数量、数据量等。 |
INNODB_SYS_FOREIGN | InnoDB 系统外键信息表。此表用于记录 InnoDB 系统表中外键的信息,如外键约束条件等。 |
INNODB_SYS_INDEXES | InnoDB 系统索引信息表。此表用于记录 InnoDB 系统表中索引的信息,如索引名、索引类型等。 |
mysql
主数据库,mysqld运行的必须数据库,用户与配置信息
表名称 | 作用 |
---|---|
columns_priv | 保存了每个表的列级别的权限信息,包括用户对各个列的SELECT、INSERT、UPDATE、REFERENCES等权限。 |
db | 保存了每个数据库的权限信息,包括用户对每个数据库的CREATE、ALTER、DROP等权限。 |
event | 保存了MySQL中的事件信息,包括事件的名称、执行时间、执行语句等。 |
func | 保存了用户定义的存储函数的信息,包括函数的名称、参数、返回类型等。 |
general_log | 记录了MySQL服务器上所有的日志操作,包括查询、连接、错误日志等。 |
help_category | 保存了MySQL帮助文档中的分类信息,用于帮助查找和浏览文档。 |
help_keyword | 保存了MySQL帮助文档的关键字信息,用于快速搜索和查找文档。 |
help_relation | 保存了MySQL帮助文档中关键字之间的关系信息,用于帮助构建文档的结构。 |
help_topic | 保存了MySQL帮助文档的具体内容信息,包括每个主题的标题、内容等。 |
host | 保存了MySQL服务器上的主机信息,包括主机名、IP地址、连接权限等。 |
ndb_binlog_index | 保存了使用NDB存储引擎的MySQL服务器上的二进制日志索引信息。 |
plugin | 保存了MySQL服务器上安装的插件信息。 |
proc | 保存了用户定义的存储过程的信息,包括过程的名称、参数、语句等。 |
procs_priv | 保存了用户对存储过程的访问权限信息。 |
proxies_priv | 保存了MySQL服务器上的代理用户的权限信息。 |
servers | 实验性表,保存了MySQL服务器的外部服务器和复制配置信息。 |
slow_log | 记录了MySQL服务器上执行时间超过默认阈值的慢查询日志。 |
tables_priv | 保存了用户对表的访问权限信息。 |
time_zone | 保存了MySQL服务器上的时区信息。 |
time_zone_leap_second | 保存了时区闰秒的信息。 |
time_zone_name | 保存了时区的名称和相关信息。 |
time_zone_transition | 保存了时区的变化规则和信息。 |
time_zone_transition_type | 保存了时区变化类型的信息。 |
user | 保存了MySQL服务器上的用户账号信息,包括用户名、密码、权限等。 |
performance_schema
性能数据库,存储mysqld的资源使用、安全策略权限配置信息
表名 | 作用 |
---|---|
cond_instances | 条件实例表,该表用于存储各种条件或锁定的实例信息 |
events_waits_current | 当前等待事件表,记录了当前正在等待某个事件发生的线程或会话信息 |
events_waits_history | 历史等待事件表,记录了过去一段时间内等待事件的信息,包括等待事件的类型、等待时间等 |
events_waits_history_long | 长期等待事件表,记录了长时间等待事件的信息,包括等待事件的类型、等待时间、等待时长等 |
events_waits_summary_by_instance | 按实例总结等待事件表,提供了按实例总结的等待事件统计信息 |
events_waits_summary_by_thread_by_event_name | 按线程和事件总结等待事件表,提供了按线程和特定事件总结的等待事件统计信息 |
events_waits_summary_global_by_event_name | 按全局和事件总结等待事件表,提供了按全局和特定事件总结的等待事件统计信息 |
file_instances | 文件实例表,记录了数据库中各个文件的信息,包括文件路径、文件大小等 |
file_summary_by_event_name | 按事件名总结文件表,提供了按特定事件名总结的文件统计信息 |
file_summary_by_instance | 按实例总结文件表,提供了按实例总结的文件统计信息 |
mutex_instances | 互斥体实例表,记录了数据库中各个互斥体的信息,包括互斥体的名称、状态等 |
performance_timers | 性能计时器表,提供了数据库性能的计时信息,包括执行时间、资源使用情况等 |
rwlock_instances | 读写锁实例表,记录了数据库中各个读写锁的信息 |
setup_consumers | 设置消费者表,记录了数据库设置的各种消费者信息 |
setup_instruments | 设置仪器表,记录了数据库设置的各类性能指标信息 |
setup_timers | 设置定时器表,记录了数据库设置的各类定时器信息 |
threads | 线程表,记录了数据库中的各个线程信息,包括线程ID、线程状态等 |
sys库
五、 SQL语言
-
DDL:数据定义语言,对数据库结构操作
create:创建(用户,库,表)
alter:改变
drop:删除
-
DML:数据操作语言,对数据表的操作
insert:插入
update:更新
delete:删除数据
-
DCL:数据控制语言,针对用户权限设置
grant:用户赋权
revoke:移除用户权限
-
DQL:数据查询语言,对数据表的操作
select:查询
六、mysqld数据类型
常用的数据类型有:
1、整型
整数类型 | 占用字节 | 无符号数的取值范围 | 有符号数的取值范围 |
---|---|---|---|
TINYINT | 1 | 0~255 | -128~127 |
SMALLINT | 2 | 0~65535 | -32768~32767 |
MEDIUMINT | 3 | 0~16777215 | -8388608~8388607 |
INT | 4 | 0~4294967295 | -2147483648~2147483647 |
BIGINT | 8 | 0~18446744073709551615 | -9223372036854774808~9223372036854774807 |
整数列的可选属性有三个:
-
M: 宽度(在0填充的时候才有意义,否则不需要指定)
-
unsigned: 无符号类型(非负)
-
zerofill: 0填充,(如果某列是zerofill,那么默认就是无符号),如果指定了zerofill只是表示不够M位时,用0在左边填充,如果超过M位,只要不超过数据存储范围即可
在 int(M) 中,M 的值跟 int(M) 所占多少存储空间并无任何关系。 int(3)、int(4)、int(8) 在磁盘上都是占用 4 bytes 的存储空间。
各整数数据类型的使用场所
数据类型 | 应用场景 |
---|---|
TINYINT | 一般用于枚举数据,比如系统设定取值范围很小且固定的场景。 |
SMALLINT | 可以用于较小范围的统计数据,比如统计工厂的固定资产库存数量等。 |
MEDIUMINT | 用于较大整数的计算,比如车站每日的客流量等。 |
INT、INTEGER | 取值范围足够大,一般情况下不用考虑超限问题,用得最多。比如商品编号。 |
BIGINT | 只有当你处理特别巨大的整数时才会用到。比如双十一的交易量、大型门户网站点击量、证券公司衍生产品持仓等。 |
2、浮点型
数据类型 | 字节数 | 取值范围 |
---|---|---|
FLOAT | 4 | -2^128~2 ^128,即-3.40E+38~+3.40E+38 |
DOUBLE | 8 | -2^1024~ 2^1024,即-1.79E+308~1.79E+308 |
-
当浮点数类型使用unsigned修饰无符号时,取值范围将不包含负数。
-
浮点数的取值范围是理论上的极限值,但根据不同的硬件或操作系统,实际范围可能会小。
-
浮点数虽然取值范围很大,但精度并不高。float类型的精度为6位或7位,double类型的精度大约为15位。
-
如果给定的数值超出精度,可能会导致给定的数值与实际保存的数值不一致,发生精度损失。
-
当一个数字的整数部分和小数部分加起来达到7位时,第7位就会进行四舍五入操作。
-
要避免使用“=”来判断两个浮点数是否相等,因为浮点数是不准确的,存在精度损失。
3、BIT类型
函数 | 函数用途 |
---|---|
BIT(M) | 存储二进制数据 |
ASCll(M) | 获取M的ASCll值 |
BIN(M) | 获取M的二进制值 |
LENGTH(M) | 获取M的数字长度 |
-
BIT数据类型可用来保存位字段值。BIT(M)类型允许存储M位值。M范围为1~64,默认为1。
-
BIT其实就是存入二进制的值,类似010110。如果存入一个BIT类型的值,位数少于M值,则左补0。如果存入一个BIT类型的值,位数多于M值,MySQL的操作取决于此时有效的SQL模式:如果模式未设置,MySQL将值裁剪到范围的相应端点,并保存裁减好的值。如果模式设置为traditional(“严格模式”),超出范围的值将被拒绝并提示错误,并且根据SQL标准插入会失败。
-
对于位字段,直接使用SELECT命令将不会看到结果,可以用bin()或hex()函数进行读取。
4、定点型
-
DECIMAL在MySQL内部以字符串形式存放,比浮点数更精确。定点类型占M+2个字节
-
DECIMAL(M,D)与浮点型一样处理规则。M的取值范围为0~65,D的取值范围为0~30,而且必须<=M,超出范围会报错。
-
DECIMAL如果指定精度时,默认的整数位是10,默认的小数位为0。
-
NUMERIC等价于DECIMAL。
-
例如,DECIMAL(5,2)表示的取值范围为-999.99~999.99。
5、日期时间类型
数据类型 | 字节 | 取值范围 | 日期格式 | 零值 |
---|---|---|---|---|
YEAR | 1 | 1901~2155 | YYYY | 0000 |
DATE | 3 | 1000-01-01~9999-12-31 | YYYY-MM-DD | 0000-00-00 |
TIME | 3 | -838:59:59~838:59:59 | HH:MM:SS | 00:00:00 |
DATETIME | 8 | 1000-01-01 00:00:00~9999-12-31 23:59:59 | YYYY-MM-DD HH:MM:SS | 0000-00-00 00:00:00 |
TIMESTAMP | 4 | 1970-01-01 00:00:01~2038-01-19 03:14:07 | YYYY-MM-DD HH:MM:SS | 0000-00-00 00:00:00 |
YEAR类型
YEAR类型用来表示年份,在所有的日期时间类型中所占用的存储空间最小,只需要1个字节的存储空间,格式为YYYY。
在MySQL中,可使用以下3种格式指定TEAR类型的值:
使用4位字符串或数字表示,为2025'2155或20252155。
例如,输入2022或’2022,插入到数据库中的值均为2022.
使用两位字符串表示,为00~99。
00 ~ '69的值会被转换为2000~2069的YEAR值
70 ~ '99的值会被自动转换为1970~1999的YEAR值
例如,输入22,插入到数据表中的值为2022。
使用两位数字表示,为1~99。
1 ~ 69的值会被转换为2001~2069的YEAR值
70 ~ 99的值会被自动转换为1970~1999的YEAR值
例如,输入22,插入到数据表中的值为2022。
注意:
当使用YEAR类型时,一定要区分0和0。
数字格式的0表示的YEAR值为0000
字符串格式的0表示的YEAR值为2000
DATE类型
DATE类型用来表示日期值,不包含时间部分,需要 3个字节 的存储空间,且其格式为 YYYY-MM-DD 。其中,YYYY表示年份,MM表示月份,DD表示日期。
在MySQL中,可以使用以下4种格式指定DATE类型的值:
以YYYY-MM-DD或者YYYYMMDD字符串格式表示。
以YY-MM-DD或者YYMMDD字符串格式表示。
以YY-MM-DD或者YYMMDD数字格式表示。
使用CURRENT_DATE或者NOW()输入当前系统日期。
注意:
通过"SELECT CURRENT_DATE;"或者"SELECT NOW();"可查询当前日期。
日期中的分隔符"-“,还可以使用”.“”,“”/"等符号来表示。
TIME类型
TIME类型用于表示时间值,它的显示形式一般为HH:MM:SS,其中HH表示小时,MM表示分,SS表示秒。
在MySQL中,可以使用以下3种格式指定TIME类型的值:
以HHMMSS字符串或者HHMMSS数学格式表示。
以HH:MM:SS字符串格式表示。
使用CURRENT_TIME或NOW()输入当前系统时间。
DATETIME类型
DATETIME类型在所有的日期时间类型中占用的存储空间最大,总共需要 8 个字节的存储空间,用来表示日期和时间,它的显示形式为YYYY-MM-DD HH:MM:SS。
在MySQL中,可以使用以下4种格式指定DATETIME类型的值:
以YYYY-MM-DD HH:MM:SS或YYYYMMDDHHMMSS字符串格式表示的日期和时间,取值范围为1000-01-01 00:00:00~9999-12-31-23-59-59。
以YY-MM-DD HH:MM:SS或YYMMDDHHMMSS字符串格式表示的日期和时间,
以YYYYMMDDHHMMSS或YYMMDDHHMMSS数字格式表示的日期和时间,
使用NOW()来输入当前系统的日期和时间。
TIMESTAMP类型
TIMESTAMP(时间戳)类型用于表示日期和时间,需要4个字节的存储空间,它的显示形式与DATETIME类型的相同,但取值范围比DATETIME类型的小。
TIMESTAMP类型与DATETIME类型的不同形式:
使用CURRENT_TIMESTAMP来输入系统当前的日期和时间。
无任何输入,或输入NULL时,实际保存的是系统当前日期和时间。
6、字符串型
数据类型 | 类型说明 |
---|---|
CHAR | 固定长度字符串 |
VARCHAR | 可变长度字符串 |
TEXT | 大文本数据 |
ENUM | 枚举类型 |
SET | 字符串类型 |
BINARY | 固定长度的二进制数据 |
VARBINARY | 可变长度是二进制数据 |
BLOB | 二进制大对象 |
CHAR和VARCHAR类型
CHAR和VARCHAR类型都是用来保存字符串数据,两者不同的是,VARCHAR可以存储可变长度的字符串数据。
字符串类型 | 特点 | 长度 | 长度范围 | 占用的存储空间 |
---|---|---|---|---|
CHAR(M) | 固定长度 | M | 0<=M<=255 | M个字节 |
VARCHAR(M) | 可变长度 | M | 0<=M<=65535 | (实际长度 + 1) 个字节 |
TEXT类型
TEXT类型用于保存大文本数据,例如,文章内容,评论等比较长的文本。
数据类型 | 存储范围 | 存储空间占用量 | 特点 |
---|---|---|---|
TINYTEXT(tinytext) | 0~2^8-1 | 文本长度+2 | 小文本,可变长度 |
TEXT(text) | 0~2^16-1 | 文本长度+2 | 文本,可变长度 |
MEDIUMTEXT(mediumtext) | 0~2^24-1 | 文本长度+3 | 中等文本,可变长度 |
LONGTEXT(longtext) | 0~2^32-1 | 文本长度+4 | 大文本,可变长度 |
ENUM类型
ENUM类型又称为枚举类型,其定义格式为:
ENUM('值1','值2','值3','值4','值5',....,'值n')
-
ENUM类型的取值范围需要在定义字段时进行指定。
-
设置字段值时,ENUM类型只允许从成员中选取单个值,不能一次选取多个值。
-
其所需要的存储空间由定义ENUM类型时指定的成员个数决定。
-
当ENUM类型包含1~255个成员时,需要1个字节的存储空间
-
当ENUM类型包含256~65535个成员时,需要2个字节的存储空间
-
ENUM类型的成员个数的上限为65535个
-
SET类型
SET类型用于保存字符串对象,其定义格式与ENUM类型相似。
SET('值1','值2','值3','值4','值5',....,'值n')
其所需要的存储空间由定SET类型时指定的成员个数决定。
SET类型包含的成员数 | 存储空间 |
---|---|
1~8 | 1个字节 |
9~16 | 2个字节 |
17~24 | 3个字节 |
25~32 | 4个字节 |
33~64 | 8个字节 |
SET类型在存储数据时成员个数越多,其占用的存储空间越大。
SET类型在选取成员时,与ENUM类型不同,其可以一次选择多个成员。
BINARY和VARBINARY类型
BINARY和VARBINARY类型类似于CHAR和VARCHAR,不同的是,它们所表示的是二进制数据。
类型 | 特点 | 长度 | 长度范围 | 占用的存储空间 |
---|---|---|---|---|
BINARY(M) | 固定长度 | M | 0<=M<=255 | M个字节 |
VARBINARY(M) | 可变长度 | M | 0<=M<=65535 | (M+ 1) 个字节 |
BLOB类型
BLOB类型用于保存数据量比较大的二进制数据,如图片,PDF文档等
数据类型 | 存储范围 | 占用空间 |
---|---|---|
TINYBLOB | 0~2^8 -1字节 | len+1个字节 |
BLOB | 0~2^16 -1字节(相当于64KB) | len+2个字节 |
MEDIUMBLOB | 0~2^24 -1字节(相当于16MB) | len+3个字节 |
LONGBLOB | 0~2^32 -1字节(相当于4GB) | len+4个字节 |
JSON数据类型
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式 ,简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。它易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。
JSON 可以将 JavaScript 对象中表示的一组数据转换为字符串,然后就可以在网络或者程序之间轻松地传递这个字符串,并在需要的时候将它还原为各编程语言所支持的数据格式。
在MySQL 5.7中,就已经支持JSON数据类型。在MySQL中,JSON类型常见的表示方式有2种,分别为JSON数组和JSON对象。
#JSON数组
['abc',10,null,true]
#JSON对象
{"k1":"value","k2":10}
7、特殊的NULL类型
-
所有的类型的值都可以是null,包括int、float等数据类型
-
空字符串””,不等于null,0也不等于null,false也不等于null
-
任何运算符,判断符碰到NULL,都得NULL
-
NULL的判断只能用is null,is not null
-
NULL 影响查询速度,一般避免使值为NULL
七、数据库操作命令
库操作命令
查看数据库
查看所在数据库
查看当前登录用户
查看当前数据库版本
查看用户权限列表
创建用户登录
查看指定用户的权限
远程登录
切换数据库
创建数据库
删除数据库
表结构操作命令
查看数据表
查看表内user(举例)
alter命令用法
ALTER TABLE <表名> [修改选项]
ADD COLUMN <列名> <类型>
CHANGE COLUMN <旧列名> <新列名> <新列类型>
ALTER COLUMN <列名> { SET DEFAULT <默认值> | DROP DEFAULT }
MODIFY COLUMN <列名> <类型>
DROP COLUMN <列名>
RENAME TO <新表名>
CHARACTER SET <字符集名>
COLLATE <校对规则名>
案例
创建测试表
表数据操作
插入数据
单行插入
单行删除
内容更改(整列)
删除数据库
总结
本次学习初步了解了MySQL数据库的一些操作和命令,还有编译安装的过程,后续还会补充本次文章的内容。