Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Sửa đổi tất cả các cột trong bảng thành 'không null' bất kể điều gì

Một cách nhanh chóng là viết các câu lệnh thay thế của bạn vào một tệp

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

Sau đó thực thi nội dung của tệp

source /tmp/alter.txt

và bạn đã hoàn thành ...

Đã thử nghiệm nó trong một DB sân chơi và nó hoạt động với tôi, nhưng bạn vẫn có thể muốn kiểm tra lại tệp trước khi thực thi :)

Tái bút:Tôi chưa kiểm tra cách xử lý các giá trị NULL. IIRC bạn phải có giá trị mặc định? Không chắc ngay bây giờ. Vui lòng kiểm tra điều này trước khi sử dụng.

CHỈNH SỬA 1:Để có một câu lệnh cho mỗi bảng:

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

CHỈNH SỬA 2:

Cái này hoạt động

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

, nhưng group_concat() bị giới hạn về độ dài, vì vậy bạn có thể gặp lỗi cú pháp nếu bạn có quá nhiều cột trong một bảng. Sau đó, bạn vẫn có tùy chọn đầu tiên ở trên, hoặc bạn xem tại mục nhập thủ công này :

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. Nhóm các hàng tương tự bên cạnh nhau trong MySQL

  2. Lỗi trong cú pháp SQL của bạn; kiểm tra hướng dẫn sử dụng tương ứng với phiên bản máy chủ MySQL của bạn

  3. Làm cách nào để buộc một truy vấn con chỉ trả về một hàng?

  4. SQL giới hạn CHỌN nhưng không THAM GIA

  5. Kiểm tra hộp kiểm từ các giá trị cơ sở dữ liệu