前言
本文对于SQL语法的介绍并不多,只能让您做到入门,我把更多精力放在了功能、概念
与权限管理,这是为我们后面的信息收集与渗透测试做准备工作
1.1·数据库是什么
1.2·mysql介绍
1.3·mysql结构
1.4·mysql数据类型
1.5·mysql语法
1.6·mysql权限管理
1.7·作者的废话
1.1·数据库是什么
(一)数据库是什么
在当今数字化时代,数据库就像一个神奇的宝藏库,存储着海量的信息,从个人的社交媒体数据到企业的商业机密,从科研机构的研究成果到政府的统计数据,无一不在其掌控之中。那么,数据库究竟是什么呢?
数据库是一种按照特定的数据结构组织、存储和管理数据的仓库。它就像一个高度有序的图书馆,将各种书籍(数据)按照类别(数据结构)整齐地摆放在书架(存储系统)上,方便读者(用户)快速地查找、借阅(访问)和归还(更新)书籍。与传统的文件存储方式相比,数据库具有诸多显著的优势。
首先,数据库能够高效地存储大量数据。随着信息技术的飞速发展,数据的产生速度呈爆炸式增长。无论是社交媒体上用户每天发布的海量帖子,还是电商平台每秒产生的众多订单记录,数据库都能轻松应对。它通过优化的数据存储结构和高效的存储管理算法,将这些数据有序地存储在磁盘或其他存储介质上,确保数据的完整性和安全性。
其次,数据库支持快速的数据查询。在庞大的数据海洋中,用户往往需要迅速找到自己所需的信息。数据库管理系统(DBMS)提供了强大的查询语言,如结构化查询语言(SQL),用户只需通过简单的语句描述自己的查询需求,数据库就能在瞬间从海量数据中精准地筛选出符合条件的结果。例如,在一个电商数据库中,用户想要查找某款特定商品的库存数量和价格信息,通过 SQL 查询语句,数据库能够迅速定位到该商品的记录并返回相关数据,极大地提高了工作效率。
此外,数据库还具备良好的数据一致性和安全性。在多用户同时访问和操作数据库的情况下,数据库管理系统能够确保数据的一致性。它通过事务处理机制,将一系列操作视为一个不可分割的整体,要么全部成功,要么全部失败,避免了数据在并发操作中出现混乱。同时,数据库还设置了严格的权限控制和安全防护措施,只有经过授权的用户才能访问特定的数据,防止数据泄露和非法篡改,保护数据的隐私和安全。
数据库的应用无处不在。在金融领域,银行的账户管理系统、证券交易系统等都依赖数据库来存储和处理客户的资金信息、交易记录等关键数据,确保金融交易的准确性和安全性。在医疗行业,医院的电子病历系统、药品库存管理系统等通过数据库实现了对患者病历、药品信息的高效管理,提高了医疗服务的质量和效率。在互联网领域,社交媒体平台、搜索引擎、在线教育平台等更是离不开数据库的支持,它们通过数据库存储用户数据、内容资源等,为用户提供个性化、精准化的服务。
总之,数据库作为现代信息技术的核心组成部分,就像一个强大的数据引擎,驱动着各种信息系统高效、稳定地运行。它以其卓越的数据存储、查询、一致性和安全性能,在各个领域发挥着不可或缺的作用,为我们的数字生活和工作提供了坚实的支撑。
(二)关系型数据库与非关系型数据库介绍及对比
在当今数据驱动的时代,数据库作为存储和管理数据的核心工具,扮演着至关重要的角色。根据数据存储和管理方式的不同,数据库主要分为关系型数据库和非关系型数据库两大类。
1、关系型数据库
关系型数据库(RDBMS)是基于关系模型的数据库系统,它将数据存储在表格(表)中,每个表由行(记录)和列(字段)组成。关系型数据库的核心特点是数据的结构化存储和强大的事务处理能力。它使用结构化查询语言(SQL)进行数据的查询、插入、更新和删除操作,能够确保数据的完整性和一致性。例如,MySQL、Oracle 和 PostgreSQL 等都是常见的关系型数据库系统。
关系型数据库的主要优势在于其对复杂查询的支持和事务的完整性。通过 SQL 语句,可以轻松地进行多表连接查询、子查询等复杂操作,适用于需要进行复杂数据分析和事务处理的场景,如金融交易系统、企业资源规划(ERP)系统等。此外,关系型数据库的事务处理机制(ACID 属性)确保了数据操作的原子性、一致性、隔离性和持久性,能够有效防止数据在并发操作中出现错误。
然而,关系型数据库也有其局限性。随着数据量的急剧增加,关系型数据库在处理大规模数据时可能会面临性能瓶颈。此外,关系型数据库的固定表结构在面对频繁变化的数据模型时,需要频繁地进行表结构的调整,这可能会导致系统维护成本的增加。
2、非关系型数据库
非关系型数据库(NoSQL)是为了解决关系型数据库在处理大规模数据和高并发场景下的性能问题而逐渐发展起来的。它不依赖于传统的表格结构,而是采用更加灵活的数据存储方式,如键值对、文档、列族和图形等。常见的非关系型数据库有 Redis(键值存储)、MongoDB(文档存储)、Cassandra(列族存储)和 Neo4j(图形数据库)等。
非关系型数据库的主要优势在于其高性能和高可扩展性。它能够轻松处理海量数据,并支持高并发的读写操作,适用于大数据处理、实时分析和高并发的 Web 应用场景,如社交媒体平台、物联网(IoT)数据存储等。此外,非关系型数据库的灵活数据模型可以快速适应数据结构的变化,无需进行复杂的表结构调整,能够更好地支持敏捷开发和快速迭代。
不过,非关系型数据库也有其不足之处。它通常不支持复杂的事务处理和多表连接查询,数据一致性和完整性相对关系型数据库较弱。因此,在需要严格事务处理和复杂查询的场景下,非关系型数据库可能不是最佳选择。
对比
从数据模型来看,关系型数据库采用表格结构,数据关系明确,适合复杂查询和事务处理;非关系型数据库则采用灵活的数据存储方式,适合快速读写和大规模数据存储。在性能方面,关系型数据库在处理小规模数据时表现良好,但在大规模数据和高并发场景下可能性能受限;非关系型数据库则在处理大规模数据和高并发读写时表现出色。从数据一致性角度看,关系型数据库通过事务机制确保数据的强一致性;非关系型数据库则通常采用最终一致性模型,数据一致性较弱。在扩展性方面,关系型数据库的垂直扩展成本较高,水平扩展较为复杂;非关系型数据库则天然支持水平扩展,能够轻松应对数据量的增长。
总之,关系型数据库和非关系型数据库各有优劣,适用于不同的应用场景。在选择数据库时,应根据具体的应用需求、数据规模和性能要求等因素综合考虑,选择最适合的数据库类型。
使用数据库排行表
查看数据库最新 排名:https://db-engines.com/en/ranking
1.2·MySQL简介
MySQL 是一款广受欢迎的开源关系型数据库管理系统(RDBMS),它基于结构化查询语言(SQL)进行数据的存储、管理和检索,凭借其卓越的性能、可靠性和灵活性,在全球范围内被众多企业和开发者广泛应用于各种规模的应用程序中,从简单的个人博客到复杂的大型企业级系统。
一、起源与发展
MySQL 最初由瑞典的 MySQL AB 公司开发,于 1995 年首次发布。其名字来源于创始人之一迈克尔·维德纽斯(Michael Widenius)的女儿 My。随着时间的推移,MySQL 不断迭代升级,增加了众多新功能和优化。2008 年,Sun Microsystems 收购了 MySQL AB,后在 2010 年,甲骨文公司(Oracle)收购了 Sun Microsystems,MySQL 也随之成为甲骨文旗下的一部分。尽管如此,MySQL 依然保持着开源的特性,其社区版继续为全球开发者所用,同时甲骨文也推出了商业版 MySQL Enterprise,为企业级应用提供更全面的支持和服务。
二、核心特点
(一)高性能
MySQL 采用多层架构设计,其中存储引擎层是其性能优化的关键。它支持多种存储引擎,如 InnoDB、MyISAM 等。InnoDB 存储引擎以其强大的事务处理能力、行级锁定和外键约束等特性,成为处理大量并发事务和保证数据完整性的首选,广泛应用于需要高可靠性和高并发读写的场景,如电商平台的订单处理系统。而 MyISAM 存储引擎则在读操作频繁且对事务支持要求不高的场景下表现出色,例如一些内容管理系统(CMS)中的文章存储。此外,MySQL 还具备高效的查询缓存机制,能够将频繁执行的查询结果缓存起来,当再次执行相同查询时,直接从缓存中获取结果,大大减少了对磁盘的读取操作,显著提高了查询响应速度。
(二)可靠性
数据的可靠性是数据库的核心要求之一。MySQL 通过多种机制确保数据的安全性和一致性。首先,其支持事务处理,事务是一系列操作的集合,要么全部成功,要么全部失败,这保证了数据操作的原子性。例如,在银行转账业务中,从一个账户扣款和向另一个账户存款必须同时成功或失败,MySQL 的事务机制能够确保这一过程的正确执行,避免出现数据不一致的情况。其次,MySQL 提供了数据备份和恢复功能,用户可以通过 mysqldump 等工具定期备份数据库,当系统出现故障或数据损坏时,可以利用备份数据进行恢复,最大限度地减少数据丢失的风险。同时,其还具备日志记录功能,包括二进制日志(binlog)和错误日志等,二进制日志记录了数据库的所有更改操作,可用于数据恢复、主从复制等场景,错误日志则记录了数据库运行过程中的错误信息,方便开发者和运维人员进行问题排查和系统优化。
(三)易用性
MySQL 的安装和配置相对简单,无论是 Windows、Linux 还是 macOS 等操作系统,都有相应的安装包可供选择。安装完成后,通过简单的配置文件修改即可满足基本的运行需求。在数据操作方面,MySQL 提供了丰富的 SQL 语句,涵盖了数据定义(DDL)、数据操纵(DML)和数据控制(DCL)等多个方面,用户可以通过这些语句轻松地创建数据库、表,插入、更新、删除和查询数据,以及进行用户权限管理等操作。同时,MySQL 还拥有众多图形化管理工具,如 phpMyAdmin、MySQL Workbench 等,这些工具提供了直观的界面,使得数据库的管理和操作更加便捷,即使是非专业的数据库管理员也能快速上手进行日常的数据库维护工作。
(四)可扩展性
随着业务的发展,数据量和访问量可能会不断增长,MySQL 具备良好的可扩展性以应对这一挑战。在垂直扩展方面,可以通过升级服务器硬件配置,如增加 CPU 核心数、内存容量和磁盘存储空间等,来提升单个 MySQL 服务器的性能。在水平扩展方面,MySQL 支持主从复制和集群技术。主从复制可以将一台服务器(主服务器)的数据实时复制到多台服务器(从服务器)上,从服务器可以承担读操作的负载,从而实现读写分离,提高系统的读取性能。而 MySQL 集群则通过多个节点协同工作,提供高可用性和负载均衡,当某个节点出现故障时,其他节点可以接管其工作,确保业务的连续性,适用于对可用性要求极高的应用场景,如金融、电信等行业。
三、应用场景
(一)网站与 Web 应用
在互联网领域,MySQL 是构建网站和 Web 应用的首选数据库之一。无论是小型的个人博客网站,还是大型的社交网络平台、电商平台等,MySQL 都能够高效地存储和管理用户数据、文章内容、商品信息、订单记录等各类数据。例如,在一个电商网站中,MySQL 可以快速响应用户的商品搜索请求,从海量的商品数据中筛选出符合条件的商品展示给用户;同时,还能处理用户的购物车添加、订单生成、支付等复杂的业务流程,确保交易数据的准确性和安全性。
(二)企业级应用
众多企业将 MySQL 应用于其核心业务系统中。在企业资源规划(ERP)系统里,MySQL 能够存储企业的生产计划、库存信息、财务数据等关键数据,支持企业的日常运营和决策分析。在客户关系管理(CRM)系统中,它用于记录客户的基本信息、交易历史、沟通记录等,帮助企业更好地了解客户需求,提升客户满意度。此外,MySQL 还广泛应用于人力资源管理、供应链管理等各类企业级应用系统,为企业提供了稳定、可靠的数据存储和处理解决方案。
(三)大数据分析
虽然 MySQL 本身并非专门为大数据分析设计,但在一些中小规模的大数据分析场景中,它依然可以发挥重要作用。例如,在对网站的用户行为数据进行分析时,MySQL 可以存储用户的访问页面、停留时间、点击路径等数据,通过 SQL 语句进行数据的筛选、聚合和统计分析,帮助企业了解用户的兴趣偏好,优化网站内容和营销策略。同时,MySQL 也可以与其他大数据技术相结合,如将 MySQL 中的数据导入到 Hadoop、Spark 等大数据处理平台进行更深入的数据挖掘和分析,充分发挥各自的优势,实现数据价值的最大化。
四、社区与生态系统
MySQL 拥有一个庞大而活跃的开源社区,全球数以万计的开发者参与到 MySQL 的开发、测试、文档编写和问题解答等工作中。社区成员通过邮件列表、论坛、博客等多种方式分享经验、交流技术,共同推动 MySQL 的发展。丰富的社区资源为 MySQL 的使用者提供了强大的支持,无论是新手入门还是遇到复杂的技术难题,都能在社区中找到相应的解决方案或得到他人的帮助。
围绕 MySQL 形成了一个完整的生态系统,包括各种开发工具、中间件、云服务等。在开发工具方面,除了前面提到的 MySQL Workbench 等官方工具外,还有众多第三方开发工具,如 Navicat、DBeaver 等,这些工具提供了更丰富的功能和更友好的用户体验,帮助开发者更高效地进行数据库开发和管理。在中间件领域,如分布式缓存系统 Redis、消息队列 Kafka 等,经常与 MySQL 结合使用,通过缓存热点数据、异步处理消息等方式,进一步提升系统的性能和可扩展性。在云服务方面,许多云平台如亚马逊 AWS、微软 Azure、阿里云等都提供了 MySQL 的云数据库服务,用户无需自行搭建和维护数据库服务器,只需按需购买云数据库资源,即可快速部署和使用 MySQL 数据库,同时享受云平台提供的高可用性、弹性伸缩、备份恢复等高级特性,降低了数据库的使用成本和运维难度。
五、未来展望
随着技术的不断发展,MySQL 也在持续演进。未来,MySQL 将更加注重与云计算、大数据、人工智能等新兴技术的深度融合。在云计算领域,MySQL 将进一步优化其在云环境下的性能表现和资源管理能力,更好地适应云原生架构的要求,如支持容器化部署、微服务架构下的数据库管理等。在大数据方面,MySQL 可能会增强对大数据处理的原生支持,提高其在大规模数据存储和分析场景下的竞争力,例如通过引入更高效的数据分区策略、优化查询算法等方式,提升对海量数据的处理效率。同时,借助人工智能技术,MySQL 有望实现更智能的数据库管理,如自动化的性能调优、故障预测与自愈等功能,降低数据库运维的复杂性,提高系统的稳定性和可靠性。
总之,MySQL 作为一款经典的开源关系型数据库管理系统,凭借其卓越的性能、可靠性和易用性,在数据库领域占据着重要的地位。它广泛应用于各种应用场景,为全球数以百万计的应用程序提供了强大的数据存储和处理支持。随着技术的不断进步和创新,MySQL 将继续在数据库领域发挥其重要作用,为开发者和企业带来更多的价值。
1.3·mysql结构
MySQL 是一款广泛使用的开源关系型数据库管理系统,其架构设计合理,能够高效地处理各种数据存储和查询任务。MySQL 的整体结构可以分为四个主要层次:连接层、服务层、存储引擎层和文件系统层
1.连接层
连接层是 MySQL 架构的最上层,主要负责处理客户端与 MySQL 服务器之间的连接。它包括数据库连接池,负责接收客户端的连接请求,并为每个连接分配一个线程或进程来处理客户端请求。连接层还负责验证用户身份、管理权限等安全相关的工作。例如,当用户通过命令行工具或应用程序连接到 MySQL 服务器时,连接层会进行身份验证,并根据用户的权限设置来管理其操作。
2.服务层
服务层是 MySQL 的核心部分,包含多个重要的模块和组件,主要负责处理 SQL 查询的解析、优化和执行。服务层的主要组件包括:
• 连接管理器(Connection Manager):负责接收客户端的连接请求,并为每个连接分配一个线程或进程来处理客户端请求。它还负责验证用户身份、管理权限等。
• 查询处理模块(Query Processor):负责解析、优化和执行 SQL 查询。查询处理器包括多个子模块:
• 解析器(Parser):解析 SQL 语句,生成抽象语法树(AST)。
• 预处理器(Preprocessor):对抽象语法树进行语义分析和优化,生成查询优化后的中间表示形式。
• 优化器(Optimizer):根据查询优化后的中间表示形式选择最佳的执行计划。它考虑多种因素,如索引、连接顺序和数据统计信息。
• 执行器(Executor):负责执行优化后的查询计划,与存储引擎交互以检索或修改数据。
• 查询缓存(Query Cache):缓存查询结果,提高查询效率。当相同的查询再次执行时,可以直接从缓存中获取结果,减少对存储引擎的访问。不过,查询缓存的失效非常频繁,对一个表的某一条数据更新,这个表上所有的查询缓存都会被清空,因此在某些场景下可能会带来性能问题。
3.存储引擎层
存储引擎层是 MySQL 的核心组件之一,负责数据的存储和提取。MySQL 支持多种存储引擎,每种存储引擎具有不同的特点和适用场景。常见的存储引擎包括:
• InnoDB:支持事务处理、行级锁定和外键约束,适用于需要高并发读写和事务支持的场景,如电商平台的订单处理系统。
• MyISAM:读操作频繁且对事务支持要求不高的场景下表现出色,例如一些内容管理系统(CMS)中的文章存储。
• Memory:数据存储在内存中,读写速度非常快,但数据在服务器重启后会丢失,适用于临时数据的存储。
存储引擎层通过插件式架构与服务层交互,用户可以根据实际需求选择合适的存储引擎。
4.文件系统层
文件系统层位于存储引擎层之下,负责将数据持久化存储在磁盘上。它包括各种数据文件和日志文件,例如:
• .ibd 文件:用于存储表数据和索引信息的文件(InnoDB 引擎独有)。
• .ibdata 文件:用于存储共享表空间的数据和索引的文件(InnoDB 引擎独有)。
• .ibdata1 文件:用于存储 MySQL 系统(自带)表数据及结构的文件。
• .ib_logfile0/.ib_logfile1 文件:用于故障数据恢复时的日志文件。
• .cnf/.ini 文件:MySQL 的配置文件,Windows 下是.ini,其他系统大多为.cnf。

