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