MySQL中dd::columns表结构转table过程以及应用

Oracle 表分区详解(partition table) 文章目录1 概述1.1 思维导图2 分类2.1 传统表分区2.1.1 范围分区 range2.1.2 列表分区 list2.1.3 哈希分区 hash2.1.4 复合分区 range + list or hash2.2 11g 新特性分区2.1.1 引用分区 reference2.1.2 间隔分区 interval2.1.3 虚拟列分区 virtual2.1.4 系统分区 system3 管理3.1 表分区3.2 表空间 1 概述 1. 目的:提高大表的查询效率 2. 概念:将一个表划分为多个分区表,"分 阅读详情
  • GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源。
  • GreatSQL是MySQL的国产分支版本,使用上与MySQL一致。

一、MySQL的dd表介绍

二、代码跟踪

三、知识应用

四、总结


一、MySQL的dd表介绍

MySQL的dd表是用来存放表结构和各种建表信息的,客户端建的表都存在mysql.table和mysql.columns表里,还有一个表mysql.column_type_elements比较特殊,用来存放SET和ENUM类型的字段集合值信息。看一下下面这张表的mysql.columns表和mysql.column_type_elements信息。为了缩短显示长度,这里只展示几个重要的值。

#建表:
CREATE TABLE t1(id int  not null auto_increment primary key,col1 number,col2 VARCHAR(100),col3 pls_integer,
col4 enum('x','y') default 'x',col5 set('x1','y1'))  partition by hash(id) partitions 3;
SET SESSION debug='+d,skip_dd_table_access_check';
mysql> select name,ordinal_position,type,default_value_utf8,options,column_type_utf8 from mysql.columns where table_id=383;
+-------------+------------------+-----------------------+--------------------+-------------------+------------------+
| name        | ordinal_position | type                  | default_value_utf8 | options           | column_type_utf8 |
+-------------+------------------+-----------------------+--------------------+-------------------+------------------+
| col1        |                2 | MYSQL_TYPE_NEWDECIMAL | NULL               | interval_count=0; | decimal(65,0)    |
| col2        |                3 | MYSQL_TYPE_VARCHAR    | NULL               | interval_count=0; | varchar(100)     |
| col3        |                4 | MYSQL_TYPE_LONG       | NULL               | interval_count=0; | int              |
| col4        |                5 | MYSQL_TYPE_ENUM       | x                  | interval_count=2; | enum('x','y')    |
| col5        |                6 | MYSQL_TYPE_SET        | NULL               | interval_count=2; | set('x1','y1')   |
| DB_ROLL_PTR |                8 | MYSQL_TYPE_LONGLONG   | NULL               | NULL              |                  |
| DB_TRX_ID   |                7 | MYSQL_TYPE_INT24      | NULL               | NULL              |                  |
| id          |                1 | MYSQL_TYPE_LONG       | NULL               | interval_count=0; | int              |
+-------------+------------------+-----------------------+--------------------+-------------------+------------------+
8 rows in set (0.00 sec)

mysql.columns表说明如下:

  1. ordinal_position是该字段在表里的偏移量,这里多了3个字段,DB_ROLL_PTR、DB_TRX_ID、id是用来执行undo的,记录了字段的版本信息。

  2. default_value_utf8是用来保存默认值的。options里面有interval_count用来保存集合类型的数值数的。columns表的options的key一共有如下几种:

    static const std::set<String_type> default_valid_option_keys = {
        "column_format", "geom_type",         "interval_count", "not_secondary",
        "storage",       "treat_bit_as_char", "zip_dict_id",    "is_array"};
mysql>  select * from mysql.column_type_elements where column_id=4286;
+-----------+---------------+------+
| column_id | element_index | name |
+-----------+---------------+------+
|      4286 |             1 | x    |
|      4286 |             2 | y    |
+-----------+---------------+------+
2 rows in set (0.01 sec)
#这里的column_id=4286是col4的id值,x和y分别对应了set定义时候的2个集合值。

二、代码跟踪

现在重新启动数据库,跟踪一下这个columns表怎么转为代码里面的TABLE的field对象。首先找到表的dd信息然后打开表获取field信息。

mysql> select * from t1;

输入该命令后找到columns表转为field的代码:

