【问题标题】:MySQL update default value of column in multiple tables from an inner select statementMySQL从内部选择语句更新多个表中列的默认值
【发布时间】:2014-06-23 07:33:23
【问题描述】:

我需要更新数据库表中所有Synced 字段的默认值。

我查看了其他几个帖子并将以下内容放在一起,我遗漏了一些东西,有什么想法吗?

ALTER TABLE (
  SELECT 
    DISTINCT
      TABLE_NAME
  FROM
    INFORMATION_SCHEMA.COLUMNS
  WHERE 
    TABLE_SCHEMA != 'mysql'
    AND TABLE_SCHEMA != 'information_schema'
    AND COLUMN_NAME = 'Synced'
  ORDER BY 
    TABLE_NAME ASC)
CHANGE `Synced` `Synced` TINYINT DEFAULT 0;

我参考了以下内容将其放在一起:

【问题讨论】:

  • 您不能对表定义使用子查询。做你想做的,你需要在字符串变量中生成SQL,然后使用prepareexecute运行语句。

标签: mysql sql information-schema nested-queries


【解决方案1】:

我认为您需要一些动态 SQL。像这样:

SELECT 
  DISTINCT
    CONCAT('ALTER TABLE ', TABLE_NAME, ' CHANGE `Synced` `Synced` TINYINT DEFAULT 0;') 
FROM
    INFORMATION_SCHEMA.COLUMNS
WHERE 
    TABLE_SCHEMA != 'mysql'
    AND TABLE_SCHEMA != 'information_schema'
    AND COLUMN_NAME = 'Synced'
ORDER BY 
    TABLE_NAME ASC

【讨论】:

  • 我更新了代码以在查询中包含DISTINCT。有没有办法在构建它们之后执行每个动态查询,在 sql 中,而不是在代码中。
猜你喜欢
  • 1970-01-01
  • 2011-12-13
  • 1970-01-01
  • 2019-06-03
  • 2015-11-11
  • 1970-01-01
  • 2013-06-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多