Thinkphp5+mysql批量筛选varchar字段默认值为null的数据

ops/2024/9/25 10:28:03/

荆轲刺秦王

sql server数据库mysql之后,遇到:

CREATE TABLE `q_bk_date` (`daid` int(11) NOT NULL AUTO_INCREMENT,`partno` varchar(200) CHARACTER SET utf8 NOT NULL DEFAULT '''''',`Bdate` date DEFAULT NULL,`bkno` varchar(25) CHARACTER SET utf8 NOT NULL DEFAULT '''''',`bvar` varchar(6) CHARACTER SET utf8 NOT NULL DEFAULT '''''',`bkdate` date DEFAULT NULL,`bz` varchar(100) CHARACTER SET utf8 DEFAULT NULL,PRIMARY KEY (`daid`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=71 DEFAULT CHARSET=utf8mb4;

varchar字段的 default值变成了""";

写个小脚本来批量生成DDL语句,例如:

ALTER TABLE q_bk_date ALTER COLUMN partno SET DEFAULT '';

上代码:

public function generateSql(){// 获取所有表名$tables = Db::getTables();$sqlRes = '';foreach ($tables as $key=>$value){// 获取表信息,包括字段类型$info = Db::getConnection()->getFieldsType($value);$varcharFields = array();foreach ($info as $index=>$string){$prefix = 'varchar';if (substr($string, 0, strlen($prefix)) === $prefix) {//echo "字符串以 '{$prefix}' 开头";array_push($varcharFields, $index);}}//print_r($varcharFields);exit();$databaseName = 'chip_sql2000'; // 数据库名$tableName = $value;       // 表名
//            $columnName = 'your_column_name';     // 列名foreach ($varcharFields as $ind=>$col){$sql = "SELECT COLUMN_DEFAULTFROM INFORMATION_SCHEMA.COLUMNSWHERE TABLE_SCHEMA = ?AND TABLE_NAME = ?AND COLUMN_NAME = ?";// 执行查询$result = Db::query($sql, [$databaseName, $tableName, $col]);//var_dump($result);exit();// 检查结果if($result){if ($result[0]['COLUMN_DEFAULT'] === "''") {$sqlRes .= "ALTER TABLE $value ALTER COLUMN $col SET DEFAULT '';";//echo "字段{$columnName}是NOT NULL";}}}}echo $sqlRes;exit();}

生成结果:

ALTER TABLE q_bk_date ALTER COLUMN partno SET DEFAULT '';
ALTER TABLE q_bk_date ALTER COLUMN bkno SET DEFAULT '';
ALTER TABLE q_bk_date ALTER COLUMN bvar SET DEFAULT '';
...

然后就可以拿去执行。


http://www.ppmy.cn/ops/8423.html

相关文章

Linux及tmux、vim常用命令

Linux 关于Linux的简介、诞生、迭代,大家可以去网上查一查,这里不多做赘述了 Linux文件类型 非常重要的文件类型有: 普通文件,目录文件,链接文件,设备文件,管道文件,Socket 套接字文件 等。 …

互联网大厂Spring Cloud面试题及参考答案(持续更新)

目录 什么是Spring Cloud Eureka? 如何在Spring Cloud应用中集成Eureka Server? 解释Eureka中的自我保护模式是什么&#x

uni-app HBuilderX通过easycom省略import自动导入自定义组件

快速尝试 自HBuilderX 2.5.5起支持easycom组件模式。更新HBuilderX即可尝试。 easycom默认已启用,并对项目下的components和uni_modules目录开启自动扫描,对符合下面路径和命名规则的组件自动导入。 components/组件名/组件名.vue uni_modules/组件名/…

Python pyglet制作彩色圆圈“连连看”游戏

原文链接: Python 一步一步教你用pyglet制作“彩色方块连连看”游戏(续)-CSDN博客文章浏览阅读1.6k次,点赞75次,收藏55次。上期讲到相同的色块连接,链接见: Python 一步一步教你用pyglet制作“彩色方块连连看”游戏-CSDN博客续上期,接下来要实现相邻方块的连线:首先来…

Python基本类型

1、Java基本类型 在java里,总共有8种基本类型,分别是: boolean:布尔类型,只有两个值true和false。char:字符类型,占用2个字节,用来表示一个单一的字符。byte:字节类型&…

python读取csv文件

在Python中,读取CSV(逗号分隔值)文件是一项常见的任务,通常可以使用内置的csv模块或pandas库来完成。以下是两种方法的示例: 使用内置的csv模块 import csv# 打开CSV文件 with open(example.csv, moder, encodingutf…

Python turtle海龟绘制美国队长盾牌

使用Python中的turtle模块绘制美队盾牌 具体思路如下: 导入海龟库第1个圆:半径 200,红色填充第2个圆:半径 150,白色填充第3个圆:半径 100,红色填充第4个圆:半径 50,蓝色…

C# - 反射动态添加/删除Attribute特性

API: TypeDescriptor.AddAttributes TypeDescriptor.GetAttributes 注意:TypeDescriptor.AddAttributes添加的特性需要使用 TypeDescriptor.GetAttributes获取 根据api可以看到,该接口不仅可以给指定类(Type)添加特性&#xf…