Chuyển đến nội dung chính
Mô-đun 9 · Bài học 3 trong tổng số 435/57 trong khóa học~10 min
Bài học theo mô-đun (3/4)

Thay đổi cấu trúc: ALTER TABLE

Nhu cầu của ứng dụng thay đổi theo thời gian và cơ sở dữ liệu phải theo kịp. ALTER TABLE là lệnh (cực kỳ linh hoạt) dành riêng cho việc sửa đổi các lược đồ bảng hiện có _mà không cần phải loại bỏ chúng (gây rủi ro cho dữ liệu bên trong).

Sửa đổi cột (ADD/DROP/ALTER)

Thêm một cột đòi hỏi phải cẩn thận. Nếu bảng đã chứa dữ liệu, việc thêm cột "NOT NULL" sẽ gây ra lỗi trong Postgres: nó nên chèn gì vào các hàng cũ? Bạn phải liên kết DEFAULT.

SQL
-- Aggiungiamo una colonna
ALTER TABLE users ADD COLUMN age INTEGER; -- Ok, sarà NULL ovunque

-- Aggiungiamo NOT NULL, quindi diamogli un deafult
ALTER TABLE users ADD COLUMN active BOOLEAN NOT NULL DEFAULT true;

-- Cancellare una colonna (ATTENZIONE! i dati andranno persi)
ALTER TABLE users DROP COLUMN age;

Không chỉ thêm hoặc xóa: bạn thường cần định cấu hình lại type của một cột hoặc một trong các ràng buộc của cột đó:

SQL
-- Cambia il tipo di dato (postgreSQL farà un 'cast' dei dati esistenti se possibile)
ALTER TABLE users ALTER COLUMN username TYPE VARCHAR(100);

-- Aggiunge il vincolo NOT NULL
ALTER TABLE users ALTER COLUMN username SET NOT NULL;

-- Rimuove il vincolo NOT NULL (ritorna ad accettare null)
ALTER TABLE users ALTER COLUMN username DROP NOT NULL;

Thêm các ràng buộc khi chạy

Giống như CREATE TABLE, chúng ta có thể sử dụng ALTER TABLE để đính kèm CONSTRAINT vào bảng đã được sử dụng trong ứng dụng sản xuất.

SQL
-- Aggiungi un nuovo Foreign Key
ALTER TABLE orders
  ADD CONSTRAINT fk_order_status FOREIGN KEY (status_id) REFERENCES statuses(id);

-- Aggiungi un CHECK
ALTER TABLE products
  ADD CONSTRAINT price_positive CHECK (price > 0);

-- E per distruggerli?
ALTER TABLE products DROP CONSTRAINT price_positive;

Đổi tên

Cả cột và bảng đều có thể được đổi tên:

SQL
ALTER TABLE users RENAME TO auth_users;
ALTER TABLE auth_users RENAME COLUMN username TO login_name;

Hãy thử nó

tập thể dục#sql.m9.l3.e1
Nỗ lực: 0Đang tải…

Bảng 'sản phẩm' hiện có cột 'tên'. Sửa đổi bảng bằng cách đổi tên cột 'tên' thành 'tiêu đề'. Sử dụng thao tác RENAME COLUMN.

Đang tải trình chỉnh sửa…
Hiển thị gợi ý

Cú pháp: ALTER TABLE ... ĐỔI TÊN CỘT ... ĐẾN ...

Giải pháp khả dụng sau 3 lần thử

Thêm các ràng buộc trong hậu kỳ

tập thể dục#sql.m9.l3.e2
Nỗ lực: 0Đang tải…

Sửa đổi bảng 'sản phẩm' bằng cách thêm ràng buộc KIỂM TRA (có tên là 'verifica_prezzo') yêu cầu giá (cột 'price') phải lớn hơn 0. Ràng buộc phải được thêm vào mà không bỏ cột ban đầu.

Đang tải trình chỉnh sửa…
Hiển thị gợi ý

Cú pháp: ALTER TABLE table THÊM tên ràng buộc KIỂM TRA (...)

Giải pháp khả dụng sau 3 lần thử