首页 > 其他分享 >规范化命名外键注释

规范化命名外键注释

时间:2024-01-29 16:35:24浏览次数:17  
标签:name -- 外键 注释 COLUMN tbl 规范化 DECLARE NAME

 

 

DROP PROCEDURE if EXISTS rename_fk_col_comment;
DELIMITER //
CREATE PROCEDURE `rename_fk_col_comment`(
    IN `prefix_tbl_name` VARCHAR(255)
)
BEGIN
 DECLARE tb_name VARCHAR (200) ;
 DECLARE cons_name VARCHAR (200) ;
 DECLARE col_name VARCHAR (200) ;
 DECLARE ref_tbl_name VARCHAR (200) ;
 DECLARE ref_col VARCHAR (200) ;
 DECLARE rf_table_comment VARCHAR(1024);
 
 -- 表名后缀,去除tbl_bat_之后的内容
 DECLARE suffix_tbl_name VARCHAR(200);


  
 
DECLARE no_more_record INT DEFAULT 0 ;
 -- 查询每个表下的约束。(外键和唯一键)
 DECLARE cons CURSOR FOR 
 SELECT 
     t.TABLE_NAME,
     t.CONSTRAINT_NAME,
     k.COLUMN_NAME,
     k.REFERENCED_TABLE_NAME,
     k.REFERENCED_COLUMN_NAME,
     (SELECT tt.table_comment FROM INFORMATION_SCHEMA.tables tt WHERE tt.TABLE_NAME=k.REFERENCED_TABLE_NAME and tt.TABLE_SCHEMA=DATABASE()) AS rf_table_comment
 FROM
 information_schema.TABLE_CONSTRAINTS t 
 JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE k 
 ON t.CONSTRAINT_NAME = k.CONSTRAINT_NAME 
 AND t.TABLE_NAME = k.TABLE_NAME 
 AND t.CONSTRAINT_SCHEMA=k.CONSTRAINT_SCHEMA
 WHERE  t.CONSTRAINT_TYPE='FOREIGN KEY' AND t.table_schema = DATABASE() ;
 
 -- 游标游到底,找不到的时候标志位。注:如果select into var时候,如果找不到,游标的while循环也结束了,no_more_record =1
 DECLARE CONTINUE HANDLER FOR NOT FOUND SET no_more_record = 1 ;
 
 -- 如果前缀为空,默认使用tbl_作为前缀。
if(prefix_tbl_name IS NULL OR prefix_tbl_name='' OR prefix_tbl_name=' ') then
    SET @prefix_tbl_name='tbl_';
ELSE
    SET @prefix_tbl_name=prefix_tbl_name;
END if;

 -- 禁用外键
 SET FOREIGN_KEY_CHECKS=0;
 -- 开游标
 OPEN cons;
 -- 第一个要预先取得,之后在循环里面取
 FETCH cons INTO tb_name,cons_name,col_name,ref_tbl_name,ref_col,rf_table_comment;
 WHILE no_more_record !=1 DO

 -- 截取表名后半部分。去除tbl_bat_字样
SET suffix_tbl_name =REPLACE(tb_name,@prefix_tbl_name,'');


-- 拼接alter 语句
-- alter table `tbl_order_work` change `id` `id` bigint(20) unsigned NOT NULL auto_increment  comment '标识,物理主键' ;
SELECT 
      CONCAT_WS(
        '',
        'alter table `',
        t1.TABLE_NAME,'` change ',
        '`', COLUMN_NAME,'` ', 
        '`', COLUMN_NAME,'` ', -- 新字段名
        COLUMN_TYPE,
        ' ',
        IF(
          IS_NULLABLE = 'NO',
          'NOT NULL',
          'NULL'
        ),
        ' ',
        extra,
        ' ',
        IF(
          COLUMN_DEFAULT = NULL,
          '',
          CONCAT('default ', COLUMN_DEFAULT)
        ),
        " comment '",
        -- 可以重复执行,保留原有注释内容
        CONCAT_WS('',SUBSTRING_INDEX(COLUMN_COMMENT, ' [外键]', 1), CONCAT_WS('',' [外键]',': 来自 ',ref_tbl_name,'(',rf_table_comment,')','表(',ref_col,')字段')), -- 新注释COLUMN_COMMENT
        "' ;"
      ) INTO @alter_sql
    FROM
      information_schema.COLUMNS t1 
    WHERE t1.table_schema = DATABASE()
      AND t1.TABLE_NAME = tb_name AND t1.COLUMN_NAME=col_name;

