IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

标签:DDL

共 7 篇相关文章

IT 累计浏览 3,325

ORACLE 11g新特性-允许DDL锁等待DML锁

这篇讲的是ORACLE 11g在锁机制上的一个重要改进。作者从11g之前版本的一个常见限制切入:当表上存在未提交的DML事务锁时,对该表执行的DDL操作(如TRUNCATE)会立即失败并报ORA-00054错误,即便等待一小会儿也不行,这给运维和开发带来了不少意外的中断。 11g改变了这一行为,引入了“DDL锁等待DML锁”的特性。通过一个清晰的对比实验,作者展示了差异:在11g中,后发的DDL操作会等待DML锁释放,而不是直接报错返回。这个机制上的转变,让数据库对象的结构变更操作拥有了更好的“耐心”,能适应更复杂的并发场景。 理解这一点,对于规划数据库维护窗口、诊断锁等待问题,以及设计高并发下的DDL策略都很有帮助。它让管理员在执行维护任务时,能更从容地安排操作顺序,而不必总是担心被即时的锁冲突打断。

IT 累计浏览 2,502

MySQL数据库之集合类型SET的DDL变更测试总结

这篇讲的是MySQL中一个不算常见但容易踩坑的点:集合类型SET的DDL变更行为。作者通过一系列实际测试,观察并总结了当对SET类型列执行修改(如ALTER TABLE)时,数据库内部的具体变化和潜在影响。 文章的核心在于对比和验证。它不仅测试了直接修改SET类型列定义(增加、删除、重排序元素)的常见场景,还深入到了这类变更是否会触发表重建、对索引和性能的实际影响,以及在不同MySQL版本间的可能差异。作者通过具体的测试用例和结果,揭示了看似简单的SET类型调整背后,可能隐含着未预料的锁表或数据重写操作。 对于DBA和开发人员而言,这篇总结的价值在于提供了实操层面的参考依据。它提醒我们,在规划涉及SET类型的字段变更时,不能仅凭经验假设,而应事先在目标环境中进行针对性测试,以评估其对业务的影响,从而选择更安全的维护窗口或优化操作方式。

IT 累计浏览 2,978

MySQL数据库之数据类型集合类型和枚举类型测试环境

这篇测试文章聚焦于MySQL中两种特殊数据类型:`SET`与`ENUM`的实战对比。作者搭建了测试环境,直接通过SQL语句演示了两者的核心差异:`ENUM`字段为单选型,一个列只能预定义一个合法值;而`SET`字段为多选型,允许存储预定义值的任意组合。文章详细展示了它们在插入、查询、更新时的不同行为,并验证了`SET`类型在底层如何使用位图进行存储,这使得它在处理如“用户兴趣标签”这类多选场景时效率更高。 测试也指出了一个关键考量:虽然`ENUM`和`SET`能节省存储空间并提供数据完整性约束,但它们的值列表是固定的。当业务需求变更需要修改可选值时,操作较为繁琐。文章通过具体的测试用例,帮助开发者厘清了在哪些场景下选用`ENUM`(如性别、状态等有限的单选列)比使用`VARCHAR`更优,而在哪些场景下`SET`(如权限、标签等多选列)是更高效的选择。对于正在做数据库表结构设计的开发者而言,这些直接的测试结论很有参考价值。

IT 累计浏览 4,822

MySQL数据库之枚举数据类型ENUM的DDL变更测试

这篇讲的是MySQL中枚举类型ENUM字段在执行DDL变更时的一些重要发现。作者从日常运维中可能遇到的“给已有ENUM类型字段加新值”这类操作出发,系统测试了使用`ALTER TABLE ... MODIFY COLUMN`或`CHANGE COLUMN`对ENUM进行DDL变更(如添加、删除、重排序枚举值)时的真实行为。 文章通过具体的实验,验证了这些变更操作是否会导致锁表、对在线业务的影响程度如何,以及在不同MySQL版本和不同数据量(空表 vs 大表)下的性能表现差异。例如,对于包含大量数据的表,直接修改ENUM定义可能带来意料之外的长时间锁等待。同时,文章也探讨了官方文档描述与实操结果之间可能存在的细微差别,比如某些操作在特定版本下其实会触发全表重建。 这些基于实测的结论,为开发者和DBA在规划字段变更、进行版本升级或数据建模决策时提供了可靠的参考。它提醒我们,即便是看似简单的ENUM类型修改,也需要充分评估其潜在风险与执行成本。

IT 累计浏览 7,180

如何获取hive建表语句

这篇讲的是,当我们在用Hive做开发时,一个常见但麻烦的需求:如何拿到一张已经存在的表的建表语句(DDL)。Hive本身很贴心地提供了`SHOW CREATE TABLE`命令,但它输出的是针对Hive的语法,有时我们想要的是更通用、或者格式更干净的SQL版本。 文章针对这个痛点,提供了一个清晰可行的解决方案。作者没有停留在介绍基础命令,而是深入了一步,讲解了如何利用Hive元数据中的字段类型映射、注释等详细信息,通过一个自定义的脚本(通常是结合Hive的`DESCRIBE FORMATTED`和`DESCRIBE EXTENDED`命令)来自动化地生成更规范、可移植的`CREATE TABLE`语句。这个过程涉及到了对Hive内部表属性的解析与重组。 对于需要频繁进行表结构迁移、备份或者文档整理的开发者和数据工程师来说,这篇内容提供了一个非常实用的小技巧。它把一个原本需要手动复制粘贴、容易出错的操作,变成了一个可靠的自动化流程,能有效提升日常工作效率。

IT 累计浏览 2,341

(总结)mysql中对已存在的表做增/删/改列的相关操作

这篇讲的是在生产环境或开发中,如何通过SQL命令在线变更已存在表的结构,具体聚焦于为表增加和删除列的操作。 文章非常实用,直接给出了核心的`ALTER TABLE`语法。对于增列,它提供了`add`关键字的写法,并强调了可以指定列名、数据类型以及默认值等约束条件,还附带了一个添加整数类型列的实例。对于删列,则使用了`drop column`语法。作者没有进行复杂原理的铺陈,而是通过两个清晰简洁的例子,让读者能快速掌握用法。 这类操作是日常开发和数据库维护的必备技能,虽然语法简单,但在真实项目中执行前必须做好备份和评估。文章正好为需要快速查阅或复习这一基础操作点的开发者提供了清晰的指引。

IT 累计浏览 2,790

11G real time query,BUG不是一般的多

这篇讲的是 Oracle 11G 数据库一个相当隐蔽的坑。作者在实际运维中发现,当主库对一张表执行了 truncate 操作后,去物理备库上查询这张表,有时会令人困惑地抛出 `ORA-08103: object no longer exists` 错误。明明对象还在数据字典里,查询却报不存在,这让日常的数据核对和报表生成工作很头疼。 问题的根源被定位到 Oracle 11G 版本中,与实时查询(Active Data Guard)功能相关的一个已知 bug。在特定的操作序列下,备库未能正确同步主库的元数据变更,导致查询时内部检查失败。 解决这个问题主要有两条路:要么为数据库打上官方提供的补丁,要么退而求其次,暂时将 standby 数据库激活为独立库再进行查询。文章点明了这个 bug 的具体表现和应对之策,对于还在维护 11G 系统、并使用 Data Guard 架构的 DBA 来说,是一个需要提前规避的雷区。