客户端
客户端是用户与 MySQL 服务器进行交互的入口。客户端可以是任何可以与 MySQL 服务器建立连接并发送 SQL 请求的程序或工具。常见的客户端包括:
• MySQL 命令行客户端(mysql):这是一个基于命令行的工具,可以用来执行 SQL 语句、查询数据库和进行管理操作。
• 应用程序:例如 Web 应用、桌面应用、API 等,这些程序可以通过 MySQL 提供的各种语言接口(如 JDBC、ODBC、Python、PHP、Java、C++等)连接到 MySQL 服务器并与数据库交互。
• GUI 客户端工具:如 MySQL Workbench、phpMyAdmin 等图形化管理工具,用户可以通过这些工具可视化地管理 MySQL 数据库。
总结
MySQL 的架构设计合理,通过分层架构将不同的功能模块清晰地划分,使得系统更加灵活和高效。连接层负责处理客户端连接,服务层处理 SQL 查询的解析和优化,存储引擎层负责数据的存储和提取,文件系统层则将数据持久化存储在磁盘上。这种分层架构不仅提高了系统的可维护性和扩展性,还允许用户根据不同的业务需求选择合适的存储引擎,充分发挥 MySQL 的性能优势。
1.4·mysql数据类型
一、元素&列表
1.如何打开mysql
1.1phpstudy
首先我推荐使用phpstudy搭建mysql环境
phpstudy下载地址:小皮面板(phpstudy) - 让天下没有难配的服务器环境!
(免费)
然后我们打开phpstudy(以下称为xp)

