一、概述
NOSQL数据库
- 
Redis,缓存数据库
 - 
MongoDB,文档型数据库
 
关系数据库相关概念
- 
库(Database): 库是一个存储数据的容器,它可以包含多个数据库。在某些管理系统中,库等同于数据库。
 - 
表(Table): 表是数据库中的一个表格,由行和列组成。表是存储数据的主要结构,每个表通常对应一个实体类型。表的列名称为属性,而表的行名称为记录。
 - 
行(Record): 行也称为记录,它是表中的一个单元,代表表中的一个具体实例。每一行包含了一组属性值,这些值共同描述了一个实体的状态。
 - 
列(Column): 列是表中的一列,它代表了表的一个属性。每列都有一个数据类型,用于定义存储在其中的数据的种类和格式。
 - 
字段(Field): 字段通常指的是表中的行与列的交叉点,它存储了单个数据项。在数据库中,每个字段都有其特定的数据类型和用途。
 - 
数据(Data): 数据是存储在数据库中的信息。它可以是文本、数字、日期、图像、声音等各种形式。数据是数据库管理和操作的核心。
 
二、安装
默认监听端口号:3306/tcp
1、mariadb安装
服务端程序: mariadb-server;客户端程序:mariadb
yum install -y mariadb-server mariadb
        2、mysql安装
服务端程序:mysql-server;客户端程序:mysql;
[root@mysql ~]# yum install -y  mysqld-server mysql 
##编译安装,需要cmake环境
        3、启动并开机自启
[root@mysql ~]# systemctl enable --now mysqld.service 
        4、本地连接(本地登录)
[root@mysql ~]# mysql
Welcome to the mysqld monitor.  Commands end with ; or \g.
Your mysqld connection id is 2
Server version: 5.5.68-mysqld mysqld Server
Copyright (c) 2000, 2018, Oracle, mysqld Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MySQL[(none)]> 
##[(none)]:表示当前登录用户选择的数据库的"空",没有在任何库中
##使用"exit"命令可以退出数据库登录
        三、mysqld数据库配置与命令
mysqld服务器的启动脚本
[root@mysql ~]# cat /usr/lib/systemd/system/mysqld.service
        数据存储目录的权限
[root@mysql mysql]# ls -ld /var/lib/mysql/
drwxr-xr-x 5 mysql mysql 177 1月  31 10:16 /var/lib/mysql/
        服务启动时读取的默认配置文件
[root@mysql mysql]# cat /etc/my.cnf
        mysqld操作命令
[root@mysql ~]# ls -l /usr/bin/mysql*
-rwxr-xr-x 1 root root 3543584 10月  2 2020 /usr/bin/mysql
-rwxr-xr-x 1 root root  111971 10月  2 2020 /usr/bin/mysqlaccess
-rwxr-xr-x 1 root root 3096720 10月  2 2020 /usr/bin/mysqladmin
-rwxr-xr-x 1 root root 3259880 10月  2 2020 /usr/bin/mysqlbinlog
lrwxrwxrwx 1 root root      26 1月  31 10:15 /usr/bin/mysqlbug -> /etc/alternatives/mysqlbug
        mysql命令
常用选项
-u:指定登录用户 -p:指定用户密码 -h:指定登录数据库的IP或者域名 -P:指定登录数据库的端口号 -e:能够在终端执行数据库指令
使用案例
[root@mysql ~]# mysql -uroot -hlocalhost -P3306
[root@mysql ~]# mysql -p123.com -e "show databases"   ##直接在外部执行查看数据库的命令
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+
##指定登录的数据库,只能是一个
[root@mysql mysql]# mysql -p123.com mysql 
        mysqladmin命令
超级管理命令
语法
mysqladmin [options] command [command-arg] [command [command-arg]] ...
        设置root用户密码
[root@mysql ~]# mysqladmin -uroot password '123.com'
        使用密码登录
[root@mysql ~]# mysql -uroot -p123.com -h127.0.0.1 -P3306
        四、默认数据库
**nformation_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:查询
 
六、mysql数据类型
常用的数据类型有:
- 
整型
 - 
浮点型
 - 
BIT类型
 - 
定点数
 - 
日期时间类型
 - 
字符串
 - 
NULL类型
 
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位字符串或数字表示,为1901'2155或19012155。
 例如,输入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
 
七、数据库操作命令
库操作命令
- 查看数据库
 
show databases;
        - 查看所在数据库
 
select database();
        - 查看当前登录用户
 
select user();
        - 查看当前数据库版本
 
select version();
        - 查看用户权限列表
 
show privileges[\G];
        - 查看指定用户的权限
 
show grants for root@localhost\G;
        - 切换数据库
 
use databaseName[;]
        - 创建数据库
 
create database databaseName  [character set utf8];
        - 删除数据库
 
drop database databaseName;
        - 查看支持的字符集
 
SHOW CHARACTER SET;
        表结构操作命令
- 查看数据表
 
show tables;
        - 
查看表结构
desc[describe] tableName;
[root@mysqld ~]# mysql -e "desc mysql.user" - 
创建数据表
 
create table tableName(columnName(列名称) dataType(数据类型), ............);
- 删除数据表
 
drop table tableName;