Hi, I am

Ngô Tôn

I am a programmer.

Home / Programming / Database / Thay đổi kiểu dữ liệu cho tất cả Column trong SQL – Nhật ký lập trình [Chapter 9]

Thay đổi kiểu dữ liệu cho tất cả Column trong SQL – Nhật ký lập trình [Chapter 9]

Trong lập trình website, khi chúng ta thao tác với cơ sở dữ liệu có những lúc chúng ta gặp vấn đề làm thế nào để thay đổi kiểu dữ liệu cho tất cả Column trong SQL.

VD: Mình có 1 Database tên là db gồm 2 table a: id(int), name(varchar), address(text) và b: child(varchar), age(int). Yêu cầu đặt ra là mình phải chuyển những cột có kiểu dữ liệu là varchar sang text.

Câu lệnh bình thường chúng ta hay dùng sẽ là:

Nhưng trên ví dụ này ta chỉ có 2 bảng và có 2 cột kiểu dữ liệu varchar, giả sử ta có nhiều bảng khác và nhiều cột khác thì sao?

Chúng ta sẽ sử dụng INFORMATION_SCHEMA  cụ thể là trong hệ quản trị cơ sở dữ liệu MYSQL để giải quyết vấn đề này.

INFORMATION_SCHEMA là gì?

INFORMATION_SCHEMA trong MySQL là cơ sở dữ liệu thông tin, tại đây lưu trữ các thông tin của các cơ sở dữ liệu khác của MySQL.

Trong cơ sở dữ liệu INFORMATION_SCHEMA chứa một vài bảng có thuộc tính chỉ đọc. Chúng thực ra chỉ là các view, không phải là bảng dữ liệu, vì vậy mà không có các file lưu trữ riêng(các bảng đều có các file chứa dữ liệu của bảng nằm trên ổ đĩa).

Cũng chính vì là các view mà người dùng không thể thiết lập các trigger lên chúng và đồng thời không có thư mục dữ liệu riêng (trong MySQL mỗi cơ sở dữ liệu được nằm ở một thư mục riêng).

Trong INFORMATION_SCHEMA có nhiều bảng và view tuy nhiên có lẽ hay sử dụng nhiều nhất là các bảng TABLES, COLUMNS và USER_PRIVILEGES.

  • Bảng TABLES chứa tất cả các thông tin về các bảng của các cơ sở dữ liệu.
  • Bảng COLUMNS chứa tất cả các thông tin về các cột của các bảng trong tất cả các cơ sở dữ liệu.
  • Bảng USER_PRIVILEGES chứa tất cả các thông tin về quyền truy cập của các người dùng đối với mỗi cơ sở dữ liệu.

Trong MySQL thông tin của bảng này được lấy ra từ bảng User của cơ sở dữ liệu mysql – đây cũng là một cơ sở dữ liệu quan trọng của MySQL.

Sử dụng INFORMATION_SCHEMA để thay đổi kiểu dữ liệu cho tất cả column

Ở đây, thực chất không phải là ta thực thi câu lệnh INFORMATION_SCHEMA để chập nhật. Mà ta sẽ dùng để show ra tất cả các column chúng ta muốn.

Code

Ở đoạn code trên, mình sẽ tạo ra các dòng chứa câu lệnh cập nhật mà chúng ta dùng như ở phần đầu mình có ví dụ.

Mình chọn tất cả các cột có kiểu là varchar trong CSDL có tên là db.

  • TABLE_NAME , COLUMN_NAME là 2 cột lấy ra từ bảng COLUMNS của INFORMATION_SCHEMA.
  • DATA_TYPE là kiểu dữ liệu.
  • TABLE_SCHEMA là tên cơ sở dữ liệu.

Kết quả chúng ta nhận được sẽ là những Record có 5 cột:

ALTER TABLE TABLE_NAME MODIFY COLUMN COLUMN_NAME CONCAT(‘ TEXT;’)
ALTER TABLE a MODIFY COLUMN name TEXT;
ALTER TABLE b MODIFY COLUMN child TEXT;

Bây giờ chúng ta chỉ cần lấy ra để sử dụng thôi.

Đơn giản phải không các bạn. Ngô Tôn chúc các bạn thành công!

About ngoton

Ngô Tôn is a programmer with passion for tailored software solutions. Comes with 7+ years of IT experience, to execute beautiful front-end experiences with secure and robust back-end solutions.

Leave a Reply

avatar
  Subscribe  
Notify of