#0  fill_column_from_dd (
    thd=0x555558b35a06 <std::char_traits<char>::compare(char const*, char const*, unsigned long)+61>, 
    share=0x7fffe83f1b60, 
    col_obj=0x555558bb0a5e <std::__cxx11::basic_string<char, std::char_traits<char>, Stateless_allocator<char, dd::String_type_alloc, My_free_functor> >::compare(std::__cxx11::basic_string<char, std::char_traits<char>, Stateless_allocator<char, dd::String_type_alloc, My_free_functor> > const&) const+142>, 
    null_pos=0x7fffe83f1880 "\005", null_bit_pos=32767, rec_pos=0x7fff2c05ac10 "explicit_encryption", 
    field_nr=0) at /mysql/sql/dd_table_share.cc:955
#1  0x00005555593c4c17 in fill_columns_from_dd (thd=0x7fff2c006890, share=0x7fff2cbf19e8, 
    tab_obj=0x7fff2cbb9b38) at /mysql/sql/dd_table_share.cc:1235
#2  0x00005555593c9e54 in open_table_def (thd=0x7fff2c006890, share=0x7fff2cbf19e8, table_def=...)
    at /mysql/sql/dd_table_share.cc:2408
#3  0x0000555558e76a13 in get_table_share (thd=0x7fff2c006890, db=0x7fff2cbeeff0 "db1", 
    table_name=0x7fff2cc03210 "t1", key=0x7fff2cbeed87 "db1", key_length=7, open_view=true, 
    open_secondary=false) at /mysql/sql/sql_base.cc:801
#4  0x0000555558e76f08 in get_table_share_with_discover (thd=0x7fff2c006890, table_list=0x7fff2cbee9b8, 
    key=0x7fff2cbeed87 "db1", key_length=7, open_secondary=false, error=0x7fffe83f1ea4)
    at /mysql/sql/sql_base.cc:889
#5  0x0000555558e7cd34 in open_table (thd=0x7fff2c006890, table_list=0x7fff2cbee9b8, 
    ot_ctx=0x7fffe83f2380) at /mysql/sql/sql_base.cc:3230
#6  0x0000555558e81769 in open_and_process_table (thd=0x7fff2c006890, lex=0x7fff2c01bdf0, 
    tables=0x7fff2cbee9b8, counter=0x7fff2c01be48, prelocking_strategy=0x7fffe83f2408, 
    has_prelocking_list=false, ot_ctx=0x7fffe83f2380)
    at /mysql/sql/sql_base.cc:5118
#7  0x0000555558e833bd in open_tables (thd=0x7fff2c006890, start=0x7fffe83f23f0, counter=0x7fff2c01be48, 
    flags=0, prelocking_strategy=0x7fffe83f2408)
    at /mysql/sql/sql_base.cc:5928
#8  0x0000555558e85626 in open_tables_for_query (thd=0x7fff2c006890, tables=0x7fff2cbee9b8, flags=0)
    at /mysql/sql/sql_base.cc:6904
#9  0x0000555559075720 in Sql_cmd_dml::prepare (this=0x7fff2cbef400, thd=0x7fff2c006890)
    at /mysql/sql/sql_select.cc:372
#10 0x00005555590760bf in Sql_cmd_dml::execute (this=0x7fff2cbef400, thd=0x7fff2c006890)
    at /mysql/sql/sql_select.cc:527
#11 0x0000555558fedc8e in mysql_execute_command (thd=0x7fff2c006890, first_level=true)
    at /mysql/sql/sql_parse.cc:4794
#12 0x0000555558fefe25 in dispatch_sql_command (thd=0x7fff2c006890, parser_state=0x7fffe83f3990, 
    update_userstat=false) at /mysql/sql/sql_parse.cc:5399
#13 0x0000555558fe52d3 in dispatch_command (thd=0x7fff2c006890, com_data=0x7fffe83f4b70, 
    command=COM_QUERY) at /mysql/sql/sql_parse.cc:2000
#14 0x0000555558fe3643 in do_command (thd=0x7fff2c006890)
    at /mysql/sql/sql_parse.cc:1448
#15 0x000055555920e200 in handle_connection (arg=0x555560a65790)
    at /mysql/sql/conn_handler/connection_handler_per_thread.cc:307
