当前位置: 首页 > news >正文

从零开始的云计算生活——第二十四天,重起航帆,初见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.关系型数据库模型

  • 层次模型

  • 网状模型

  • 关系模型

关系模型的相关概念

  1. 实体(Entity) :实体是指现实世界中可以区分的对象,它可以是具体的人、事物或概念,也可以是抽象的物体。在数据库中,实体通常对应于表中的行,而表则实体的一种集合。例如,在一个学生信息管理系统中,学生、课程和教师都可以被视为实体。

  2. 属性(Attribute): 属性是实体的特征或性质,它提供了关于实体的具体信息。属性可以是简单的数据类型,如姓名、年龄或地址,也可以是更复杂的结构,如电话号码或电子邮件地址。在数据库中,属性通常对应于表中的列,每列代表实体的一种属性。例如,学生的姓名、学号和年龄都是学生的属性。

  3. 联系(Relationship): 联系描述了不同实体之间的关系。在现实世界中,实体之间往往存在各种形式的关联。在数据库中,联系通过关系表来实现,这个表通常包含两个或更多的实体作为表的列。例如,学生选修课程的关系表就包含了学生实体和课程实体的相关信息,描述了哪位学生选修了哪门课程。

在关系模型中,实体和联系通常通过以下三种类型来进一步分类:

  • 一对一(1:1):这种联系表示两个实体之间存在一对一的关系,即每个实体只有一个相关的实体,反之亦然。例如,一个部门与一个负责人之间可能存在一对一的联系。

  • 一对多(1:N):这种联系表示一个实体与多个实体相关,但每个相关实体只与一个实体相关。例如,一个教师可以教授多门课程,但每门课程只能由一个教师教授。

  • 多对多(M:N):这种联系表示两个实体之间存在多对多的关系,即每个实体可以与多个实体相关,同时每个相关实体也可以与多个实体相关。例如,学生可以选修多门课程,同时每门课程也可以被多个选修。

在设计数据库时,正确地识别实体、属性和联系,以及它们之间的类型,对于创建一个结构良好、能够有效存储和检索数据的数据库至关重要。

