【问题标题】:How to update common field length in table for MYSQL database for all tables?如何更新所有表的 MYSQL 数据库表中的公共字段长度?
【发布时间】:2018-02-14 19:21:49
【问题描述】:

我面临更新数据库中包含这两个字段(Say Active,Version)的所有表的两个字段(Say Active,Version)长度的问题。

有没有办法更新两个字段。

在 MySQL 中可以吗?

如果可能,请分享给我。

在谷歌之后我发现了这个 Mysql- Single Sequence Table for all Tables

谢谢

司坦苏

【问题讨论】:

  • 您是要更新列 - 更改其中的值,还是修改列 - 更改其定义?
  • @PaulCampbell 我想更新所有数据库表的两列长度
  • 您的链接似乎有点随意。我要修改。请参阅下面的答案。

标签: mysql sql database sql-update


【解决方案1】:

简短的回答是“是”,并带有一系列 ALTER TABLE 语句。

但是,首先,备份您的数据库。

接下来,通过查询 information_schema 确定您已经确定了所有存在这些列的实例的表。类似的东西

SELECT `table_name`, `column_name`, `column_type`, `column_default`, `is_nullable`
FROM `information_schema`.`columns`
WHERE `table_schema` = 'yourdbname'
AND `column_name` IN('Version','Say Active')
ORDER BY `column_name`;

这将为您提供表格列表,并允许您查看当前定义是否一致。

接下来,您需要为标识的每个表和列创建一些 ALTER TABLE 语句,以便为您正在更改的列提供 FULL 定义。如果您对 mysql syntax 不满意,请使用

获取当前定义
SHOW CREATE TABLE `tablename1`;  

在受影响的表格之一上并将它们复制出来,替换编辑版本中的列长度。

使用 MODIFY COLUMN 而不是 CHANGE COLUMN 语法,因为您不会更改列名。

如果我们假设您对 Version 列的定义返回为

Version varchar(12) 非空

如果你想把它的长度加倍,你会为每个实例创建一个 ALTER TABLE 语句:

ALTER TABLE `tablename1` MODIFY COLUMN `Version` VARCHAR(24) NOT NULL; 
ALTER TABLE `tablename2` MODIFY COLUMN `Version` VARCHAR(24) NOT NULL; 

等等

当您更新了所有表后,您可以针对 information_schema 重新运行查询,以检查所有表中的两个列是否都已修改。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-20
    • 1970-01-01
    相关资源
    最近更新 更多