MySQL обновляет значение столбца по умолчанию в нескольких таблицах из внутреннего оператора выбора

Мне нужно обновить значение по умолчанию для всех полей 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;

Я сослался на следующее, чтобы собрать его вместе:


person James Oravec    schedule 06.05.2014    source источник
comment
Вы не можете использовать подзапрос для определения таблицы. Чтобы сделать то, что вы хотите, вам нужно сгенерировать SQL в строковой переменной, а затем использовать prepare и execute для запуска оператора.   -  person Gordon Linoff    schedule 06.05.2014


Ответы (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
person dwjv    schedule 06.05.2014
comment
Я обновил код, чтобы включить DISTINCT в запрос. Есть ли способ выполнить каждый из этих динамических запросов после их создания в sql, а не в коде. - person James Oravec; 06.05.2014