-- 替换某个字符串之后所有内容
-- SELECT CONCAT(SUBSTRING_INDEX('Hello World', ' ', 1), ' Universe') ==> Hello Universe
 
 -- 动态执行拼接出来的sql
 PREPARE stmt FROM @alter_sql;
 EXECUTE stmt;
 DEALLOCATE PREPARE stmt;
 
 -- 游标继续向下走,类似于i=i+1
 FETCH cons INTO tb_name,cons_name,col_name,ref_tbl_name,ref_col,rf_table_comment;
 END WHILE;
 
 -- 开启外键
 SET FOREIGN_KEY_CHECKS=1;

 
 END//
DELIMITER ;
View Code

 

标签:name,--,外键,注释,COLUMN,tbl,规范化,DECLARE,NAME
From: https://www.cnblogs.com/wanglifeng717/p/17994804

相关文章

  • python-01注释
    一.注释的作用没有注释的代码添加注释的代码通过用自己熟悉的语言,在程序中对某些代码进行标注说明,这就是注释的作用,能够大大增强程序的可读性。二.注释的分类及语法注释分为两类:单行注释和多行注释。单行注释只能注释一行内容,语法如下:#注释内容多行......
  • 使用 JavaScript 宏删除文档中的特定注释
    有时只需要删除文档中的注释,要怎么快速做到呢?在这篇文章中,我们将会展示如何为ONLYOFFICE创建一个简单的宏,来删除某些特定的或所有评论,从而保持协作的重点和整洁。什么是ONLYOFFICE 宏如果您是一名资深MicrosoftExcel用户,那么相信您已对于VBA宏非常熟悉了。这些宏是帮助您自......
  • Git提交代码注释规范
    feat(新功能):新增代码文件:新功能相关的代码文件、模块等。更新测试文件:添加新功能的测试用例。fix(修复):修改代码文件:包含有问题代码的文件。更新测试文件:修复问题的测试用例。docs(文档):Markdown文件:更新项目文档、README、帮助文件等。注释:更新代码中的注释,提供更详......
  • 22-有参转录组实战8-基因功能注释_GO_KEGG_swissprot_pfam_TFDB_iTAK
    #进行功能注释时,我们只用到蛋白文件,就是上一期提取序列的文件“Ptri.protein.fa”。#使用命令“grep-c">"Ptri.protein.fa”统计下“>”的个数,发现有52400个。#新建文件夹“swissprot”wgethttps://ftp.uniprot.org/pub/databases/uniprot/current_release/knowledgebase......
  • js 规范化文本节点
    在将一个文本节点作为另一个文本节点的同胞插入后,两个文本节点的文本之间不会包含空格。2.规范化文本节点DOM文档中的同胞文本节点可能导致困惑,因为一个文本节点足以表示一个文本字符串。同样,DOM文档中也经常会出现两个相邻文本节点。为此,有一个方法可以合并相邻的文本节点。这......
  • pycharm注释
    文件注释菜单->Settings->Editor->FileandCodeTempaltes->PythonScript->填写注释内容#!/usr/bin/envpython#-*-coding:utf-8-*-#@File:${NAME}.py#@Time:${DATE}${TIME}#@Author:作者名字#@Description:作者自己写函数注释菜......
  • Visual Studio Code 解决JSON中不允许注释?
    1.使用vscode打开json文件后,一些注释显示如图所示,有红色波浪线,影响阅读 2.悬浮在波浪线报错信息,会弹出提示ViewProblem,提示问题是:json文件中不允许注释 3.下面图片表示json文件中不允许注释 4.点击底部工具栏的JSON 5.弹出的窗口中输入jsonwithComments,找......
  • 把Mybatis Generator生成的代码加上想要的注释
    1前言在日常开发工作中,我们经常用MybatisGenerator根据表结构生成对应的实体类和Mapper文件。但是MybatisGenerator默认生成的代码中,注释并不是我们想要的,所以一般在Generator配置文件中,会设置不自动生成注释。带来的问题就是自动生成代码之后,我们还要自己去类文件中把注释加......
  • day03 转义字符和注释
    转义字符注意:韩顺平教育/r北京输出结果:北京平教育。意思是回车回到当前行韩顺平教育/r/n北京输出结果:韩顺平教育换行后北京注释单行注释//xxx多行注释/*xxx*/文档注释,对类进行注释,用javadoc可以生成HTML文件/***xxx*/java代码规范......
  • 17_Java基础-文档注释+javadoc
    JavaDocjavados命令是用来生成自己API文档的参数信息:@author作者名@version版本号@since指明需要最早使用的jdk版本(开发这个程序所用的版本)@param参数名@return返回值情况@throws异常抛出情况Javadoc【java文件】通过命令行javadoc+参数生成java文件......