• [技术干货] MySQL启动方式之systemctl与mysqld的对比详解【转】
    前言MySQL 是当今最流行的开源关系型数据库之一,其性能、可靠性和易用性让它广泛应用于各种场景。然而,对于初学者和运维人员来说,如何正确启动 MySQL 服务可能并不是一件简单的事情。尤其是当面临不同的启动方式时,如何选择最适合的方式往往会令人困惑。本文将聚焦两种常用的 MySQL 启动方式:通过 systemctl 启动和直接使用 mysqld 启动,详细分析它们的应用场景、优缺点,并给出对比和建议。1. 使用 systemctl 启动 MySQL1.1 什么是 systemctlsystemctl 是 Linux 系统中管理系统服务和控制进程的工具,基于 systemd 服务管理框架开发。它提供了统一的服务管理接口,包括启动、停止、重启服务以及设置开机自启动等功能。MySQL 服务可以通过 systemctl 管理,这种方式通常适用于系统中已将 MySQL 安装为服务(例如通过软件包管理器安装)。1.2 systemctl 启动 MySQL 的方法以下是常见的 systemctl 启动 MySQL 的命令:1234567891011启动 MySQL 服务sudo systemctl start mysqld 停止 MySQL 服务sudo systemctl stop mysqld 重启 MySQL 服务sudo systemctl restart mysqld 查看 MySQL 服务状态sudo systemctl status mysqld这些命令需要管理员权限(通常通过 sudo 提升权限)。1.3 应用场景使用 systemctl 启动 MySQL 服务的典型场景包括:生产环境中的服务管理在生产环境中,服务的稳定性和自动化管理是核心需求。使用 systemctl 可以轻松实现 MySQL 服务的开机自启动,并通过统一的接口管理其他系统服务。需要标准化管理的服务器如果服务器中运行着多个服务,例如 Web 服务、缓存服务和 MySQL 数据库,systemctl 提供了一致的管理方式,便于运维。多用户环境在团队协作的环境中,systemctl 的统一管理方式让团队成员更容易上手并保持一致性。1.4 优缺点优点易用性强systemctl 命令简单且直观,减少了管理复杂性。支持开机自启动可以通过命令配置 MySQL 服务在系统启动时自动运行:1sudo systemctl enable mysqld日志管理便捷通过 journalctl 查看 MySQL 的运行日志:统一管理使用统一的接口管理系统中所有服务,提升运维效率。缺点灵活性较差如果需要自定义启动参数(如修改端口、开启调试模式),systemctl 的默认配置可能不够灵活,需额外修改配置文件。依赖系统服务框架如果系统的 systemd 出现问题,MySQL 服务可能无法正常启动。2. 使用 mysqld 命令直接启动 MySQL2.1 什么是 mysqldmysqld 是 MySQL 的核心服务器程序,直接运行它可以启动 MySQL 数据库服务。相比 systemctl,直接使用 mysqld 启动更贴近 MySQL 的底层运行机制,因此提供了更大的灵活性。2.2 mysqld 启动 MySQL 的方法可以直接运行以下命令启动 MySQL:1mysqld --defaults-file=/etc/my.cnf &命令中的 --defaults-file 参数指定了配置文件路径,用于加载相关参数(如数据目录、端口号等)。如果需要指定其他启动参数,例如开启调试模式或更改监听端口,可以通过命令行直接传递参数:1mysqld --port=3307 --datadir=/var/lib/mysql --log-error=/var/log/mysql/error.log &2.3 应用场景使用 mysqld 直接启动的典型场景包括:开发和测试环境在开发或测试阶段,用户可能需要频繁更改 MySQL 的运行参数,直接运行 mysqld 能更灵活地控制 MySQL 的启动行为。调试和问题排查如果需要深入分析 MySQL 的运行状态或调试 MySQL 的问题,可以通过 mysqld 直接启动并附加调试选项。临时运行 MySQL在某些临时场景下(例如运行 MySQL 的多个实例),直接使用 mysqld 可以快速启动服务而无需修改系统服务配置。2.4 优缺点优点灵活性高用户可以根据需求自定义启动参数,无需修改系统配置文件。适合调试直接运行 mysqld 可以更方便地捕获错误信息和调试数据。独立性强不依赖系统服务管理框架,适合在轻量级或嵌入式系统中运行。缺点操作复杂需要手动管理后台运行、日志输出等,稍有不慎可能导致进程中断。缺乏自动化管理功能无法直接实现开机自启动、服务状态监控等功能。不便于长期维护适合短期使用,但对生产环境的大规模管理来说不够高效。3. 对比分析为了更直观地对比 systemctl 和 mysqld 两种启动方式的特点,以下以表格形式总结它们在不同维度的差异:对比维度systemctl 启动 MySQLmysqld 直接启动 MySQL适用场景适用于生产环境中的日常服务管理,特别是需要自动化和稳定性的场景。适用于开发、测试、调试环境,以及临时运行 MySQL 的场景。启动复杂度操作简单,通过 start、stop 等命令即可控制服务。操作较复杂,需要熟悉 MySQL 启动参数,且需手动管理后台运行。灵活性灵活性较低,需修改配置文件才能调整服务参数。灵活性高,支持在启动命令中直接传递自定义参数。自动化能力支持开机自启动,提供自动化服务管理(如 enable 和 disable)。不支持自动化管理,需手动配置和启动,不适合长期运行。日志管理集成 journalctl,日志查看和管理便捷统一。需要单独指定日志路径,日志管理较为分散。运行安全性依赖系统服务框架,稳定性更高,适合长期运行的生产环境。独立运行,可能因误操作导致服务异常,不适合直接用于生产环境。依赖性依赖系统服务框架(systemd),一旦框架故障可能受影响。不依赖其他服务框架,具有更高的独立性。调试能力调试能力有限,需要依赖日志文件排查问题。更适合调试,可直接运行并附加调试选项查看运行状态和错误信息。服务管理统一管理系统中的多个服务,适合复杂服务器环境。仅管理单个 MySQL 实例,服务管理能力较弱。通过以上对比可以看出,systemctl 强调稳定性和便捷性,是生产环境的理想选择;而 mysqld 更加灵活,适合需要快速调试或个性化运行的场景。根据实际需求选择适当的启动方式,将极大提升 MySQL 服务管理的效率与质量。结语MySQL 的启动方式需要根据具体需求和使用场景选择。对于生产环境,systemctl 是首选,提供了稳定、易用的服务管理功能。而对于开发和调试任务,mysqld 的直接启动方式则提供了无可比拟的灵活性。理解这两种启动方式的优缺点和适用场景,可以帮助开发者和运维人员更高效地管理 MySQL 服务。无论选择哪种方式,都应确保充分了解 MySQL 的配置和运行机制,以确保服务的稳定性和安全性。
  • [技术干货] 全面解析MySQL常见问题的排查与解决方法【转】
    前言MySQL 是一款常用的关系型数据库管理系统,广泛应用于各类应用开发和数据管理场景。然而,在实际使用中,MySQL 有时会遇到启动失败、服务中断或性能问题等情况,导致服务无法正常运行。为快速定位问题并恢复服务,我们需要掌握 MySQL 问题排查的思路和方法。本文将从日志分析、服务状态检查、配置文件验证等多个方面,详细讲解 MySQL 出现问题时的排查步骤,并结合实际操作案例帮助您更高效地解决问题。1. 查看 MySQL 日志信息日志是 MySQL 故障排查的重要工具,它记录了数据库运行过程中的详细信息,包括错误、警告和其他运行状态。通过日志分析,我们可以快速定位问题。1.1 日志文件的种类与路径MySQL 的日志文件通常存储在 /var/log 目录下,其中最常用的日志文件为 mysqld.log。具体包括:错误日志 :记录数据库在启动、运行或停止时发生的错误和警告。查询日志 (可选):记录所有客户端执行的 SQL 查询。慢查询日志 (可选):记录超过设定执行时间的 SQL 语句。主要日志文件路径:/var/log/mysqld.log:默认的 MySQL 错误日志文件。1.2 查看日志内容的方法通过以下命令可以查看日志内容:实时查看日志1tail -f /var/log/mysqld.log此命令可以实时监控日志的更新,适用于跟踪服务启动时的错误信息。分页查看日志1less /var/log/mysqld.log使用 less 命令可按页浏览日志内容,并支持搜索关键字(如 ERROR)。查看系统日志 如果 mysqld.log 中未显示详细错误信息,还可以查看系统日志:12journalctl -u mysqld.servicejournalctl -xe1.3 日志分析的关键点在日志中,重点关注以下几类信息:错误代码 :如 ERROR 1045 表示用户认证失败,ERROR 2002 表示无法连接到 MySQL 服务。服务启动失败原因 :如权限问题、端口冲突等。文件路径异常 :如 datadir 指向的目录无法访问。示例日志分析:12[ERROR] InnoDB: Unable to lock ./ibdata1 error: 13[ERROR] InnoDB: Operating system error number 13 in a file operation.从以上日志可以判断是 ibdata1 文件无法访问,原因可能是文件权限不足或被其他程序占用。2. 查看 MySQL 服务状态当 MySQL 无法正常运行时,检查服务状态是关键步骤之一。2.1 查看服务状态使用以下命令查看 MySQL 服务的当前状态:1systemctl status mysqld运行结果将显示服务的状态(如 active、inactive 或 failed),并提供错误原因。若服务未运行,可尝试启动:1sudo systemctl start mysqld如需调试问题,可以在启动前清理现有进程:1sudo pkill -9 mysqld2.2 检查进程运行情况确认 MySQL 是否已成功启动:1ps aux | grep mysqld2.3 常见启动失败问题与解决端口占用如果 MySQL 使用的默认端口(3306)被占用,可以通过以下命令确认:1netstat -tuln | grep 3306若端口被占用,可修改配置文件中的端口号或停止冲突服务。权限问题若日志提示目录无法访问:12ls -ld /var/lib/mysqlchown -R mysql:mysql /var/lib/mysql3. 检查 MySQL 配置信息MySQL 的配置文件是服务运行的核心,它决定了数据存储路径、日志路径等多个关键参数。配置文件错误可能导致服务启动失败。3.1 配置文件的路径与内容默认的 MySQL 主配置文件路径为:/etc/my.cnf通过以下命令查看和编辑配置:12cat /etc/my.cnfvim /etc/my.cnf配置文件中重要的参数包括:数据目录 :datadir(默认 /var/lib/mysql)日志文件 :log-error端口号 :port(默认 3306)3.2 验证配置文件的正确性在修改配置文件后,可以通过以下命令验证配置文件是否正确:1mysqld --verbose --help | grep -A 1 "Default options"若配置无误,再尝试启动服务。4. 其他常见问题与解决方法4.1 数据库表损坏如果某些表因系统中断等原因损坏,可尝试修复:1mysqlcheck -u root -p --all-databases --auto-repair此命令将检查并修复所有数据库表。4.2 无法登录 MySQL忘记 root 密码 进入安全模式修改密码:12mysqld_safe --skip-grant-tables &mysql -u root然后更新密码:12UPDATE mysql.user SET authentication_string=PASSWORD('new_password') WHERE User='root';FLUSH PRIVILEGES;远程连接失败 确保防火墙开放 MySQL 端口:12sudo firewall-cmd --permanent --add-port=3306/tcpsudo firewall-cmd --reload结语MySQL 是构建现代应用程序的基础,但在运行过程中可能遇到各种问题。通过日志分析、服务状态检查和配置文件验证,我们可以快速定位问题并采取有效的解决措施。面对复杂问题时,逐步排查并验证每一步操作的结果尤为重要。此外,良好的备份和监控机制可以帮助减少故障发生的风险。希望本文能为您在解决 MySQL 问题时提供有用的参考。
  • [技术干货] Mysql常见索引结构总结
    一、索引的基本概念索引类似于书籍的目录,通过索引可以快速定位到数据表中的某一行,而无需逐行扫描整个表。索引在数据库管理系统(DBMS)中起到加速查询、优化性能的重要作用。二、索引的类型MySQL索引根据存储方式、逻辑用途和实际使用场景可以分为多种类型:B-树索引(BTREE索引):叶子节点包含条目直接指向表里的数据行。 叶子节点之间彼此相连,一个叶子节点有一个指向下一个叶子节点的指针。 分支节点包含条目指向索引里其他的分支节点或者叶子节点。 根节点位于树的最顶端。 哈希索引(HASH索引):根据索引列对应的哈希值获取表的记录行。 MySQL中仅MEMORY和HEAP存储引擎支持。 不支持排序,只支持等值比较。普通索引:允许在定义索引的列中插入重复值和空值。 使用关键字INDEX或KEY创建。唯一索引:避免数据出现重复。 列值必须唯一,允许有空值。 使用UNIQUE关键字创建。主键索引:专门为主键字段创建的索引。 特殊的唯一索引,不允许值重复或为空。 使用PRIMARY KEY关键字创建。空间索引:对空间数据类型的字段建立的索引。 使用SPATIAL关键字进行扩展。 只能在MyISAM存储引擎的表中创建。全文索引:用来查找文本中的关键字。 只能在CHAR、VARCHAR或TEXT类型的列上创建。 MySQL中仅MyISAM存储引擎支持。单列索引和组合索引:单列索引只包含原表的一个列。 组合索引(复合索引)包含原表的多个列,使用时需遵循最左匹配原则。三、索引的操作创建索引:CREATE INDEX index_name ON table_name(column_name); CREATE UNIQUE INDEX index_name ON table_name(column_name); CREATE SPATIAL INDEX index_name ON table_name(column_name); CREATE FULLTEXT INDEX index_name ON table_name(column_name);查询索引:SHOW INDEX FROM table_name;删除索引:DROP INDEX index_name ON table_name;四、索引的使用场景经常被查询的字段:如用户ID、订单号等。 需要进行范围查询的字段:如日期范围、价格范围等。 外键字段:用于关联查询。 排序和统计操作的字段。五、索引的优化技巧联合索引的最左匹配原则:必须按照从左到右的顺序匹配,直到遇到范围查询(>、<、between、like)停止匹配。避免滥用索引:索引会占用额外空间,且会影响写操作(插入、删除、修改)的速度。 查询时尽量利用索引覆盖:使用索引覆盖可以减少回表操作,提升效率。 禁止对索引字段使用函数、运算符操作:这样会导致索引失效。字符串模糊查询:避免使用'%值%',可以使用'值%'来有效利用索引。 排序中尽量使用索引字段:可以减少排序操作,提升查询效率。优化分页查询:对于连续单调的字段,采用子查询提升分页性能。 对于不连续单调的字段,采用正序查询和倒序查询,或做连续单调映射表。 order by和limit混合使用:可能导致排序结果和预期不一致,需要按照官方文档说明,在order by的字段中加上一个唯一字段。 通过合理创建和使用索引,可以显著提高MySQL数据库的查询性能。然而,索引并非多多益善,需要根据具体的使用场景进行合理选择和配置,以达到最佳的性能效果。
  • [技术干货] MySQL 备份全解析:原理与实践
    MySQL 备份全解析:原理与实践一、MySQL 备份的重要性在当今数字化时代,数据是企业和个人最为宝贵的资产之一。MySQL 作为广泛使用的关系型数据库管理系统,存储着大量关键信息,如用户数据、业务交易记录、网站内容等。然而,数据库面临着各种潜在风险,包括硬件故障、软件错误、人为误操作、恶意攻击以及自然灾害等,这些都可能导致数据丢失或损坏,给业务带来严重影响甚至是毁灭性打击。定期进行 MySQL 备份是保障数据安全的关键策略。通过备份,可以在数据遭遇意外情况时,迅速恢复数据库到之前的某个可用状态,最大限度地减少数据丢失造成的损失,确保业务的连续性和稳定性。二、MySQL 备份的原理MySQL 备份主要基于数据库的数据存储和事务处理机制。MySQL 将数据存储在各种数据文件和日志文件中,备份过程就是对这些文件的合理处理与复制。(一)基于文件系统的备份原理MySQL 的数据文件包括存储表结构和数据的文件(如 InnoDB 的表空间文件和 MyISAM 的数据文件与索引文件)以及相关的配置文件等。基于文件系统的备份直接复制这些数据文件和日志文件到指定的备份位置。例如,在 Linux 系统中,如果 MySQL 的数据目录为 /var/lib/mysql,可以使用操作系统的文件复制命令(如 cp 或 rsync)将该目录下的文件复制到备份目录。但这种方式存在一些局限性:如果在备份过程中数据库正在进行写入操作,可能会导致备份的数据不一致。因为复制文件的瞬间,可能部分数据已经被修改但尚未完全写入文件,这样备份出来的数据就不是一个完整的、符合某个时间点一致性要求的数据快照。(二)基于逻辑备份的原理逻辑备份是通过执行 SQL 语句来获取数据库对象的定义和数据,并将其以文本形式保存。例如,使用 mysqldump 工具,它会连接到 MySQL 服务器,遍历数据库中的所有表,生成创建表结构的 CREATE TABLE 语句以及插入数据的 INSERT INTO 语句。这种方式的优点是备份文件是文本格式,便于查看、编辑和迁移。而且可以在不同版本的 MySQL 之间进行恢复(只要 SQL 语法兼容)。但缺点是对于大型数据库,生成和执行大量的 SQL 语句可能会消耗较长时间和较多系统资源,并且在备份过程中数据库的写入操作也可能影响备份的一致性,不过相比基于文件系统的备份,其影响相对较小,因为它是基于事务隔离级别来读取数据的。(三)基于二进制日志备份的原理MySQL 的二进制日志(binary log)记录了数据库的所有更改操作,包括数据修改(如 INSERT、UPDATE、DELETE)、表结构变更等。通过定期备份二进制日志,可以记录数据库在两次全量备份之间的所有变化。在恢复数据时,先恢复全量备份,然后再按照二进制日志中的记录顺序,依次重放这些更改操作,就可以将数据库恢复到任意一个基于全量备份时间点之后的某个时刻的状态。这种方式可以实现增量备份和基于时间点的恢复,大大提高了备份和恢复的灵活性。三、MySQL 备份教程(一)使用 mysqldump 进行逻辑备份全量备份单个数据库命令格式:mysqldump -u [用户名] -p [数据库名] > [备份文件名.sql]例如,备份名为 mydb 的数据库,用户名为 root,密码为 mypassword,备份文件名为 mydb_backup.sql,则命令如下:mysqldump -u root -p mydb > mydb_backup.sql执行命令后,会提示输入密码,输入正确密码后,mysqldump 会连接到 MySQL 服务器,将 mydb 数据库中的所有表结构和数据以 SQL 语句的形式输出到 mydb_backup.sql 文件中。全量备份所有数据库命令格式:mysqldump -u [用户名] -p --all-databases > [备份文件名.sql]例如:mysqldump -u root -p --all-databases > all_databases_backup.sql这将备份 MySQL 服务器上的所有数据库到一个 SQL 文件中。备份数据库结构(不包含数据)命令格式:mysqldump -u [用户名] -p -d [数据库名] > [备份文件名.sql]例如:mysqldump -u root -p -d mydb > mydb_structure_backup.sql这样生成的备份文件中只有创建表结构的 CREATE TABLE 语句,没有数据插入语句。(二)使用 xtrabackup 进行物理备份(适用于 InnoDB 引擎)安装 xtrabackup如果是在 Linux 系统下,可以从 Percona 官方网站下载适合您系统版本的 xtrabackup 安装包。例如,对于 CentOS 系统,可以使用以下命令安装相关依赖并下载 xtrabackup:yum install -y perl-DBD-MySQL perl-Time-HiRes perl-IO-Socket-SSL perl-Digest-MD5 wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.26/binary/redhat/7/x86_64/percona-xtrabackup-24-2.4.26-1.el7.x86_64.rpm rpm -ivh percona-xtrabackup-24-2.4.26-1.el7.x86_64.rpm全量备份命令格式:innobackupex --user=[用户名] --password=[密码] [备份目录]例如,备份到 /data/backup/mysql 目录,用户名为 root,密码为 mypassword:innobackupex --user=root --password=mypassword /data/backup/mysql执行命令后,xtrabackup 会创建一个包含全量数据和日志文件的备份目录,目录名通常包含备份时间戳。增量备份首先进行一次全量备份(如上述步骤),假设全量备份目录为 /data/backup/mysql/202411271000。然后在数据库有新的更改后,进行增量备份,命令格式:innobackupex --user=[用户名] --password=[密码] --incremental --incremental-basedir=[全量备份目录] [增量备份目录]例如:innobackupex --user=root --password=mypassword --incremental --incremental-basedir=/data/backup/mysql/202411271000 /data/backup/mysql/202411271200_incr这将创建一个基于全量备份的增量备份目录 /data/backup/mysql/202411271200_incr。(三)备份二进制日志配置二进制日志在 MySQL 配置文件(通常是 my.cnf 或 my.ini)中,确保开启了二进制日志功能:[mysqld] log-bin=mysql-bin重启 MySQL 服务使配置生效。备份二进制日志文件二进制日志文件通常存储在 MySQL 的数据目录下,文件名以 mysql-bin. 开头。可以使用操作系统的文件复制命令将需要备份的二进制日志文件复制到备份目录。例如:cp /var/lib/mysql/mysql-bin.000001 /data/backup/mysql/binlog/为了确保备份的完整性,最好在备份二进制日志文件时记录当前二进制日志的位置,可以使用 SHOW MASTER STATUS 语句获取当前二进制日志文件名和位置信息,并将其保存到一个文本文件中,以便在恢复时使用。四、MySQL 备份的注意事项(一)备份的一致性无论是逻辑备份还是物理备份,都要确保备份数据的一致性。在进行备份时,尽量选择数据库负载较低的时段,减少数据更改操作对备份的影响。对于逻辑备份,可以使用 --single-transaction 选项(适用于 InnoDB 引擎),它会在备份开始前启动一个事务,确保在备份过程中读取的数据是某个时间点的一致性快照。(二)备份的频率根据数据的重要性和变化频率确定合适的备份频率。对于数据变化频繁且对数据丢失容忍度低的数据库,如电商交易数据库,可能需要每天甚至更频繁地进行全量备份和定期的增量备份;而对于数据相对稳定的数据库,如一些企业内部的配置管理数据库,可以适当降低备份频率。(三)备份的存储与管理备份文件应存储在安全可靠的位置,最好是与数据库服务器不同的物理存储设备上,以防止因服务器硬件故障导致备份文件也丢失。同时,要建立良好的备份文件管理策略,包括对备份文件的命名规范、存储目录结构的规划以及备份文件的过期清理等,避免备份文件占用过多的存储空间。(四)备份的验证与恢复测试定期验证备份文件的完整性和可用性,可以尝试从备份文件中恢复部分数据或整个数据库到测试环境中,确保在真正需要恢复数据时,备份文件能够正常工作。通过深入理解 MySQL 备份的原理并熟练掌握备份教程中的各种方法,能够有效地保障 MySQL 数据库中的数据安全,为业务的稳定运行提供坚实的数据后盾。在实际应用中,根据数据库的特点和业务需求,合理选择备份策略和工具,并严格遵循备份的注意事项,是构建可靠的 MySQL 数据保护机制的关键所在。
  • [技术干货] 【MySQL】 穿透学习数据库理论与知识剖析-转载
     mysql登录 mysql登录支持本地登录, 如下: mysql -uroot -p;  //直接使用root登录, 使用密码登录  mysql 也支持远程登录, 只需要提供对应的mysql所在主机的ip地址和端口号: mysql -h IP地址 -P 端口号 -u用户名 -p;   //登录远端mysql服务, 使用密码登录  mysql退出 mysql退出就是quit  什么是数据库          mysql它是数据库服务的客户端         mysqld它是数据库服务的服务器端         mysql本质:基于C(mysql)S(mysqld)模式的一种网络服务。         mysql是一套给我们提供数据存取得服务的网络程序。         数据库一般指的是, 在磁盘或者内存中存储的特定结构组织的数据 -- 将来在磁盘上存储的一套数据库方案。         数据库服务 -- mysqld。         一般的文件给我们确实提供了数据的存储功能, 但是数据并没有给我们提供非常好的数据管理能力。          数据库本质:对数据内容存储的一套解决方案。用户给数据库字段或者要求, 数据库直接给用户结果。         然后数据库的工作模式就是下图:   见一见数据库         样例:使用mysql建立一个数据库, 建立一张表结构, 插入一些数据。-- 对比一下mysql在linux中是如何表现的。          我们进入/var/lib/mysql, 可以看到里面一开始没有newdatabase文件。 但是我们在mysql中创建一个数据库后, 就能看到, /var/lib/mysql里面多出来了一个newdatabase文件。 所以, 我们就能知道, 其实建立数据库, 本质就是在linux下创建一个目录。  然后我们创建一个表:  use database;  //使用某个数据库 create table 表名称(     字段一 数据类型,     字段二 数据类型,     字段三 数据类型,     ……………… );   //创建表结构  然后我们就能发现/var/lib/mysql/newdatabase下面多出来了一个文件: 所以我们就知道了,在数据库内建立表, 本质就是在linux下创建对应的文件即可!  问题是, 上面这两个动作是谁做的? ——是mysqld服务帮我们做的。  数据库本质其实也是文件!只不过这些文件并不由程序员直接操作,而是由数据库服务帮我们进行操作。  常见的主流数据库         常见的主流数据库其实有我们现在用的MySQL、 SQL server、Oracle、Redis等等。其中, Redis和其他三个又有区分, Redis是内存数据库, 它将数据存储在内存中, 所以有有非常快的读取速度。另外三个是关系型数据库, 基于表格结构, 适合做结构化的存储。  服务器、数据库、表关系          所谓的安装数据库服务器,其实就是在机器上面安装了一个mysqld,也就是数据库管理系统程序。  它以守护进程的形式在后台一直在运行。一次可以管理多个数据库。           这些数据库其实就是上面的DB。一般开发人员对每一个应用会创建一个数据库。          为了保证应用中实体的数据,所以一般会在数据库中创建多个表,用来保存实体中的数据  mysql架构         MySQL是一个可移植的数据库, 其实认识MySQL的架构,其实就是认识mysqld是如何进行服务的。 下面是mysqld的结构:                 mysql首先最上层的是客户端, 也就是mysql那个程序。 mysql的客户端其实不只是能用这个程序来充当, 还可以使用c++等语言, 或者图形化界面的工具。          然后下面就是mysqld, 也就是mysqlserver。 它整体是由我们的三层去构成。 第一层叫做链接池, 就是用来网络服务进行连接, 判断用户的身份合法性, 做一些安全管理相关的工作。           第二层就是我们的SQL相关的内容, 这一层用来将上层发来的SQL语句进行词法分析, 语法分析。 SQL语句优化等等工作。 就类似于编译器。          第三层就是进行匹配一个一个具体的存储引擎, 存储引擎就类似于驱动, 这个存储引擎从上层接收我们下达下来的一些经过词法语法分析优化后的语句,然后对它们进行解释,所以, 这一层就是真正的办事的。   SQL分类 DDL:数据定义语言——用来维护数据的结构, 用来定义表等 DML:数据操作语言——对表当中的内容进行操作。 DCL:数据控制语言——负责权限和事物的管理。 存储引擎       存储引擎:数据库管理系统如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。                  MySQL采用插件式的存储引擎, 支持多种存储引擎。 查看存储引擎的指令是:  show engines    ——————以上就是本节全部内容哦, 如果对友友们有帮助的话可以关注博主, 方便学习更多知识哦!!!    ————————————————                              版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。                          原文链接:https://blog.csdn.net/strive_mianyang/article/details/143477968 
  • [技术干货] 【MySQL初阶】--- MySQL在Ubuntu环境下安装-转载
     🏠 MySQL安装 1. 更新系统的软件包列表  sudo apt-get update  对于以下可能出现的问题博主是采用重装系统(简单粗暴。。)解决的,有更好的解决方法欢迎在评论区交流:   2. 安装MySQL服务器  sudo apt-get install mysql-server  3. 检查MySQL服务是否启动,若没有启动手动启动  ps axj | grep mysql  若没有则手动启动:  sudo service mysql start 4. 登录MySQL(默认安装之后免密码登录)   5. 配置密码  (1) 查看root用户的身份验证方式  SELECT user, host, plugin FROM mysql.user WHERE user = 'root';  需要改成 mysql_native_password 方式。  (2) 修改身份验证方式  ALTER USER 'root'@'localhost' IDENTIFIED BY 'xxxxx';  (3)刷新权限  FLUSH PRIVILEGES;  (4) 退出和登录  退出:  exit;  quit;  登录:  mysql -u root -p  🏠 MySQL卸载 1. 停止MySQL服务  sudo service mysql stop 2. 卸载MySQL服务器  sudo apt-get remove --purge mysql-server mysql-client mysql-common mysql-server-core-* mysql-client-core-* 3. 删除相关依赖  sudo apt-get autoremove 4. 删除配置文件和数据库文件  sudo rm -rf /etc/mysql /var/lib/mysql 5. 清除残留的配置文件  sudo rm -rf /etc/mysql* /var/lib/mysql* /var/log/mysql* 6. 刷新系统包管理器  sudo apt-get update  ————————————————                              版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。                          原文链接:https://blog.csdn.net/2301_79448270/article/details/143455689 
  • [专题汇总] 你想知道的这里都有,10月份干货合集,速进
     大家好,四季度的第一个干货合集来了,这次带来的东西主要涉及到golang,python,MySQL,redis,PostgreSQL,docker,minio,鸿蒙等等,希望可以帮助到到家 1. golang gin ShouldBind的介绍和使用示例详解【转载】 https://bbs.huaweicloud.com/forum/thread-02127165743740541019-1-1.html  2.golang flag介绍和使用示例【转载】 https://bbs.huaweicloud.com/forum/thread-0205165743832841012-1-1.html  3.Go语言中的格式化输出占位符的用法详解【转】 https://bbs.huaweicloud.com/forum/thread-0242165743874465013-1-1.html  4.Python中格式化字符串的方法总结【转载】 https://bbs.huaweicloud.com/forum/thread-02107165744051753023-1-1.html  5.Python使用进程池并发执行SQL语句的操作代码【转载】 https://bbs.huaweicloud.com/forum/thread-02111165744119162009-1-1.html  6.Mysql转PostgreSQL注意事项及说明【转】 https://bbs.huaweicloud.com/forum/thread-0205165745689855016-1-1.html  7.一文彻底讲清该如何处理mysql的死锁问题【转载】 https://bbs.huaweicloud.com/forum/thread-02111165745597896010-1-1.html  8.Redis实现分布式事务的示例【转载】 https://bbs.huaweicloud.com/forum/thread-0242165745553696016-1-1.html  9.MySQL服务无法启动且服务没有报告任何错误解决办法【转载】 https://bbs.huaweicloud.com/forum/thread-02127165745354539021-1-1.html      10.Python+OpenCV实现火焰检测【转载】 https://bbs.huaweicloud.com/forum/thread-0205165744941700014-1-1.html  11.Python Word实现批量替换文本并生成副本【转载】 https://bbs.huaweicloud.com/forum/thread-02127165744886949020-1-1.html  12.Python实现OFD文件转PDF【转载】 https://bbs.huaweicloud.com/forum/thread-0286165744755315017-1-1.html  13.Python中将文件从一个服务器复制到另一个服务器的4种方法【转】 https://bbs.huaweicloud.com/forum/thread-0242165744680560015-1-1.html  14.Python实现将pdf文档保存成图片格式【转载】 https://bbs.huaweicloud.com/forum/thread-0242165744483484014-1-1.html  15.Python通过keyboard库实现模拟和监听键盘【转载】 https://bbs.huaweicloud.com/forum/thread-0205165744195219013-1-1.html  16.docker 配置国内镜像源 https://bbs.huaweicloud.com/forum/thread-0286165634815059009-1-1.html  17.Typora 代码块Mac风格化 https://bbs.huaweicloud.com/forum/thread-02111165634917052004-1-1.html  18.MinIO上传和下载文件及文件完整性校验 https://bbs.huaweicloud.com/forum/thread-0286165634713872008-1-1.html  19.鸿蒙系统特性 https://bbs.huaweicloud.com/forum/thread-02127165634384647014-1-1.html  20.Java EasyExcel 导出报内存溢出如何解决 https://bbs.huaweicloud.com/forum/thread-02111165634289077003-1-1.html 
  • [技术干货] 一文彻底讲清该如何处理mysql的死锁问题【转载】
    前言MySQL 死锁 是指两个或多个事务互相等待对方持有的锁,从而导致所有事务都无法继续执行的现象。在 InnoDB 存储引擎中,死锁是通过锁机制产生的,特别是在并发较高、业务逻辑复杂的情况下,更容易发生死锁。一、MySQL 死锁的成因MySQL 的死锁一般发生在 行级锁 上。常见的死锁成因包括:事务 A 和事务 B 持有互相需要的锁:事务 A 锁住了记录 1,事务 B 锁住了记录 2,事务 A 尝试获取记录 2 的锁,而事务 B 试图获取记录 1 的锁,造成了死锁。不同顺序的锁定:两个事务对同一组资源请求加锁,但是加锁顺序不同,导致互相等待。例如,事务 A 按照顺序锁定记录 1 和记录 2,而事务 B 以相反的顺序锁定记录 2 和记录 1。使用了 gap lock (间隙锁):在 InnoDB 的 Next-Key Locking 机制下,间隙锁定也可能导致死锁,尤其是在范围查询时,多个事务试图锁定同一间隙。长事务和锁等待时间过长:事务执行时间长,未及时释放锁,造成其他事务等待锁超时或死锁。二、死锁检测与处理MySQL 使用 死锁检测 来处理死锁问题。MySQL 会自动检测事务是否处于死锁状态,并中止其中一个事务,释放锁以允许另一个事务继续执行。InnoDB 存储引擎通过引入死锁检测机制来解决这个问题,当检测到死锁时,会选择一个事务进行回滚,以打破僵局。被回滚的事务会抛出 Deadlock found when trying to get lock 错误。三、如何避免和处理 MySQL 的死锁?1. 合理设计索引使用合适的索引可以减少加锁的范围,降低死锁的发生概率。没有索引时,MySQL 会对表中的所有记录加锁,增加了锁冲突的机会。因此,合理地设计和使用索引,确保查询能够快速找到数据,避免不必要的锁争用,能够显著减少死锁风险。2. 保持加锁顺序一致事务操作表中的多条记录时,保持一致的加锁顺序可以有效减少死锁问题。例如,如果两个事务都需要加锁相同的资源,确保它们按照相同的顺序请求锁,避免死锁。3. 减少事务的锁定时间尽量缩短事务的执行时间,减少锁的持有时间。将事务划分为更小的逻辑单元,避免长时间占用资源。同时,将非必要的复杂操作尽量移到事务外执行。4. 减少并发度在并发较高的情况下,增加锁冲突和死锁的几率较高。可以通过控制并发度来减少锁争用,比如使用乐观锁机制,避免频繁加锁。5. 使用表锁替代行锁对于一些写操作集中的场景,可以考虑使用表锁替代行锁,以避免行级锁导致的死锁。不过表锁会导致并发性能下降,所以需要根据业务场景选择合适的锁。6. 锁定更小的范围尽量通过使用主键索引和合适的条件,减少事务锁定的行范围。特别是在 UPDATE 或 DELETE 操作中,使用精准的查询条件来限制锁的作用范围。7. 分批提交事务对于批量操作,考虑将大事务拆解成多个小事务,减少一次性加锁的行数和操作范围,减少锁的持有时间。8. 选择合适的事务隔离级别适当降低事务隔离级别可以减少锁冲突的几率。例如,可以将事务隔离级别从 Serializable 调整为 Read Committed 或 Repeatable Read,来减少行锁定的情况。9. 加锁操作使用SELECT ... FOR UPDATE当你需要在查询数据后立即进行更新时,可以使用 SELECT ... FOR UPDATE 来显式地锁定行,避免在更新时再去加锁造成的死锁。四、常见死锁示例以下是一个常见的死锁示例,两个事务尝试对相同的记录加锁但顺序不同:12345678910111213141516-- 事务 ASTART TRANSACTION;UPDATE orders SET status = 'shipped' WHERE id = 1; -- 锁住记录 1-- 此时,事务 B 在等待锁定记录 1-- 事务 BSTART TRANSACTION;UPDATE orders SET status = 'shipped' WHERE id = 2; -- 锁住记录 2-- 此时,事务 A 在等待锁定记录 2-- 事务 A 尝试更新记录 2,但事务 B 持有锁,事务 A 等待UPDATE orders SET status = 'shipped' WHERE id = 2;-- 事务 B 尝试更新记录 1,但事务 A 持有锁,事务 B 等待-- 死锁发生,MySQL 自动检测并回滚其中一个事务五、如何检测和分析死锁?通过以下方式可以检测和分析 MySQL 中的死锁:1. 启用 innodb_print_all_deadlocks 参数通过设置 innodb_print_all_deadlocks=ON,可以在 MySQL 日志中输出所有的死锁信息,便于分析和调试。2. 使用 SHOW ENGINE INNODB STATUS 命令在 MySQL 发生死锁后,可以使用 SHOW ENGINE INNODB STATUS 命令查看死锁信息。该命令会输出最近发生的死锁情况,帮助开发者找到死锁的根源。1SHOW ENGINE INNODB STATUS\G输出中包含的信息包括:哪个事务被回滚发生死锁时,事务分别持有哪些锁,等待哪些锁事务操作的 SQL 语句3. MySQL 慢查询日志开启 MySQL 慢查询日志,也可以间接帮助发现由于锁等待导致的性能问题,虽然不能直接显示死锁,但可以作为锁冲突问题排查的辅助工具。六、死锁后的应对策略当发生死锁时,MySQL 会自动回滚其中一个事务,开发人员需要捕获并处理这种异常。在代码中,你可以使用如下方式处理死锁:123456789101112try {    // 执行事务    ...} catch (SQLException e) {    if (e.getErrorCode() == 1213) { // 1213 代表死锁错误代码        // 死锁检测,进行重试        retryTransaction();    } else {        // 其他异常处理        throw e;    }}通过捕获死锁异常并进行适当的重试,系统可以在发生死锁后继续执行,从而提升系统的健壮性。
  • [技术干货] MySQL服务无法启动且服务没有报告任何错误解决办法【转载】
    MySQL 服务正在启动 .MySQL 服务无法启动。服务没有报告任何错误。请键入 NET HELPMSG 3534 以获得更多的帮助。一般解决方法:D:\mysql-8.0.26-winx64\bin>sc query mysql看看是否有对应服务(对应的SQL服务名称)如果存在则会弹出一些信息,不存在则提示未找到服务。D:\mysql-8.0.26-winx64\bin>sc delete mysql(对应的SQL服务名称)执行该命令即可删除服务D:\mysql-8.0.26-winx64\bin>mysqld --initialize-insecure 初始化(会清空密码以及数据库!)D:\mysql-8.0.26-winx64\bin>mysqld -installService successfully installed.D:\mysql-8.0.26-winx64\bin>net start mysqlMySQL 服务正在启动 ..MySQL 服务已经启动成功。其他解决方法:1 考虑是否端口占用在管理员命令行窗口运行netstat -aon查看是哪个进程占用了3306端口,看的是0.0.0.0:3306对应的进程。在刚刚的命令行窗口运行taskkill /f /pid xxxx,就可以杀掉对应进程。 然后再运行net start mysql就成功了。2 检查my.ini中文件夹地址与现在的mysql文件夹地址是否一致basedir="D:/Environment/MySQL5.7.23/"datadir=D:/Environment/MySQL Data/Data
  • [技术干货] MySQL Dump 原理及用法详解
    MySQL Dump 原理及用法详解概述MySQL Dump 是一个非常有用的工具,用于备份和恢复 MySQL 数据库。它允许用户创建数据库的逻辑备份,该备份包含了创建表结构和/或数据的 SQL 语句。通过这些 SQL 语句,可以在另一个 MySQL 服务器上重建数据库。工作原理mysqldump 程序读取 MySQL 服务器中的表定义(即 schema)以及实际的数据,并将它们转换成一系列的 SQL 语句。这些语句包括 CREATE TABLE、INSERT INTO 等,能够用来重新创建数据库的内容。当使用 mysqldump 时,可以指定是否导出结构、数据或者两者都导出。导出过程连接到 MySQL 服务器:首先,mysqldump 需要与运行中的 MySQL 服务器建立连接。获取表信息:接着,它会查询数据库中所有需要备份的表的信息。生成 SQL 语句:如果指定了导出表结构,mysqldump 将为每个表生成 CREATE TABLE 语句。如果选择导出数据,它将遍历每个表的数据行并生成相应的 INSERT 语句。输出文件:最后,所有的 SQL 语句会被写入到一个文件中,这个文件就是我们通常所说的“dump 文件”。使用方法使用 mysqldump 很简单,基本命令格式如下:mysqldump [选项] database_name > output_file.sql其中,database_name 是你想要备份的数据库名,而 output_file.sql 则是你希望保存 dump 结果的目标文件路径。常用选项-u username, --user=username:指定用户名。-p, --password[=password]:提示输入密码或直接提供密码。-h hostname, --host=hostname:指定主机名或 IP 地址。--all-databases:备份所有数据库。--no-data 或 -d:只导出数据库结构,不包含数据。--compact:生成更紧凑的输出,适合导入。--routines:同时导出存储过程和函数。--triggers:导出触发器。--events:导出事件调度器。--single-transaction:在开始转储前启动事务以确保一致性快照。示例假设你需要备份名为 my_database 的数据库,并且你的 MySQL 用户名为 root,那么你可以这样操作:mysqldump -u root -p my_database > my_database_backup.sql执行上述命令后,系统会要求你输入密码,之后就开始进行备份工作了。完成后,你会得到一个名为 my_database_backup.sql 的文件,里面包含了重建数据库所需的所有 SQL 语句。恢复数据库要从 dump 文件恢复数据库,只需利用 MySQL 客户端执行 SQL 文件即可:mysql -u root -p my_database < my_database_backup.sql这里同样需要输入密码来验证身份。
  • [技术干货] 华为云数据库 GaussDB:主备容灾搭建全流程
    《》在当今数字化时代,数据的安全性和可用性至关重要。华为云数据库 GaussDB 提供了强大的主备容灾解决方案,确保在面临各种故障和灾难时,数据能够得到有效保护,业务能够持续运行。本文将详细介绍华为云数据库 GaussDB 的主备容灾搭建过程。一、了解主备容灾架构华为云数据库 GaussDB 的主备容灾架构主要由主节点和备节点组成。主节点负责处理业务请求,备节点实时同步主节点的数据。当主节点发生故障时,备节点可以迅速切换为主节点,继续提供服务,从而实现高可用性。二、准备工作注册华为云账号并开通数据库 GaussDB 服务。规划主备节点的部署位置和网络配置,确保主备节点之间能够进行数据同步和通信。确定数据库的存储需求和备份策略。三、创建主备实例登录华为云控制台,进入数据库 GaussDB 管理页面。点击 “创建数据库实例”,选择 GaussDB 的版本和规格。在创建实例页面,选择 “主备实例” 类型,并设置主节点和备节点的参数,如存储容量、网络配置等。配置数据库的用户名和密码,以及其他安全设置。确认创建实例的信息无误后,点击 “立即购买” 完成主备实例的创建。四、配置主备同步等待主备实例创建完成后,进入实例详情页面。在 “备份与恢复” 板块中,找到 “主备同步” 选项,点击 “配置”。根据实际情况设置主备同步的参数,如同步模式(同步或异步)、同步频率等。确认配置信息无误后,点击 “确定” 开始主备同步。五、测试主备容灾功能在主节点上创建一些测试数据,并进行一些数据库操作,确保主节点正常工作。模拟主节点故障,例如停止主节点的数据库服务或断开主节点的网络连接。观察备节点是否能够自动切换为主节点,并验证业务是否能够继续正常运行。恢复主节点的故障,观察主备节点之间是否能够重新进行数据同步。六、定期备份和监控制定定期备份计划,确保数据的安全性。可以使用华为云提供的自动备份功能,也可以手动进行备份。监控主备节点的运行状态,包括 CPU 利用率、内存使用率、磁盘空间等指标。可以使用华为云的监控服务或第三方监控工具。定期检查主备同步的状态,确保数据的一致性。七、总结通过以上步骤,我们成功搭建了华为云数据库 GaussDB 的主备容灾架构。主备容灾功能可以有效地提高数据库的可用性和数据的安全性,为业务的稳定运行提供坚实的保障。在实际应用中,我们还可以根据业务需求和实际情况进行进一步的优化和调整,以满足不同的业务场景。同时,定期进行备份和监控,及时发现和解决问题,确保主备容灾系统始终处于良好的运行状态。
  • 华为云数据库 GaussDB:主备切换全攻略
    在数据库的运行过程中,高可用性是至关重要的需求。华为云数据库 GaussDB 以其强大的性能和可靠的架构,为用户提供了稳定的数据存储和处理服务。其中,主备切换功能是确保数据库持续可用的关键机制之一。今天,我们就来详细了解一下华为云数据库 GaussDB 的主备切换步骤。一、主备切换的前提条件在进行主备切换之前,需要确保以下条件已经满足:已经部署了华为云数据库 GaussDB 的主备实例,并且主备实例处于正常运行状态。了解主备实例的架构和配置,包括主节点和备节点的 IP 地址、端口号、用户名和密码等信息。对数据库进行了备份,以防止切换过程中出现数据丢失的情况。二、主备切换的步骤登录华为云控制台 打开浏览器,访问华为云官网,使用账号和密码登录华为云控制台。进入数据库管理页面 在控制台中,找到 “数据库” 板块,点击 “GaussDB” 进入 GaussDB 数据库管理页面。选择要切换的主备实例 在 GaussDB 数据库管理页面中,找到要进行主备切换的实例,点击实例名称进入实例详情页面。启动主备切换 在实例详情页面中,找到 “备份与恢复” 板块,点击 “主备切换” 按钮。系统会弹出一个确认窗口,提示你主备切换可能会导致短暂的业务中断,请谨慎操作。确认无误后,点击 “确定” 按钮启动主备切换。等待主备切换完成 主备切换过程可能需要几分钟时间,具体时间取决于数据库的大小和网络状况。在切换过程中,你可以在实例详情页面中查看切换进度。当切换进度显示为 “100%” 时,表示主备切换已经完成。验证主备切换结果 主备切换完成后,需要验证切换结果是否正确。可以使用数据库客户端连接到新的主节点,检查数据库中的数据是否完整,业务是否正常运行。三、主备切换的注意事项在进行主备切换之前,建议先对数据库进行备份,以防止切换过程中出现数据丢失的情况。主备切换可能会导致短暂的业务中断,请在业务低峰期进行切换,以减少对业务的影响。在主备切换完成后,需要及时更新业务系统中的数据库连接信息,以确保业务能够正常连接到新的主节点。如果主备切换失败,可以查看系统日志和错误信息,找出失败的原因,并进行相应的处理。
  • 华为云数据库 MySQL:主备切换步骤详解
    《华为云数据库 MySQL:主备切换步骤详解》在数据库管理中,主备切换是一项重要的操作,它可以确保数据库的高可用性和数据的安全性。华为云数据库 MySQL 提供了可靠的主备架构,当主节点出现故障时,可以快速切换到备节点,保证业务的连续性。下面,我们将详细介绍华为云数据库 MySQL 的主备切换步骤。一、主备切换的前提条件在进行主备切换之前,需要确保以下条件已经满足:已经开通了华为云数据库 MySQL 服务,并创建了主备实例。了解主备实例的架构和配置,包括主节点和备节点的 IP 地址、端口号、用户名和密码等信息。对数据库进行了备份,以防止切换过程中出现数据丢失的情况。二、主备切换的步骤登录华为云控制台 打开浏览器,访问华为云官网,使用账号和密码登录华为云控制台。进入数据库管理页面 在控制台中,找到 “数据库” 板块,点击 “云数据库 MySQL” 进入数据库管理页面。选择要切换的主备实例 在数据库管理页面中,找到要进行主备切换的实例,点击实例名称进入实例详情页面。启动主备切换 在实例详情页面中,找到 “备份与恢复” 板块,点击 “主备切换” 按钮。系统会弹出一个确认窗口,提示你主备切换可能会导致短暂的业务中断,请谨慎操作。确认无误后,点击 “确定” 按钮启动主备切换。等待主备切换完成 主备切换过程可能需要几分钟时间,具体时间取决于数据库的大小和网络状况。在切换过程中,你可以在实例详情页面中查看切换进度。当切换进度显示为 “100%” 时,表示主备切换已经完成。验证主备切换结果 主备切换完成后,需要验证切换结果是否正确。可以使用数据库客户端连接到新的主节点,检查数据库中的数据是否完整,业务是否正常运行。三、主备切换的注意事项在进行主备切换之前,建议先对数据库进行备份,以防止切换过程中出现数据丢失的情况。主备切换可能会导致短暂的业务中断,请在业务低峰期进行切换,以减少对业务的影响。在主备切换完成后,需要及时更新业务系统中的数据库连接信息,以确保业务能够正常连接到新的主节点。如果主备切换失败,可以查看系统日志和错误信息,找出失败的原因,并进行相应的处理。
  • [专题汇总] 9月份干货合集又来了,快看看有没有你想要的
     大家好,9月份合集又来了,本次主要带来的是python,redis,mysql,oralce等相关技术分享,希望可以帮到大家 1.Python语言中的重要函数对象用法小结【转】 https://bbs.huaweicloud.com/forum/thread-0292163074507230065-1-1.html  2.PyTorch中torch.no_grad()用法举例详解【转】 https://bbs.huaweicloud.com/forum/thread-02127163074675610068-1-1.html  3.解决遇到:PytorchStreamReader failed reading zip archive:failed finding central错误问题【转】 https://bbs.huaweicloud.com/forum/thread-0290163076531320030-1-1.html  4.解决遇到PermissionError:[Errno 13] Permission denied:XXXX错误的问题【转】 https://bbs.huaweicloud.com/forum/thread-0204163087169319057-1-1.html  5.使用python复制PDF中的页面的操作代码【转】 https://bbs.huaweicloud.com/forum/thread-0204163087217277058-1-1.html  6.Python中的Popen函数demo演示【转】 https://bbs.huaweicloud.com/forum/thread-0287163087322224052-1-1.html  7.Redis内存碎片率调优处理方式【转】 https://bbs.huaweicloud.com/forum/thread-02127163089843529071-1-1.html  8.oracle关联查询报invalid number错误的解决方法【转】 https://bbs.huaweicloud.com/forum/thread-0290163089973043031-1-1.html  9.sql中的regexp与like区别实现【转】 https://bbs.huaweicloud.com/forum/thread-02127163091329965072-1-1.html  10.SQL多表联查的几种方法示例总结【转】 https://bbs.huaweicloud.com/forum/thread-0234163091395788038-1-1.html  11.redis中如何做到内存优化【转】 https://bbs.huaweicloud.com/forum/thread-02127163091498087074-1-1.html  12.mysql数据库实现超键、候选键、主键与外键的使用【转】 https://bbs.huaweicloud.com/forum/thread-0290163091552614032-1-1.html  13.达梦数据库如何设置自增主键的方法及注意事项【转】 https://bbs.huaweicloud.com/forum/thread-0234163091642509039-1-1.html  14.解决生产环境遇到的curl和yum命令报错问题【转】 https://bbs.huaweicloud.com/forum/thread-0234163091687787040-1-1.html  15.Nginx实现404页面的配置方法的两种方法【转】 https://bbs.huaweicloud.com/forum/thread-0290163091762002033-1-1.html 
  • [技术干货] mysql数据库实现超键、候选键、主键与外键的使用【转】
    1、超键(Superkey)超键是能唯一确定表中每行数据的属性集。它可以是单个属性或多个属性的组合。示例:一个学生表(Student),包含学号(ID)、姓名(Name)、年龄(Age)和班级(Class)四个字段。其中,学号(ID)单独、姓名+班级(Name+Class)组合,以及学号+姓名+年龄+班级的全集都可以作为超键,因为它们都能唯一标识表中的一行数据。IDNameAgeClass001张三201班002李四212班003王五201班004赵六223班2、候选键(Candidate Key)候选键是最小的超键,即没有任何多余属性的超键。一个表可以有多个候选键。示例:在上表中,如果假设学号(ID)是唯一的,并且没有其他属性与学号组合后还能保持唯一性,那么学号(ID)就是一个候选键。同时,如果姓名+班级的组合在表中也是唯一的(尽管这种情况较少见),那么它也是一个候选键。3、主键(Primary Key)主键是表中的一个特殊候选键,用于唯一标识每行数据。每个表只能有一个主键,且主键的值不能为空。示例:在上表中,我们通常会选择学号(ID)作为主键,因为它能唯一标识每一个学生,并且符合主键的所有要求。4、外键(Foreign Key)外键是表中的一个字段,其值必须是另一个表的主键的值。它用于在两个表之间建立关联,确保数据的参照完整性。示例:假设我们还有一个班级表(Class),其中包含班级ID(ClassID)和班级名称(ClassName)两个字段,且班级ID是主键。在学生表中,我们可以添加一个班级ID(ClassID)字段作为外键,这个字段的值必须对应于班级表中的某个班级ID,从而在学生表和班级表之间建立关联。这样,当我们查询某个学生的信息时,可以通过学生表中的班级ID快速找到该学生所属的班级信息。班级表 (Class)ClassIDClassNameC001一年级1班C002一年级2班C003二年级1班学生表 (Student)IDNameAgeClassID001张三20C001002李四21C002003王五20C001004赵六22C003简洁来说,超键包含候选键,候选键中最常用的是主键,而外键用于表间关联。
总条数:1159 到第
上滑加载中