天天看點

MYSQL-消滅NULL列資料執行方法

文章目錄

    • 涉及SQL
      • 1. 将所有表所有字元類型字段中的null資料的置為""
      • 2. 将所有表所有字段設定為`NOT NULL DEFAULT ''`
    • 執行示範

null列缺點我想不必多說, 使用該部落格中SQL和方法的我想應該是知道null列弊端的人!

來自于MYSQL官方的解釋:

NULL columns require additional space in the row to record whether their values are NULL. For MyISAM tables, each NULL column takes one bit extra, rounded up to the nearest byte.

涉及SQL

1. 将所有表所有字元類型字段中的null資料的置為""

-- 生成 将所有表所有字段中資料為空的資料置為""的 SQL語句
SELECT
   -- c.table_schema, c.TABLE_NAME, t.TABLE_TYPE, c.column_name, c.data_type, c.column_type, c.IS_NULLABLE,
   concat( 'update `', c.table_schema, '`.`', c.table_name, '` set `', c.column_name, '` = \'\' where `', c.column_name, '` is null;' )
FROM
   information_schema.COLUMNS c JOIN information_schema.TABLES t on t.TABLE_SCHEMA = c.TABLE_SCHEMA and t.TABLE_NAME = c.TABLE_NAME
WHERE
  t.TABLE_TYPE = 'BASE TABLE' and c.table_schema = 'interest' and c.data_type in ('char', 'varchar');
           

2. 将所有表所有字段設定為

NOT NULL DEFAULT ''

-- 生成 将所有表所有字段中資料為空的資料置為NOT NULL DEFAULT ''的 SQL語句
SELECT
   -- c.table_schema, c.TABLE_NAME, t.TABLE_TYPE, c.column_name, c.data_type, c.column_type, c.IS_NULLABLE,
   concat( 'ALTER TABLE `', c.table_schema, '`.`', c.table_name, '` MODIFY COLUMN `', c.column_name, '` ', c.column_type, ' NOT NULL DEFAULT \'\';' )
FROM
   information_schema.COLUMNS c JOIN information_schema.TABLES t on t.TABLE_SCHEMA = c.TABLE_SCHEMA and t.TABLE_NAME = c.TABLE_NAME
WHERE
   t.TABLE_TYPE = 'BASE TABLE' and c.table_schema = 'interest' and c.data_type in ('char', 'varchar') and c.IS_NULLABLE = 'YES';
           

執行示範

  1. 生成 将所有表所有字段中資料為空的資料置為""的 SQL語句
  2. 執行生成的SQL語句
    MYSQL-消滅NULL列資料執行方法