点击mysql5.7.26的“启动”按键启动,数据库应该是自带的,没有的话去:软件管理=>
系统环境=>数据库中下载,(什么版本都行,)
1.12数据库客户端工具
我推荐使用phpMyAdmin4.8.5这个工具
1.13环境配置
首先我们创建一个本地web服务
选择“网站”,然后选择“建新网站”
域名和第二域名填同样的就行
协议选择http
然后同步host文件打开
点击确定就OK了
然后下载 phpmyadmin
点击软件管理=>网站程序可以看到
下载到刚刚创建的网站
下载完成
创建mysql的数据库
点击“数据库”然后点击“创建数据库”然后填写名称密码用户名即可
然后打开你的网站输入密码就可以打开数据库图形化管理工具了

选择你的数据库,然后点击sql即可输入命令
1.2·创建一个数据表
首先运行以下代码
use sql;#格式use 数据库名;
#使用自己的数据库(也可以直接点击自己的数据库运行)
然后
创建一个名为username的表格
create table username(
用户名 text,
uid int,
用户密码 int
)
#表格创建格式
/* 多行注释
create table 创建的表名(
字段名 数据类型
)
*/

我们来插入字段,输入以下代码
insert into username values("大轩",123,123456)
得到这个表格

1.3·元素&列表
用户名是字段、属性,用户名-大轩,这是一列数据,大轩,是实体、对象
二、数据类型
数值类型 | 时间和日期 | 其他类型 |
TINYINT | TIME | ENUM |
SMALLINT | TIMESTAMP | SET |
MEDIUMINT | DATE | BIT |
INT/INTEGER | DATETIME | |
BLGINT | ||
DECIMAL&NUMERC | ||
FLOTA | ||
DOUBLE | ||
CHAR | ||
VARCHAR | ||
TINYTEXT | ||
TEXT | ||
MEDIUM | ||
LONGTEXT | ||
BINARY | ||
VARBINARY | ||
TYNYBLOB | ||
BLOB | ||
MEDIUMBLOB | ||
LONGBLOB |
这是mysql的数据类型下面我们开始介绍一下它们的具体数值和使用方法
MySQL中数据类型丰富多样,主要分为以下几大类:
一、数值类型
1.整数类型
• `TINYINT`:范围为-128 到 127(有符号),0 到 255(无符号)。例如,可以用来存储一些小范围的计数,像一周的天数(1-7)。
• `SMALLINT`:范围为-32768 到 32767(有符号),0 到 65535(无符号)。适用于存储一些中等范围的数值,如一个小型公司员工的编号(假设公司员工数不超过 65535)。
• `MEDIUMINT`:范围为-8388608 到 8388607(有符号),0 到 16777215(无符号)。当需要存储比`SMALLINT`更大的整数,但又不需要`INT`那么大的范围时使用。比如存储一个小型城市的街道编号。
• `INT`或`INTEGER`:范围为-2147483648 到 2147483647(有符号),0 到 4294967295(无符号)。这是最常用的整数类型,可以存储较大的整数,如用户 ID(在大型网站中)。
• `BIGINT`:范围为-9223372036854775808 到 9223372036854775807(有符号),0 到 18446744073709551615(无符号)。用于存储非常大的整数,例如存储一个国家的总人口数(虽然目前还没有国家人口达到这个数量级,但在某些需要预留极大范围的场景下很有用)。
2.定点数类型
• `DECIMAL`和`NUMERIC`:这两种类型是等价的,用于存储精确的小数。它们可以指定精度(小数点前后的数字位数之和)和小数点后的位数。例如,`DECIMAL(5, 2)`可以存储像 123.45 这样的数值,总共有 5 位数字,其中 2 位是小数。这在处理财务数据(如金额)时非常关键,因为需要精确计算,避免浮点数运算带来的精度误差。
3. 浮点数类型
• `FLOAT`:单精度浮点数,可以存储大约 7 位有效数字。例如,存储一些科学计算中精度要求不是特别高的浮点数,像温度(23.5℃)等。
• `DOUBLE`:双精度浮点数,可以存储大约 15-17 位有效数字。在需要更高精度的浮点数运算场景下使用,如复杂的物理模拟计算中的数值。
二、字符串类型
1.定长字符串类型
• `CHAR`:定长字符串,长度固定。当定义一个`CHAR(10)`类型的字段时,无论存储的数据长度如何,都会占用 10 个字符的空间。如果存储的数据不足 10 个字符,会用空格填充。例如,存储一些固定格式的代码,像一个由 8 位数字和字母组成的商品编码。
2.变长字符串类型
• `VARCHAR`:变长字符串,长度可变。它的最大长度可以指定,但实际占用的空间取决于存储的数据长度。例如,`VARCHAR(255)`可以存储最多 255 个字符的字符串,如果存储的是“hello”,那么实际占用的空间就是 5 个字符加上一个额外的字节来存储长度信息。适用于存储长度不固定的文本,如用户昵称、产品描述等。
• `TINYTEXT`:最大长度为 255 个字符的变长字符串。比`VARCHAR`更适合存储一些较短的文本,如简短的评论。
• `TEXT`:最大长度为 65535 个字符的变长字符串。可以存储较长的文本,如新闻文章的内容。
• `MEDIUMTEXT`:最大长度为 16777215 个字符的变长字符串。当需要存储非常长的文本,如书籍的内容时使用。
• `LONGTEXT`:最大长度为 4294967295 个字符的变长字符串。这是最长的字符串类型,适用于存储超长的文本数据,如大型文档库中的文档内容。
3.二进制字符串类型
• `BINARY`:定长二进制字符串,和`CHAR`类似,但存储的是二进制数据。例如,存储一些固定长度的二进制代码。
• `VARBINARY`:变长二进制字符串,和`VARCHAR`类似,用于存储长度可变的二进制数据。比如存储一些可变长度的二进制图像数据(经过编码压缩后的)。
• `TINYBLOB`、`BLOB`、`MEDIUMBLOB`、`LONGBLOB`:这些类型分别对应`TINYTEXT`、`TEXT`、`MEDIUMTEXT`、`LONGTEXT`,但存储的是二进制大对象(BLOB)。例如,`BLOB`可以存储图片、音频等二进制文件数据。
三、日期和时间类型
1.日期类型
`DATE`:用于存储日期,格式为`YYYY - MM - DD`。例如,存储用户的生日(1995-06-12)。
2.时间类型
• `TIME`:用于存储时间,格式为`HH:MM:SS`。可以用来存储一天中的某个时间点,如会议开始时间(14:30:00)。
4.日期时间类型
• `DATETIME`:用于存储日期和时间,格式为`YYYY - MM - DD HH:MM:SS`。例如,记录一个订单的下单时间(2024-07-23 10:15:30)。
• `TIMESTAMP`:也用于存储日期和时间,但它有一些特殊性质。它的范围通常是从 1970 年 1 月 1 日 00:00:00 UTC 到 2038 年 1 月 19 日 03:14:07 UTC。并且在某些情况下(如表的创建和修改操作),`TIMESTAMP`字段可以自动更新为当前的日期和时间。它可以用来记录数据的创建或更新时间戳。
四、其他类型
1.枚举类型(ENUM)
• `ENUM`:枚举类型,允许在列中存储一组预定义的字符串值中的一个。例如,定义一个`ENUM('male', 'female', 'other')`类型的字段来存储性别信息。这可以提高数据的规范性,确保性别字段只能是这三个值中的一个。
2.集合类型(SET)
• `SET`:集合类型,允许在列中存储一组预定义的字符串值中的多个值。例如,定义一个`SET('red', 'green', 'blue')`类型的字段来存储颜色信息,可以存储一个颜色(如“red”),也可以存储多个颜色(如“red,green”)。这在需要存储多个相关选项的场景下很有用,比如记录一个产品支持的颜色组合。
3.位类型(BIT)
• `BIT`:位类型,用于存储位字段值。例如,可以存储一些开关状态(0 或 1),在处理一些简单的布尔逻辑(如是否启用某个功能)时很有用。
1.5·mysql语法
一、语法基础
(一)SQL语法分类
1.数据定义语言(DDL)
• 用于定义和修改数据库结构。例如,创建数据库(CREATE DATABASE)、创建表(CREATE TABLE)、修改表结构(ALTER TABLE)和删除表(DROP TABLE)等。如`CREATE TABLE students(id INT, name VARCHAR(50), age INT);`,这条语句定义了一个名为students的表,包含id、name和age三个字段。
2.数据操纵语言(DML)
• 主要用于对表中的数据进行操作。包括插入数据(INSERT)、更新数据(UPDATE)、删除数据(DELETE)和查询数据(SELECT)。例如`INSERT INTO students VALUES(1, '张三', 20);`向students表插入一条数据;`UPDATE students SET age = 21 WHERE id = 1;`将id为1的学生年龄更新为21;`DELETE FROM students WHERE id = 1;`删除id为1的学生记录;`SELECT * FROM students;`查询students表中的所有数据。
3.数据控制语言(DCL)
• 用于控制用户对数据库的访问权限。如授予用户权限(GRANT)和撤销用户权限(REVOKE)。例如`GRANT SELECT, INSERT ON students TO user1;`授予用户user1对students表的查询和插入权限。
(二)SQL语法规范
1. 大小写不敏感
• SQL语句中的关键字(如SELECT、FROM、WHERE等)和标识符(如表名、列名等)通常不区分大小写。不过,为了提高可读性,一般将关键字大写,标识符小写。例如`SELECT name FROM students;`和`select name from students;`是等效的。
2.语句结束符
• 以分号(;)作为语句的结束符。在一些交互式数据库管理工具中,分号是必须的,它标志着一条SQL语句的结束,让数据库系统可以执行该语句。例如`SELECT * FROM students;`中的分号就是结束符。
3. 注释
• 单行注释使用两个连字符(--),从注释开始到该行末尾的所有内容都会被忽略。例如`SELECT * FROM students; --查询所有学生信息`。多行注释使用/和/,它们之间的所有内容都会被当作注释。例如`/*这是一个查询语句
SELECT * FROM students;
查询所有学生信息*/`。
3.空格和换行
• SQL语句中的空格和换行不会影响语句的执行。可以在语句中适当添加空格和换行来提高可读性。例如`SELECT * FROM students WHERE age > 18;`和`SELECT *
FROM students
WHERE age > 18;`是等效的。
(三)DQL(数据库查询语言)
1.SELECT语句
select是用于查询计算结果或查询数据表中的数据使用
基本语法
select 常量;
select 表达式;
select 函数;
下面来看具体案例
如何查询数据表
select * from username;
#查看数据表内数据格式 select * from 表名称;
如何查询一个表中的字段
select 用户名 from username ;
select 字段名 from 表名称 ;
条件查询
select uid from username where uid =1;
select 字段名 from 表名称 where 判断条件 ;
2.模糊匹配查询
select * from t_employee where ename like '%李%';
select * from t_employee where ename like '%李';
select * from t_employee where ename like '李%';
select * from t_employee where ename like '_李%';
'%李%' | 查询字段中包含‘李’的 |
'%李' | 查询字段中以‘李’结尾的 |
'李%' | 查询字段中以‘李’开头的 |
'—李%' | 查询字段中包含‘李’的但‘李’前面只能有一个字 |
3.逻辑运算符
逻辑与:&& 或 and
逻辑或:|| 或 or
逻辑非:! 或 not
1.6·mysql权限管理
一、MySQL权限管理概述
MySQL权限管理是通过一系列的权限设置来控制用户对数据库资源的访问和操作。它允许数据库管理员(DBA)根据用户的角色和需求,精确地分配不同的权限,从而确保只有授权用户才能访问特定的数据和执行特定的操作。权限管理不仅有助于保护敏感数据不被泄露,还能防止用户因误操作导致数据损坏或系统故障,对于维护数据库的稳定运行和数据安全至关重要。
二、MySQL权限体系架构
MySQL的权限体系架构主要由用户账户、权限类型和权限层级三部分构成。
(一)用户账户
用户账户是权限管理的基础,每个用户账户都有一个唯一的用户名和密码。在MySQL中,用户账户信息存储在`mysql.user`表中。创建用户账户时,需要指定用户名、密码以及一些基本的账户属性,如登录主机限制等。例如,可以创建一个只能从本地主机登录的用户,或者允许从特定IP地址范围内的主机登录的用户。通过合理设置登录主机限制,可以在一定程度上增强账户的安全性,防止未经授权的远程访问。
(二)权限类型
MySQL提供了丰富的权限类型,涵盖了对数据库的各种操作。常见的权限类型包括:
• 全局权限:这些权限适用于整个数据库服务器,对所有数据库和表都有效。例如,`CREATE USER`权限允许用户创建新的用户账户;`SHUTDOWN`权限允许用户关闭数据库服务器。全局权限的设置需要谨慎,因为拥有全局权限的用户对数据库系统具有较高的控制能力,可能会对整个数据库的安全和稳定性产生重大影响。
• 数据库权限:这些权限仅对特定的数据库有效。例如,`CREATE`权限允许用户在指定数据库中创建新的表或视图;`DROP`权限允许用户删除指定数据库中的表或视图。通过授予数据库权限,可以控制用户对特定数据库的访问和操作,实现数据的隔离和保护。
• 表权限:这些权限针对特定数据库中的特定表。例如,`SELECT`权限允许用户查询指定表中的数据;`INSERT`权限允许用户向指定表中插入数据;`UPDATE`权限允许用户修改指定表中的数据;`DELETE`权限允许用户删除指定表中的数据。表权限的设置可以精确地控制用户对表中数据的访问和操作,防止用户对敏感数据进行未经授权的访问或修改。
• 列权限:这些权限进一步细化到表中的特定列。例如,可以授予用户对某个表中特定列的`SELECT`权限,而限制其对其他列的访问。列权限的设置在某些场景下非常有用,比如在包含敏感信息(如用户密码)的表中,可以只允许特定用户访问非敏感列,而对敏感列进行严格限制,从而更好地保护数据的隐私性。
(三)权限层级
MySQL的权限层级从高到低依次为全局权限、数据库权限、表权限和列权限。当用户尝试执行某个操作时,MySQL会按照权限层级从高到低进行检查。如果用户在当前层级拥有相应的权限,则允许执行操作;如果在当前层级没有权限,则继续向下检查,直到找到相应的权限或最终拒绝操作。这种权限层级结构使得权限管理更加灵活和精细,可以根据不同的需求和场景进行精确的权限设置。
三、MySQL权限管理操作
(一)创建用户账户
创建用户账户是权限管理的第一步。可以使用`CREATE USER`语句来创建新的用户账户。例如,创建一个用户名为test,密码为password,只能从本地主机登录的用户账户,可以使用以下语句:
CREATE USER 'test'@'localhost' IDENTIFIED BY 'password';
(二)授予权限
创建用户账户后,需要根据用户的角色和需求授予权限。可以使用`GRANT`语句来授予权限。例如,授予用户test对testdb数据库的`SELECT`和`INSERT`权限,可以使用以下语句:
GRANT SELECT, INSERT ON testdb.* TO 'test'@'localhost';
在授予权限时,可以指定权限类型、数据库、表等信息,以实现精确的权限控制。同时,还可以使用`ALL PRIVILEGES`关键字来授予所有权限,但需谨慎使用,以避免过度授权。
(三)查看权限
为了了解用户账户所拥有的权限,可以使用`SHOW GRANTS`语句。例如,查看用户`testuser`所拥有的权限,可以使用以下语句:
SHOW GRANTS FOR 'test'@'localhost';
该语句会列出用户`test`所拥有的所有权限,包括全局权限、数据库权限、表权限等。通过查看权限,可以及时发现权限设置是否合理,是否存在过度授权或权限不足的情况,从而进行相应的调整。
(四)撤销权限
当用户的角色发生变化或不再需要某些权限时,需要及时撤销相应的权限。可以使用`REVOKE`语句来撤销权限。例如,撤销用户`test`对`testdb`数据库的`INSERT`权限,可以使用以下语句:
REVOKE INSERT ON testdb.* FROM 'test'@'localhost';
在撤销权限时,需要指定要撤销的权限类型、数据库、表等信息,以确保准确地撤销相应的权限。撤销权限后,用户将不再拥有被撤销的权限,从而无法执行相关的操作。
(五)刷新权限
在对权限进行修改(如授予权限、撤销权限等)后,需要刷新权限,使修改生效。可以使用`FLUSH PRIVILEGES`语句来刷新权限。例如:
该语句会重新加载权限信息,使刚刚修改的权限设置立即生效。如果不刷新权限,修改的权限可能不会立即生效,导致用户无法按照预期访问和操作数据库。
FLUSH PRIVILEGES;
四、MySQL权限管理的最佳实践
(一)遵循最小权限原则
在权限管理中,应始终遵循最小权限原则,即只授予用户完成其工作所必需的最小权限。避免过度授权,因为过度授权会增加数据被泄露或误操作的风险。例如,如果用户只需要查询数据,就不要授予其修改或删除数据的权限;如果用户只需要访问特定的数据库,就不要授予其全局权限。通过遵循最小权限原则,可以最大限度地减少潜在的安全风险,保护数据的安全性和完整性。
(二)定期审查权限设置
随着用户角色的变化和业务需求的调整,原有的权限设置可能不再适用。因此,需要定期审查权限设置,检查是否存在过度授权或权限不足的情况。可以通过查看权限、分析用户操作日志等方式来审查权限设置。如果发现权限设置不合理,应及时进行调整,以确保权限设置始终符合实际需求和安全要求。
(三)使用角色管理权限
在复杂的系统中,用户众多且角色各异,逐个为用户授予权限会非常繁琐且难以管理。此时,可以使用角色来管理权限。角色是一组权限的集合,可以将多个权限分配给一个角色,然后将角色分配给用户。例如,可以创建一个“数据分析师”角色,授予该角色查询数据的权限,然后将该角色分配给所有数据分析师用户。通过使用角色管理权限,可以简化权限管理过程,提高管理效率,同时也有助于保持权限设置的一致性和准确性。
(四)限制远程访问
为了增强数据库的安全性,应尽量限制远程访问。只有在必要的情况下,才允许用户从远程主机访问数据库,并且要严格控制远程访问的用户和权限。可以通过设置登录主机限制、使用VPN等方式来限制远程访问。例如,可以只允许特定IP地址范围内的主机访问数据库,或者要求用户通过VPN连接到内部网络后再访问数据库。限制远程访问可以有效防止未经授权的外部访问,降低数据库被攻击的风险。
(五)启用审计功能
启用审计功能可以记录用户的操作行为,为权限管理提供重要的参考依据。通过审计日志,可以了解用户何时访问了数据库、执行了哪些操作、访问了哪些数据等信息。如果发生数据泄露或误操作事件,审计日志可以帮助快速定位问题原因,找出责任人。同时,审计日志也可以用于分析用户的操作习惯和权限需求,为优化权限设置提供数据支持。在MySQL中,可以通过安装和配置审计插件来启用审计功能。
五、总结
MySQL数据库权限管理是一项复杂而重要的工作,它涉及到用户账户的创建与管理、权限类型的设置与分配、权限层级的控制等多个方面。通过合理的权限管理,可以有效保护数据库中的数据安全,防止数据泄露、误操作和恶意攻击等风险。在实际工作中,应遵循最小权限原则,定期审查权限设置,使用角色管理权限,限制远程访问,并启用审计功能,以确保MySQL数据库的权限管理既灵活又安全,为企业的数据安全保驾护航。
1.7·作者的废话
下一篇*信息收集与渗透测试流程*