#16 0x000055555ae36375 in pfs_spawn_thread (arg=0x5555608a2e20)
    at /mysql/storage/perfschema/pfs.cc:2899
#17 0x00007ffff77a6609 in start_thread (arg=<optimized out>) at pthread_create.c:477
#18 0x00007ffff76cb163 in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95
#fill_column_from_dd函数里面最重要的是make_field函数,把字段从dd::Column转为table的field然后赋值给TABLE_SHARE。
  reg_field = make_field(*col_obj, charset, share, rec_pos, null_pos, null_bit_pos);

三、知识应用

session每次获取表的信息都是在第一次打开表的时候就做好了,下次如果表没有变化就从Table_cache直接获取表信息。现在假设我们要改col4字段的集合值又不想通过alter语句来执行,那就可以直接对dd表进行操作。注意,该操作对生产环境有很大风险,这里只用来进行知识实践,不能用来在生产环境实际操作。

把col4的x,y值改为a,b: 首先试着插入col4=x的记录,现在还没改dd表插入成功。

mysql> insert into t1 values(1,1,'aa',1,'x','x1');
Query OK, 1 row affected (0.03 sec)

接着开始改col4的集合值:

mysql> SET SESSION debug='+d,skip_dd_table_access_check';
Query OK, 0 rows affected (0.02 sec)
mysql> update mysql.columns set default_value_utf8='a' ,column_type_utf8='enum(\'a\',\'b\'))' where table_id=383 and name='col4';
Query OK, 1 row affected (0.03 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> select name,ordinal_position,type,default_value_utf8,options,column_type_utf8 from mysql.columns where table_id=383;
+-------------+------------------+-----------------------+--------------------+-------------------+------------------+
| name        | ordinal_position | type                  | default_value_utf8 | options           | column_type_utf8 |
+-------------+------------------+-----------------------+--------------------+-------------------+------------------+
| col1        |                2 | MYSQL_TYPE_NEWDECIMAL | NULL               | interval_count=0; | decimal(65,0)    |
| col2        |                3 | MYSQL_TYPE_VARCHAR    | NULL               | interval_count=0; | varchar(100)     |
| col3        |                4 | MYSQL_TYPE_LONG       | NULL               | interval_count=0; | int              |
| col4        |                5 | MYSQL_TYPE_ENUM       | a                  | interval_count=2; | enum('a','b'))   |集合值已改
| col5        |                6 | MYSQL_TYPE_SET        | NULL               | interval_count=2; | set('x1','y1')   |
| DB_ROLL_PTR |                8 | MYSQL_TYPE_LONGLONG   | NULL               | NULL              |                  |
| DB_TRX_ID   |                7 | MYSQL_TYPE_INT24      | NULL               | NULL              |                  |
| id          |                1 | MYSQL_TYPE_LONG       | NULL               | interval_count=0; | int              |
+-------------+------------------+-----------------------+--------------------+-------------------+------------------+
8 rows in set (0.00 sec)

