1

約 12 のデータベースがあり、それぞれに 50 個のテーブルがあり、そのほとんどに 30 個以上の列があります。データベースは厳格モードでオフとして実行されていましたが、デフォルトで厳格モードがオンになっている cleardb サービスにデータベースを移行する必要がありました。「Not Null」制約を持つすべてのテーブルでは、デフォルト値が渡されていないため、挿入が機能しなくなりました。一方、値が指定されていない場合、厳密モードが OFF の場合、MYSQL は列のデータ型のデフォルト値を推定します。すべてのテーブルのすべての列に関するメタデータを取得し、そのような列を持つすべてのテーブルを変更してデフォルトを「Null」に変更するスクリプトを生成するために使用できるスクリプトはありますか

4

2 に答える 2

0

これは、@ Ollie-jonesスクリプトに基づいて思いついたものです

https://gist.github.com/brijrajsingh/efd3c273440dfebcb99a62119af2ecd5

SELECT CONCAT_WS('.',TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME) col,CONCAT('alter table ',TABLE_NAME,' MODIFY COLUMN ', COLUMN_NAME,' ',DATA_TYPE,'(',CHARACTER_MAXIMUM_LENGTH,') NULL DEFAULT NULL') as script_col
  FROM information_schema.COLUMNS
 WHERE is_nullable=0 
 and length(COLUMN_DEFAULT) is NULL and
 CHARACTER_MAXIMUM_LENGTH is not NULL and 
 table_schema = 'immh' 
 Union
 SELECT CONCAT_WS('.',TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME) col,CONCAT('alter table ',TABLE_NAME,' MODIFY COLUMN ', COLUMN_NAME,' ',DATA_TYPE,' NULL DEFAULT NULL') as script_col
  FROM information_schema.COLUMNS
 WHERE is_nullable=0 
 and length(COLUMN_DEFAULT) is NULL and
 CHARACTER_MAXIMUM_LENGTH is NULL and 
 table_schema = 'immh' 
于 2016-08-23T08:33:40.757 に答える