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

BẢNG ALTER SQL cho người mới bắt đầu

Trong SQL, ALTER TABLE câu lệnh sửa đổi định nghĩa của một bảng hiện có.

Bạn có thể sử dụng ALTER TABLE để thay đổi, thêm hoặc bỏ các cột và ràng buộc.

Tùy thuộc vào DBMS của bạn, ALTER TABLE câu lệnh cũng có thể được sử dụng để gán lại và xây dựng lại các phân vùng hoặc vô hiệu hóa và bật các ràng buộc và trình kích hoạt.

Cú pháp

ALTER TABLE tuyên bố thường như sau:

ALTER TABLE table_name
    [alter_option [, alter_option] ...]
    [partition_options]

Ở đâu:

  • table_name là tên của bảng bạn muốn thay đổi.
  • [alter_option [, alter_option] …] là danh sách các thay đổi cụ thể mà bạn muốn thực hiện (ví dụ:ADD theo sau là tên và định nghĩa cột hoặc DROP COLUMN theo sau là tên cột, v.v.).
  • [partition_options] là một danh sách tùy chọn các tùy chọn dành riêng cho các bảng được phân vùng. Không phải tất cả các DBMS đều hỗ trợ các bảng được phân vùng. Nếu có, các tùy chọn như vậy có thể cho phép bạn thêm, bỏ, loại bỏ, nhập, hợp nhất hoặc chia nhỏ các phân vùng hoặc thực hiện bảo trì phân vùng.

Cú pháp đầy đủ cho ALTER TABLE có thể khá phức tạp và thay đổi đáng kể giữa các DBMS. Đối với bất kỳ điều gì không được đề cập trong bài viết này, hãy tham khảo tài liệu DBMS của bạn.

Dưới đây là các ví dụ về ALTER TABLE phổ biến nhất các hoạt động.

Thêm một cột mới

Để thêm cột mới vào bảng, hãy sử dụng ADD , theo sau là tên cột và kiểu dữ liệu.

ALTER TABLE Products 
ADD ProductDescription varchar(500);

Điều này thêm một cột mới có tên là ProductDescription tới Products bảng.

Trong ví dụ này, chúng tôi đặt cột là varchar(500) nhưng bạn sẽ sử dụng bất kỳ kiểu dữ liệu nào thích hợp cho cột mới của mình.

Bạn cũng có thể bao gồm các ràng buộc trong định nghĩa cột của mình, nhưng điều này có thể phụ thuộc vào DBMS của bạn và bảng đã chứa dữ liệu hay chưa (xem thảo luận bên dưới về điều này).

Đổi tên cột

Hầu hết các RDBMS chính (PostgreSQL, Oracle, SQLite, MySQL 8.0+, MariaDB 10.5.2+) cho phép bạn đổi tên một cột như sau:

ALTER TABLE table_name 
RENAME COLUMN column_name TO new_column_name;

Nếu bạn đang sử dụng MySQL trước phiên bản 8.0 hoặc MariaDB trước 10.5.2+, bạn sẽ cần sử dụng CHANGE COLUMN thay vào đó, cú pháp cũng yêu cầu bạn xác định lại kiểu dữ liệu. Như thế này:

ALTER TABLE table_name
CHANGE COLUMN old_column_name new_column_name datatype;

Trong SQL Server, bạn sẽ cần sử dụng sp_rename thủ tục được lưu trữ để đổi tên một cột. Như thế này:

EXEC sp_rename 'schema_name.table_name.column_name', 'new_column_name', 'COLUMN';

Thả một cột

Để thả một cột, hãy sử dụng DROP COLUMN , theo sau là tên cột.

ALTER TABLE table_name 
DROP COLUMN column_name;

Sửa đổi Định nghĩa của Cột

Cú pháp để sửa đổi định nghĩa của cột hiện có khác nhau đáng kể giữa các DBMS. Nó cũng phụ thuộc vào những sửa đổi bạn cần thực hiện.

Để giữ mọi thứ đơn giản, hãy thực hiện một sửa đổi đơn giản đối với một cột trong SQL Server:

ALTER TABLE Products 
ALTER COLUMN ProductDescription varchar(1000);

