Mysql
 sql >> база данни >  >> RDS >> Mysql

Променете всички колони в таблица на „not null“, независимо какво

Един бърз начин е да напишете своите изрази за промяна във файл

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';

След това изпълнете съдържанието на файла

source /tmp/alter.txt

и сте готови...

Тествах го в база данни на игрална площадка и работи за мен, но все пак може да искате да проверите отново файла, преди да изпълните :)

P.S.:Не съм проверил как се обработват стойностите NULL. IIRC трябва да имате стойност по подразбиране? Не съм сигурен в момента. Моля, тествайте това, преди да го използвате.

РЕДАКТИРАНЕ 1:За да има един израз на таблица:

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

РЕДАКТИРАНЕ 2:

Този работи

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

, но group_concat() е ограничена по дължина, така че може да получите синтактични грешки, ако имате твърде много колони в таблица. Тогава все още имате първата опция от по-горе или погледнете това ръчно въвеждане :

SET [GLOBAL | SESSION] group_concat_max_len = val;



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Периоди от време на MySQL заявка и стойност на максималния спад спрямо предходната максимална стойност

  2. Импортирайте данни от Excel в MySql с Node JS

  3. Автоматично увеличение след изтриване в MySQL

  4. Таймерът за отмяна на изявление на MySQL не успя да спре

  5. Хърватски диакритични знаци в MySQL db (utf-8)