liquibase判断mysql表字段是否存在

背景:今天在部署sql代码的时候,发现以前一直使用的判断字段存在的方式不起作用了,如下:

<preConditions onFail="MARK_RAN" >
        <not>
            <columnExists schemaName="${schema.name}" tableName="prize" columnName="reward_service_category" />
        </not>
    </preConditions>

在网上找了好久方法,liquibase的资料太少,最后决定使用存储过程去判断,这种方法确实好用。

delimiter //
create procedure add_more_to_logins() begin    
    if not exists(select * from information_schema.COLUMNS
              where table_name = ‘a‘ AND column_name = ‘b‘ and table_schema = database()) THEN        
        alter table a add `is_mobile` tinyint(1) null after reason;
    end if;
    
END;
//
delimiter ;

时间: 2024-11-03 01:33:43

liquibase判断mysql表字段是否存在的相关文章

判断数据库表字段是否为null值,采用is null

use UserCentergo select * from AccountDetails1.判断一个字段是否为null值,进行查询:update AccountDetails set ProjectCode ='w88' where ProjectCode is null 2.这一种写法是错误的 update AccountDetails set ProjectCode ='w88' where ProjectCode = null 判断数据库表字段是否为null值,采用is null

MySQL表字段字符集不同导致的索引失效问题

1. 概述 昨天在一位同学的MySQL机器上面发现了这样一个问题,MySQL两张表做left join时,执行计划里面显示有一张表使用了全表扫描,扫描全表近100万行记录,大并发的这样的SQL过来数据库变得几乎不可用了,今天和大家一起分享下这个问题的原因及解决办法,希望可以帮助大家更好的学习MySQL数据库,一起来看看吧.MySQL版本为官方5.7.12. 2. 问题重现 首先,表结构和表记录如下: mysql> show create table t1\G ******************

C#读取MySql表字段出现System.Byte[]问题

记录下,用了多字段拼接后在程序中查询出的结果为System.Byte[],而在数据库中查正常 解决办法为:加Convert转换编码 select CONVERT((CASE background WHEN N'' THEN number ELSE CONCAT_WS('-', number, subset) END ) using utf8) AS numText form tb

MySQL表字段的数据迁移

update ecm_order_goods, ecm_goods, ecm_orderset ecm_order_goods.eu_point=ecm_goods.eu_point, ecm_order_goods.au_point=ecm_goods.au_point where ecm_order_goods.goods_id=ecm_goods.goods_id and ecm_order.order_id = ecm_order_goods.order_id and ecm_order

MySQL生产库中添加修改表字段引起主从崩溃的问题总结

上周末和开发人员对线上库中的部分表的在线DDL和update,这过程中出现了一些意料之外的问题,现将过程.分析和解决方案在这里总结一下 一. 需求背景: 要在如下表中添加字段(modified_at)并且更改默认值 table_name { baby_compbaby_comp_statusbaby_usrbaby_ad_userbaby_campbaby_ordbaby_acc_eva } 每张表执行如下操作ALTER TABLE `$table_name` ADD COLUMN `modif

MySQL建表字段类型

1.数据库:在MySQL中,要存储数据,必须从数据库开始,因此首先要创建数据库,但由于学校的MySQL服务器对学生数据帐号有限止,学生不得创建数据库,故每个学生的帐号中已事先由信息中心为大家建立了一个名为帐号名的数据库.但我们必须了解创建数据库的语句为CREATE DATABASE <数据库名>2.数据表:是构成数据库的一个基本单位,在一个数据库中用户可以建立多张数据表.这是我们有权力建立的.3.数据表结构:创建一个数据表的第一步即为创建数据表结构,在数据表结构中的内容包括:有几个字段,每个字

mysql 对插入超过表字段限制时的处理

mysql在插入时,比如varchar类型超过表字段限制时,经测试不同版本的处理:    5.1版本,会对字符串进行截断后插入,不会报错    5.6,5.7版本,会直接插入失败,并报错

MySQL复制表字段到另外一个表的字段

有时候,我们需要复制某个字段一整列的数据到另外一个新的字段中,这很简单,SQL可以这么写: UPDATE tb_1 SET content_target = content_source; 大概写法如下:名仕娱乐城 Update {your_table} set {source_field} = {object_field} WHERE cause 有Navicat等工具更好,可以直接选中一列数据,拷贝粘贴到你需要的列中.如果是同一个表那没什么问题,如果是新表,请保持它们的行数是一致.如果行数不

MySQL数据表字段内容的批量修改、复制命令

复制字段里的数据命令: SQL代码 UPDATE table SET 被替换的字段名=被复制的字段名 演示如下 SQL代码 UPDATE dede_archives SET senddate=pubdate 如何手动将同一数据表内不同字段之间的内容批量转换,可以参考下面的命令: SQL代码 UPDATE table set 字段名=REPLACE(字段名,'原字符串','替换的字符串') where 已知的字段名 LIKE '%原字符串%' 应用到本文实例 SQL代码 UPDATE pw_mem