Trong ví dụ này, chúng tôi đã thay đổi ProductDescription cột từ varchar(500) thành varchar(1000) .

Phần dưới đây trình bày cú pháp cơ bản mà mỗi DBMS yêu cầu để thực hiện các thay đổi tương tự hoặc tương tự.

Máy chủ SQL:

ALTER TABLE table_name 
ALTER COLUMN column_name datatype;

PostgreSQL:

ALTER TABLE table_name 
ALTER COLUMN column_name TYPE datatype;

MySQL, MariaDB và Oracle trước 10g:

ALTER TABLE table_name 
MODIFY COLUMN column_name datatype;

Trong Oracle 10g trở lên:

ALTER TABLE table_name 
MODIFY column_name datatype;

SQLite sẽ không cho phép bạn sửa đổi một cột, ngoài việc đổi tên nó.

Cú pháp thực tế cho mỗi DBMS thường phức tạp hơn nhiều so với cú pháp này và phụ thuộc vào chính xác những gì bạn đang cố gắng thực hiện. Tuy nhiên, điều này sẽ giúp bạn bắt đầu với các sửa đổi cột cơ bản.

Hạn chế &Cân nhắc

Nói chung, bạn nên tránh thực hiện các sửa đổi đối với các bảng khi chúng chứa dữ liệu. Bằng cách thực hiện các thay đổi, bạn có nguy cơ mất dữ liệu hiện có.

Phải nói rằng, nhiều DBMS thực sự ngăn bạn thực hiện các thay đổi nhất định sau khi bảng chứa dữ liệu. Ví dụ:bạn có thể thấy rằng bạn không thể thêm NOT NULL ràng buộc đối với một cột chứa dữ liệu.

Một số DBMS có thể cho phép bạn làm như vậy, miễn là bạn sử dụng DEFAULT ràng buộc (để cung cấp giá trị mặc định cho các cột chưa có dữ liệu được chèn rõ ràng vào chúng) hoặc cột Danh tính / tự động gia tăng hoặc cột dấu thời gian, v.v.

Một số DBMS không cho phép bạn bỏ hoặc thay đổi các cột trong bảng.

Ngoài ra, một số DBMS hạn chế các kiểu dữ liệu có thể được thêm vào.

Ví dụ - Thêm Ràng buộc KHÔNG ĐẦY ĐỦ

Dưới đây là một ví dụ để giúp chứng minh những điểm trên.

Đây là những gì sẽ xảy ra khi tôi cố gắng thêm một cột có NOT NULL ràng buộc trong SQL Server.

ALTER TABLE Products 
ADD ProductDescription varchar(500) NOT NULL;

Kết quả:

Msg 4901, Level 16, State 1, Line 1
ALTER TABLE only allows columns to be added that can contain nulls, or have a DEFAULT definition specified, or the column being added is an identity or timestamp column, or alternatively if none of the previous conditions are satisfied the table must be empty to allow addition of this column. Column 'ProductDescription' cannot be added to non-empty table 'Products' because it does not satisfy these conditions.

Về cơ bản, bảng đã chứa dữ liệu và do đó, SQL Server trả về một lỗi cho tôi biết rằng tôi chỉ có thể thêm một NOT NULL ràng buộc nếu bảng đáp ứng các tiêu chí nhất định và nó chưa đáp ứng tiêu chí đó.

Và có lý do chính đáng cho tiêu chí đó.

A NOT NULL ràng buộc đảm bảo rằng không có NULL giá trị trong cột trong bất kỳ hàng nào. Vấn đề là, chúng tôi đã có dữ liệu trong bảng và nếu chúng tôi thêm một cột mới, các hàng hiện có đó sẽ là NULL - sẽ vi phạm ngay lập tức NOT NULL của chúng tôi hạn chế. Vì vậy, chúng tôi cần chỉ định dữ liệu để chuyển vào các hàng hiện có.

Để thực hiện việc này, chúng ta có thể thêm DEFAULT hoặc tương tự để đảm bảo rằng mọi hàng hiện có đều được tự động điền dữ liệu trong cột này.

Ví dụ:

ALTER TABLE Products 
ADD ProductDescription varchar(500) NOT NULL DEFAULT 'N/A';

