sql >> Databáze >  >> RDS >> Mysql

Bez ohledu na to upravte všechny sloupce v tabulce tak, aby nebyly null

Rychlý způsob je zapsat vaše příkazy alter do souboru

select
concat('ALTER TABLE ', c.TABLE_NAME, ' CHANGE ', c.COLUMN_NAME, ' ', c.COLUMN_NAME, ' ', c.COLUMN_TYPE, ' NOT NULL;') as alter_statement
into outfile '/tmp/alter.txt'
from information_schema.COLUMNS c
where 
c.IS_NULLABLE = 'YES'
and c.TABLE_SCHEMA = 'your_database_name';

Poté spusťte obsah souboru

source /tmp/alter.txt

a máte hotovo...

Testoval jsem to v databázi dětského hřiště a fungovalo to pro mě, přesto možná budete chtít soubor před spuštěním zkontrolovat :)

P.S.:Nezkontroloval jsem, jak se zachází s hodnotami NULL. IIRC musíte mít výchozí hodnotu? Teď si nejsem jistý. Před použitím to prosím vyzkoušejte.

EDITACE 1:Chcete-li mít jeden příkaz na tabulku:

select
concat('ALTER TABLE ', c.TABLE_NAME, GROUP_CONCAT(' MODIFY COLUMN ', c.COLUMN_NAME, ' ', c.COLUMN_TYPE, ' NOT NULL')) as alter_statement
from information_schema.COLUMNS c
where 
c.IS_NULLABLE = 'YES'
and c.TABLE_SCHEMA = 'your_database_name'
group by c.TABLE_NAME

EDITACE 2:

Tento funguje

select concat(alter_statement, ';')
into outfile '/tmp/alter.txt'
from (
select
concat('ALTER TABLE ', c.TABLE_NAME, GROUP_CONCAT(' CHANGE ', c.COLUMN_NAME, ' ', c.COLUMN_NAME, ' ', c.COLUMN_TYPE, ' NOT NULL')) as alter_statement

from information_schema.COLUMNS c
where 
c.IS_NULLABLE = 'YES'
and c.TABLE_SCHEMA = 'playground'
group by c.TABLE_NAME
) sq

, ale group_concat() je omezená na délku, takže pokud máte v tabulce příliš mnoho sloupců, můžete dostat syntaktické chyby. Pak stále máte první možnost shora, nebo se můžete podívat na toto ruční zadání :

SET [GLOBAL | SESSION] group_concat_max_len = val;



  1. Může někdo vysvětlit toto SQL? (a jak to mohu „parametrizovat“ a vyvolat jako funkci?)

  2. Může někdo vysvětlit, jak spolu souvisí role Postgresql, uživatelé Postgresql a uživatelé Linuxu?

  3. Upozornění:mysqli_stmt::bind_param():Počet proměnných neodpovídá počtu parametrů v připraveném příkazu

  4. Jak připojit databázi k Pythonu