mysql> update mysql.column_type_elements set name='a' where column_id=4286 and element_index=1;
Query OK, 1 row affected (0.03 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> update mysql.column_type_elements set name='b' where column_id=4286 and element_index=2;
Query OK, 1 row affected (0.03 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql>  select * from mysql.column_type_elements where column_id=4286;
+-----------+---------------+------+
| column_id | element_index | name |
+-----------+---------------+------+
|      4286 |             1 | a    |集合值已改
|      4286 |             2 | b    |集合值已改
+-----------+---------------+------+
2 rows in set (0.00 sec)

现在再插入一条col4=x的记录发现还是成功的,这是因为t1没有重新从dd表转为TABLE信息,需要重启后再试。

mysql> insert into t1 values(2,1,'aa',1,'x','x1');
Query OK, 1 row affected (0.02 sec)

重启数据库,然后登录。再次插入col4=x发现报错了,因为这时候的TABLE信息是重新从dd表转化的。

mysql> insert into t1 values(2,1,'aa',1,'x','x1');
ERROR 1265 (01000): Data truncated for column 'col4' at row 1

插入col4=a的记录成功,说明更改成功。

mysql> insert into t1 values(3,1,'aa',1,'a','x1');
Query OK, 1 row affected (0.02 sec)

查看建表信息,发现已经成功更改。

mysql> show create table t1;
+-------+-------------------------+
| Table | Create Table     |
+-------+-------------------------+
| t1    | CREATE TABLE `t1` (
  `id` int NOT NULL AUTO_INCREMENT,
  `col1` decimal(65,0) DEFAULT NULL,
  `col2` varchar(100) DEFAULT NULL,
  `col3` int DEFAULT NULL,
  `col4` enum('a','b') DEFAULT 'a',更改成功
  `col5` set('x1','y1') DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
/*!50100 PARTITION BY HASH (`id`)
PARTITIONS 3 */ 
+-------+-------------------------+

四、总结

实际上更改表结构如果通过alter命令来改流程跟上面也是一样的,也是通过更新dd表来实现表结构的变更,这里只是从更底层来介绍。以上的操作在实际生产中不能直接操作,风险很大,会影响现有的记录和相关的功能。这里只是作为一个案例来更好的说明dd的工作流程,帮助大家遇到问题知道怎么从底层排查。

Enjoy GreatSQL :)

关于 GreatSQL

GreatSQL是由万里数据库维护的MySQL分支,专注于提升MGR可靠性及性能,支持InnoDB并行查询特性,是适用于金融级应用的MySQL分支版本。

相关链接: GreatSQL社区 Gitee GitHub Bilibili

GreatSQL社区:

欢迎来GreatSQL社区发帖提问 https://greatsql.cn/

GreatSQL社区

技术交流群:

微信:扫码添加GreatSQL社区助手微信好友,发送验证信息加群。

图片

Spark on Hive表结构变更 在Spark on Hive架构中,表结构(Schema)变更是一个常见且重要的操作。理解其背景、使用场景以及具体方式对于大数据平台管理至关重要1.1、Spark on Hive元数据管理核心组件。它是一个独立的关系型数据库(如MySQL、PostgreSQL),存储了Hive表、分区、列、数据类型、存储位置等元数据信息Spark本身不存储元数据。当Spark需要处理Hive表时,它通过HMS连接到Hive Metastore数据库,获取表的元数据(Schema、分区、文件位置等) 阅读详情

相关推荐

MySQL中的COLUMN命令详解

通过使用COLUMN命令,我们可以方便地获取表的列信息。无论是查询特定表的列信息还是查询当前数据库中所有表的列信息,COLUMN命令都可以帮助我们轻松地完成这些任务。如果我们不指定表名,而只指定列名,COLUMN命令将返回当前数据库中所有表的指定列的详细信息。这将返回"employees"表中"first_name"列的详细信息,包括列名、数据类型、约束等。这将返回"employees"表的所有列的详细信息,包括列名、数据类型、约束等。这将返回当前数据库中所有表的"employee_id"列的详细信息。

BjmmVue的博客 2191

mysql中information_schema相关表介绍、COLUMNS表说明

在MySQL中,information_schema 可以理解为信息数据库;在INFORMATION_SCHEMA中,有数个只读表。它们实际上是视图,而不是基本表,因此,你将无法看到与之相关的任何文件。如数据库名,数据库的表,表栏的数据类型与访问权限等等。

qq_37432174的博客 2633

不止于算力:深入鲲鹏920的片上网络(NoC)与一致性协议HCCS,看华为如何优化数据流转

本文深入解析了鲲鹏920处理器的片上网络(NoC)架构和一致性协议HCCS,揭示了华为如何通过创新的环总线设计和私有协议优化数据流转效率。文章详细介绍了鲲鹏920在多die、多芯片环境下的高效协同机制,包括环总线架构、HCCS协议精妙设计及物理实现创新,为云服务场景提供了高性能解决方案。

weixin_30681121的博客 252

MYSQL -- 查表字段描述SQL

查询表字段描述SQL: SELECT COLUMN_NAME,column_comment FROM INFORMATION_SCHEMA.Columns WHERE table_name='t_user'

GP的空间 3016

Tessent IJTAG ICL:从规范到实践的硬件描述语言指南

本文深入解析Tessent IJTAG ICL语言在硬件测试中的应用,从规范到实践提供全面指南。通过模块化设计、网络提取与编辑等实战技巧,帮助工程师高效构建标准化测试网络,显著提升芯片测试效率与覆盖率。特别分享TDR/SIB/TAP的ICL实现方法及调试策略,适用于SoC、车载芯片等复杂场景。

weixin_33606346的博客 300

TOD和PPS精确时间同步技术

授时

u010783226的专栏 1万+

MySQL / Oracle 导出当前用户的表结构

Oracle 导出当前用户的表结构 通过查询当前用户的 user_tab_columns,user_col_comments, user_tab_comments 来获取表结构。 select A.TABLE_NAME as "表名", C.COMMENTS AS "表说明", A.COLUMN_ID AS "字段序号", A...

程序员的冷浪漫 5618

深度学习之基于Pytorch手指静脉识别系统(

一、项目背景与目标手指静脉识别技术是一种新兴的生物特征识别技术,它依据人类手指中流动的血液可吸收特定波长的光线这一科学原理,利用手指内的静脉分布图像来进行身份识别。与传统的生物识别技术(如指纹识别)相比,手指静脉识别技术具有不易伪造、识别精度高、非接触性等特点,因此在安全性要求较高的场景(如金融、医疗、公安等)具有广阔的应用前景。本项目旨在利用PyTorch深度学习框架,构建一套高效、准确的手指静脉识别系统。

Q1744828575的博客 832

mysql查看表结构记录

简单查看表结构 DESC 表名; 查看创建表的SQL ddl语句 show create table 表名; 通过查询db表查询语句获取 select column_name, column_comment from information_schema.columns where table_schema =‘数据DB’ and table_name = ‘表名’ ; ...

修复bug生成bug 1250

介绍七种常见还危险的病毒(带样本)

简介:能够感染用户计算机bai系统中的.exe、.dll和.html文件,将自身加密以后缀加到目标文件中。样本(源文件):https://wwx.lanzoux.com/iJx4njrpz1c / https://wwx.lanzoui.com/iYRNLwd8ldc。英文名称:Virus.Win32.Viking.A(标准) / Worm.Win32.Fujack.A(标准)英文名称:Net-Worm.Win32.Blaster.A(标准)/ Lovesan.A/ Msblast.A。

2301_78858007的博客 8415

SAP 联产品测试

最近领导一直要求研究一下SAP联产品的使用场景,之前只是自己摸索过一次,这个重新对联产品进行一个测试。 1、首先准备好物料主数据 注意主数据中需要勾选联产品标识。 设置好物料的分摊的百分比。 2、检查BOM 在BOM中也需要维护联产品的标识 只有当组件数量未负数时,才能勾选联产品的标识。如果组件数量正值,勾选联产品的标识时会报错。 3、我们创建生产订单 可以看到按正常的生产订单下达时,系统就报错了,问题点在于离散制造的生产订单基本是结算到物料的。但是联产品是按订单结算的, 所以需要对订单类型中的结算参

我小时候很黑的博客 2110

MYSQL和Oracle和SQLServer的查看表结构和创表语句

MYSQL和Oracle和SQLServer的查看表结构和创表语句: MYSQL: -- 查看表结构 desc t_login1; -- 查看创表语句 show create table t_login1; -- 查看索引结构 show index from t_login1; Oracle: -- 查看创表语句 select dbms_metadata.get_...

h_j_c_123的博客 918

基于STM32L4XX、HAL库的DP83822 以太网收发器(PHY)驱动程序设计

一、简介:DP83822是德州仪器(TI)推出的一款低功耗、高性能10/100Mbps以太网物理层收发器(PHY)。它具有以下主要特性:支持10BASE-T和100BASE-TX以太网标准低功耗设计,适合嵌入式应用MII/RMII接口,方便与微控制器连接内置自检和诊断功能支持自动协商和手动配置工业级温度范围(-40°C至+85°C)

zhusl6688的博客 526

MySQL 8.0 ibd2sdi工具实战:从损坏的ibd文件恢复表结构

在数据库管理与数据恢复领域,表空间文件(如InnoDB的.ibd文件)承载着核心数据,其结构解析是故障排查与恢复的基础。MySQL 8.0引入的SDI(Serialized Dictionary Information,序列化字典信息)机制,将表的元数据以JSON格式内嵌于.ibd文件中,实现了表结构的自描述。基于此,官方工具ibd2sdi应运而生,它能够离线解析.ibd文件,提取出完整的表定义信息(包括列、索引、字符集等),并以JSON或易读格式输出。这项技术的核心价值在于,当数据字典损坏或仅有物理文件时

weixin_30247307的博客 1088

锂电池寿命预测 | Pytorch实现基于Transformer 的锂电池寿命预测(NASA数据集)

锂电池寿命预测 | Pytorch实现基于Transformer 的锂电池寿命预测(NASA数据集)

算法如诗的博客 5588

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

MySQL 8.0 ibd2sdi工具详解:从.ibd文件提取表结构实现数据恢复

在数据库管理与运维中,数据恢复是保障业务连续性的关键技术。其核心原理在于解析数据库文件的元数据信息,从而重建数据结构。MySQL 8.0引入的InnoDB事务性数据字典,将表结构等元数据以序列化字典信息(SDI)的JSON格式直接嵌入表空间文件,这为数据恢复提供了新的技术路径。其技术价值在于,即使脱离数据库服务与.frm文件,也能从.ibd文件中直接提取完整的表定义,极大提升了灾难恢复的成功率与效率。这一特性在误删表、备份文件不完整或磁盘损坏等常见应用场景中尤为重要。本文聚焦的ibd2sdi工具,正是基于此

weixin_30521161的博客 391

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

oracle 与desc相似的,Oracle中和MYSQL show create table tablename,desc tablename,show tables, show databases...

oracle命令执行之前需要设置下输出格式,不然结果会显示不全SET LONG 1000;SET PAGESIZE 0;在对MYSQL移植到Oracle时 数据库一些专有写法的差异进行备注。1. show create table tablename;Oracle:select table_name,dbms_metadata.get_ddl('TABLE','TABLE_NAME')from d...

weixin_42200829的博客 2073

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

debezium对表结构变更Schema evolution支持

debezium对表结构变更的支持debezium版本1.9(flinkcdc2.4.1使用此版本)

lisacumt的专栏 875

oracle 查看创表结构,MYSQL和Oracle和SQLServer的查看表结构和创表语句

MYSQL和Oracle和SQLServer的查看表结构和创表语句:MYSQL:-- 查看表结构desc t_login1;-- 查看创表语句show create table t_login1;-- 查看索引结构show index from t_login1;Oracle:-- 查看创表语句select dbms_metadata.get_ddl('TABLE','T_LOGIN1') fr...

weixin_42304618的博客 610

转发:mysql2hive 表结构转换工具

mysql2hive 表结构转换sql

yinian6818的博客 250

Mysql数据库命令整理及使用案例

@[TOC](Mysql数据库命令整理及使用案例) **注:`mysql版本较低时有些函数会不支持`** ## 显示数据库中运行的进程 ```sql show processlist; ``` ## DDl ### *创建/删除·数据库 ```sql create datebase database_name; drop datebase database_name; **查看数据库** USE mysql --进入指定数据库 show databases; select database();

qq_43308318的博客 543

MySQL 8.0 新特性:从数据字典重构到窗口函数,存储引擎层的深层变革

MySQL 8.0 的核心变革集中在三个层面:事务性数据字典消除了元数据不一致的运维痛点,即时 DDL 将部分 DDL 操作的耗时从小时级降至毫秒级,窗口函数与 CTE 显著提升了复杂分析查询的表达能力。但升级过程中必须正视字符集默认值变更、GROUP BY 语义收紧、认证插件不兼容、即时 DDL 元数据膨胀等隐性代价。务实的升级路线是:先在从库上验证兼容性,使用扫描不兼容语句,逐步修复后再切换主库。

guoyizhongxing的博客 5635

生成数据字典,一个存储过程搞定

1、创建存储过程,下面的存储过程是以mysql数据库的语法写的,其中只查询出了tb_用户管理开头的表,可以根据自己的需求适当的修改: DELIMITER $$ USE `dbname`$$ DROP PROCEDURE IF EXISTS `proc_getdatadicdemo`$$ CREATE DEFINER=`root`@`%` PROCEDURE `proc_getdatadicd...

泉的博客 475
上一篇: GreatSQL项目捉虫活动(第一期)重磅来袭!
下一篇: 图文结合带你搞定MySQL日志之Undo log(回滚日志)
GreatSQL社区
博客等级 码龄5年 1210粉丝 390原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值