如何查找MariaDB中含ON UPDATE CURRENT_TIMESTAMP()的列并移除该属性
找出所有带ON UPDATE CURRENT_TIMESTAMP的TIMESTAMP列并移除属性
1. 查询目标列
利用information_schema系统库可以快速定位所有包含该属性的列,执行以下SQL即可:
SELECT TABLE_SCHEMA AS 数据库名, TABLE_NAME AS 表名, COLUMN_NAME AS 列名 FROM information_schema.COLUMNS WHERE DATA_TYPE = 'timestamp' AND EXTRA LIKE '%ON UPDATE CURRENT_TIMESTAMP%' AND TABLE_SCHEMA NOT IN ('information_schema', 'mysql', 'performance_schema', 'sys');
该语句会自动排除系统数据库,仅返回业务库中符合条件的列信息。
2. 批量生成移除属性的ALTER语句
如果需要批量处理,可以自动生成对应的修改语句,省去手动编写的麻烦:
SELECT CONCAT( 'ALTER TABLE `', TABLE_SCHEMA, '`.`', TABLE_NAME, '` MODIFY COLUMN `', COLUMN_NAME, '` TIMESTAMP ', IF(IS_NULLABLE = 'NO', 'NOT NULL ', ''), IF(COLUMN_DEFAULT IS NOT NULL, CONCAT('DEFAULT ', COLUMN_DEFAULT), ''), ';' ) AS 待执行SQL FROM information_schema.COLUMNS WHERE DATA_TYPE = 'timestamp' AND EXTRA LIKE '%ON UPDATE CURRENT_TIMESTAMP%' AND TABLE_SCHEMA NOT IN ('information_schema', 'mysql', 'performance_schema', 'sys');
生成的语句会保留原列的NOT NULL约束和默认值,仅移除ON UPDATE CURRENT_TIMESTAMP属性。建议先检查生成的SQL是否符合预期,再复制执行。
注意事项
- 执行ALTER语句前建议备份表数据,避免意外情况
- 如果列原本设置了
DEFAULT CURRENT_TIMESTAMP,生成的语句会保留该默认值,不会影响原有默认行为
内容的提问来源于stack exchange,提问作者Zhiyong Li
相关产品推荐
相关产品推荐