Điều này chỉ đơn giản là thêm một DEFAULT ràng buộc vào cột. Ràng buộc này đảm bảo rằng tất cả các hàng đều chứa một giá trị (trong trường hợp này, giá trị là N/A ) nếu chúng chưa được chỉ định một giá trị. Điều này có nghĩa là NOT NULL của chúng tôi ràng buộc sẽ không bị vi phạm, bởi vì tất cả các hàng hiện có bây giờ sẽ chứa một giá trị.

Nếu cột mới cần có các giá trị tăng dần, duy nhất, thay vào đó bạn có thể đặt nó thành IDENTITY cột (hoặc AUTOINCREMENT trong SQLite và các DBMS khác).

Tuy nhiên, nếu bảng chưa chứa dữ liệu, bạn có thể thêm cột mà không phải thực hiện bất kỳ bước nào trong số này.

Tùy chọn phân vùng

Bài viết này hướng tới người mới bắt đầu và các bảng được phân vùng hơi nằm ngoài phạm vi hướng dẫn của người mới bắt đầu.

Đã nói rằng, tôi sẽ nhanh chóng xem qua một số tùy chọn phân vùng liên quan đến ALTER TABLE tuyên bố.

Nếu DBMS của bạn hỗ trợ các bảng được phân vùng, nó có thể cũng cung cấp các tùy chọn phân vùng với ALTER TABLE tuyên bố.

Ví dụ, trong MySQL, bạn có thể làm như sau:

ALTER TABLE Products
PARTITION BY HASH(ProductId)
PARTITIONS 8;

Điều này phân chia bảng thành 8 phân vùng, bằng HASH , sử dụng ProductId làm khóa phân vùng.

PARTITION BY HASH sử dụng phần còn lại của biểu thức (trong trường hợp này là ProductId cột) chia cho số lượng phân vùng (tức là mô đun).

Bạn cũng có thể sử dụng phân vùng phạm vi. Đây là cách bạn có thể thêm phân vùng phạm vi vào bảng hiện có:

ALTER TABLE Products 
ADD PARTITION (PARTITION Partition9 VALUES LESS THAN (2020));

Ví dụ này ngụ ý rằng Products bảng đã có 8 phân vùng phạm vi và chúng tôi đang thêm một phân vùng khác có tên là Partition9 .

Bạn có thể thả các phân vùng như sau:

ALTER TABLE Products 
DROP PARTITION Partition8, Partition9;

Hãy nhớ rằng những ví dụ này dành cho MySQL.

Tôi cũng đã viết một vài bài báo về các bảng được phân vùng trong SQL Server. Liên quan đến ALTER TABLE , đây là cách chuyển đổi một phân vùng và đây là cách chuyển đổi trong một phân vùng (cả hai đều được thực hiện với ALTER TABLE ).

Trong SQL Server, một số tùy chọn phân vùng cần được thực hiện với các câu lệnh khác. Ví dụ:hợp nhất các phân vùng được thực hiện với ALTER PARTITION FUNCTION và việc phân chia các phân vùng được thực hiện với ALTER PARTITION SCHEME tuyên bố.

Nếu bạn muốn tìm hiểu thêm về các bảng được phân vùng trong SQL Server, đây là cách tạo một bảng được phân vùng trong SQL Server.

ALTER TABLE trong SQLite

Tôi cũng nên đề cập rằng SQLite hỗ trợ ALTER TABLE rất hạn chế tuyên bố. Trong SQLite, ALTER TABLE câu lệnh cho phép bạn đổi tên bảng, đổi tên cột trong bảng hoặc thêm cột mới vào bảng hiện có.

Bất kỳ thay đổi nào khác sẽ yêu cầu bạn bỏ bảng và bắt đầu lại. Điều này cũng áp dụng cho việc thêm khóa ngoại.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tìm hiểu phân tích dữ liệu cơ bản với các chức năng của cửa sổ SQL

  2. 5 lỗi thiết kế truy vấn SQL rất phổ biến cần tránh bằng mọi giá

  3. Tham số Sniffing Primer

  4. Cách di chuyển cơ sở dữ liệu và tệp dữ liệu

  5. Giới thiệu về HDFS | HDFS là gì và nó hoạt động như thế nào?