4.关系数据库相关概念

  1. 库(Database): 库是一个存储数据的容器,它可以包含多个数据库。在某些管理系统中,库等同于数据库。

  2. 表(Table): 表是数据库中的一个表格,由行和列组成。表是存储数据的主要结构,每个表通常对应一个实体类型。表的列名称为属性,而表的行名称为记录。

  3. 行(Record): 行也称为记录,它是表中的一个单元,代表表中的一个具体实例。每一行包含了一组属性值,这些值共同描述了一个实体的状态。

  4. 列(Column): 列是表中的一列,它代表了表的一个属性。每列都有一个数据类型,用于定义存储在其中的数据的种类和格式。

  5. 字段(Field): 字段通常指的是表中的行与列的交叉点,它存储了单个数据项。在数据库中,每个字段都有其特定的数据类型和用途。

  6. 数据(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_RESETInnoDB 内存比较器重置表。此表用于记录 InnoDB 内存比较器(comparison memory)的清除操作。
    INNODB_RSEGInnoDB 重做段表此表用于记录 InnoDB 数据文件的重做段信息。
    INNODB_UNDO_LOGSInnoDB 撤销日志表。此表用于记录 InnoDB 撤销操作的日志信息。
    INNODB_CMPMEMInnoDB 内存比较器表。此表用于记录 InnoDB 内存比较器的分配和使用情况。
    INNODB_SYS_TABLESTATSInnoDB 系统表统计信息表。此表用于记录 InnoDB 系统表的统计信息,如数据量、碎片率等。
    INNODB_LOCK_WAITSInnoDB 锁等待信息表。此表记录 InnoDB 锁等待的情况,包括等待锁的线程 ID、等待时间等。
    INNODB_INDEX_STATSInnoDB 索引统计信息表。此表用于记录 InnoDB 索引的统计信息,如索引大小、索引列的数据类型等。
    INNODB_CMPInnoDB 比较器表。此表用于记录 InnoDB 比较器的分配和使用情况。
    INNODB_CHANGED_PAGESInnoDB 更改页表。此表用于记录 InnoDB 数据文件中已更改的页的信息。
    INNODB_BUFFER_POOL_PAGESInnoDB 缓冲池页表。此表用于记录 InnoDB 缓冲池中每个页的信息,包括页的类型、页的状态等。
    INNODB_TRXInnoDB 事务表。此表用于记录 InnoDB 事务的信息,如事务 ID、事务状态等。
    INNODB_BUFFER_POOL_PAGES_INDEXInnoDB 缓冲池页索引表。此表用于记录 InnoDB 缓冲池中每个页的索引信息。
    INNODB_LOCKSInnoDB 锁表。此表用于记录 InnoDB 锁的信息,如锁的类型、锁的持有者等。
    INNODB_BUFFER_PAGE_LRUInnoDB 缓冲池页 LRU 表。此表用于记录 InnoDB 缓冲池中每个页的最近最少使用(Least Recently Used,LRU)信息。
    INNODB_SYS_TABLESInnoDB 系统表信息表。此表用于记录 InnoDB 系统表的信息,如表名、表状态等。
    INNODB_SYS_FIELDSInnoDB 系统字段信息表。此表用于记录 InnoDB 系统表中每个字段的信息,如字段名、字段类型等。
    INNODB_SYS_COLUMNSInnoDB 系统列信息表。此表用于记录 InnoDB 系统表中每个列的信息,如列名、列类型、列长度等。
    INNODB_SYS_STATSInnoDB 系统统计信息表。此表用于记录 InnoDB 系统统计信息,如表数量、数据量等。
    INNODB_SYS_FOREIGNInnoDB 系统外键信息表。此表用于记录 InnoDB 系统表中外键的信息,如外键约束条件等。
    INNODB_SYS_INDEXESInnoDB 系统索引信息表。此表用于记录 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、整型

    整数类型占用字节无符号数的取值范围有符号数的取值范围
    TINYINT10~255-128~127
    SMALLINT20~65535-32768~32767
    MEDIUMINT30~16777215-8388608~8388607
    INT40~4294967295-2147483648~2147483647
    BIGINT80~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、浮点型

    数据类型字节数取值范围
    FLOAT4-2^128~2 ^128,即-3.40E+38~+3.40E+38
    DOUBLE8-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、日期时间类型

    数据类型字节取值范围日期格式零值
    YEAR11901~2155YYYY0000
    DATE31000-01-01~9999-12-31YYYY-MM-DD0000-00-00
    TIME3-838:59:59~838:59:59HH:MM:SS00:00:00
    DATETIME81000-01-01 00:00:00~9999-12-31 23:59:59YYYY-MM-DD HH:MM:SS0000-00-00 00:00:00
    TIMESTAMP41970-01-01 00:00:01~2038-01-19 03:14:07YYYY-MM-DD HH:MM:SS0000-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)固定长度M0<=M<=255M个字节
    VARCHAR(M)可变长度M0<=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')

    1. ENUM类型的取值范围需要在定义字段时进行指定。

    2. 设置字段值时,ENUM类型只允许从成员中选取单个值,不能一次选取多个值。

    3. 其所需要的存储空间由定义ENUM类型时指定的成员个数决定。

      • 当ENUM类型包含1~255个成员时,需要1个字节的存储空间

      • 当ENUM类型包含256~65535个成员时,需要2个字节的存储空间

      • ENUM类型的成员个数的上限为65535个

    SET类型

    SET类型用于保存字符串对象,其定义格式与ENUM类型相似。

    SET('值1','值2','值3','值4','值5',....,'值n')

    其所需要的存储空间由定SET类型时指定的成员个数决定。

    SET类型包含的成员数存储空间
    1~81个字节
    9~162个字节
    17~243个字节
    25~324个字节
    33~648个字节

    SET类型在存储数据时成员个数越多,其占用的存储空间越大。

    SET类型在选取成员时,与ENUM类型不同,其可以一次选择多个成员。

    BINARY和VARBINARY类型

    BINARY和VARBINARY类型类似于CHAR和VARCHAR,不同的是,它们所表示的是二进制数据。

    类型特点长度长度范围占用的存储空间
    BINARY(M)固定长度M0<=M<=255M个字节
    VARBINARY(M)可变长度M0<=M<=65535(M+ 1) 个字节

    BLOB类型

    BLOB类型用于保存数据量比较大的二进制数据,如图片,PDF文档等

    数据类型存储范围占用空间
    TINYBLOB0~2^8 -1字节len+1个字节
    BLOB0~2^16 -1字节(相当于64KB)len+2个字节
    MEDIUMBLOB0~2^24 -1字节(相当于16MB)len+3个字节
    LONGBLOB0~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数据库的一些操作和命令,还有编译安装的过程,后续还会补充本次文章的内容。

    http://www.lryc.cn/news/575584.html

    相关文章:

  1. Linux中部署Jenkins保姆间教程
  2. 编写CSS的格式
  3. React:利用计算属性名特点更新表单值
  4. Spring Security 安全控制终极指南
  5. ubuntu20.04如何给appImage创建快捷方式
  6. 【thinkphp5】Session和Cache记录微信accesstoken
  7. 【Docker基础】Docker容器管理:docker rm及其参数详解
  8. 百度中年危机:一场艰难的突围战
  9. 关于单片机的基础知识(一)
  10. 苍穹外卖day3--公共字段填充+新增菜品
  11. 【LLM安全】MCP(模型上下文协议)及其关键漏洞、技术细节
  12. 解锁企业效率革命:Microsoft 365 Copilot 重塑办公新范式
  13. 16.1 Python应用容器化终极指南:Dockerfile多阶段构建与安全优化实战
  14. leetcode-2311.小于等于k的最长二进制子序列
  15. Apipost和Postman对比
  16. view-design的日期时间插件怎么在只选择日期没有选时间的时候给他默认的时间
  17. 英特尔汽车业务败走中国,喊出“All in”才过两个月
  18. 【机器学习深度学习】线性回归
  19. 供应链数据可视化大屏
  20. 【Pandas】pandas DataFrame first_valid_index
  21. Spring Boot 文件上传大小配置错误解决方案
  22. 远程面试平台选声网视频通话提升候选人体验感
  23. c++17标准std::filesystem常用函数
  24. 微服务架构下面临的安全、合规审计挑战
  25. 基于STM32的工业仓库环境智能监控系统设计
  26. .NET测试工具Parasoft dotTEST内置安全标准,编码合规更高效
  27. Java 大视界 -- 基于 Java 的大数据可视化在智慧城市能源消耗动态监测与优化决策中的应用(324)
  28. 单RV的ROI区域算法guess
  29. Java底层原理:深入理解线程与并发机制
  30. window显示驱动开发—支持 DXGI DDI(四)