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

Cột được tạo là gì?

Một số hệ thống quản lý cơ sở dữ liệu (DBMS) bao gồm một tính năng được gọi là các cột được tạo.

Còn được gọi là "cột được tính toán", các cột được tạo tương tự như một cột bình thường, ngoại trừ việc giá trị của cột được tạo ra được lấy từ một biểu thức tính toán các giá trị từ các cột khác.

Nói cách khác, giá trị của cột đã tạo được tính từ các cột khác.

Ví dụ

Dưới đây là một ví dụ cơ bản để chứng minh cách các cột đã tạo hoạt động.

CREATE TABLE Products( 
    Id INTEGER PRIMARY KEY, 
    Name TEXT,
    Qty INT,
    Price INT,
    TotalValue INT GENERATED ALWAYS AS (Qty * Price)
);

Ví dụ này được tạo trong SQLite và sử dụng cú pháp SQLite để tạo một cột được tạo. Cú pháp này sử dụng GENERATED ALWAYS cột-ràng buộc.

GENERATED ALWAYS một phần là tùy chọn trong SQLite, vì vậy bạn chỉ có thể sử dụng AS .

Trên thực tế, GENERATED ALWAYS một phần cũng là tùy chọn trong MySQL và nó thậm chí không được định nghĩa trong TSQL (phần mở rộng SQL cho SQL Server), vì vậy AS từ khóa là tất cả những gì bạn cần (cùng với biểu thức thực tế).

Biểu thức là thứ xác định giá trị thực tế mà cột sẽ giữ. Trong ví dụ của tôi, phần đọc (Qty * Price) là biểu thức xác định giá trị đó.

Trong trường hợp này, chỉ cần nhân số lượng (số lượng của mỗi sản phẩm) với giá của mỗi sản phẩm.

Do đó, cột được tạo này chứa tổng giá trị của mỗi cổ phiếu trong kho.

Nếu chúng tôi chèn dữ liệu và chọn nó, chúng tôi có thể thấy giá trị được tính toán của cột được tạo.

INSERT INTO Products VALUES 
  (1, 'Hammer', 10, 9.99),
  (2, 'Saw', 5, 11.34),
  (3, 'Wrench', 7, 37.00),
  (4, 'Chisel', 9, 23.00),
  (5, 'Bandage', 70, 120.00);

SELECT * FROM Products;

Kết quả:

Id     Name        Qty    Price   TotalValue
-----  ----------  -----  ------  ----------
1      Hammer      10     9.99    99.9      
2      Saw         5      11.34   56.7      
3      Wrench      7      37      259       
4      Chisel      9      23      207       
5      Bandage     70     120     8400      

Nếu chúng ta nhìn vào hàng đầu tiên, chúng ta có thể thấy rằng có 10 cái búa với giá 9,99 mỗi cái. Cột được tạo nhân hai giá trị này với nhau và chúng tôi kết thúc bằng 99,9.

Nếu chúng ta giảm số lượng búa, thì cột được tạo sẽ tạo ra một giá trị khác.

Đây là một ví dụ.

UPDATE Products 
SET Qty = 5 WHERE Id = 1;

SELECT * FROM Products;

Kết quả:

Id     Name        Qty    Price   TotalValue
-----  ----------  -----  ------  ----------
1      Hammer      5      9.99    49.95     
2      Saw         5      11.34   56.7      
3      Wrench      7      37      259       
4      Chisel      9      23      207       
5      Bandage     70     120     8400      

Trong trường hợp này, tôi đã giảm số búa xuống còn 5 và do đó cột được tạo ra đã tính giá trị là 49,95.

Các loại cột đã tạo

Có hai loại cột được tạo; được lưu trữ và ảo.

Một số DBMS có thể sử dụng thuật ngữ hơi khác, ví dụ:SQL Server sử dụng thuật ngữ “liên tục” thay vì “được lưu trữ”. Dù bằng cách nào, nó cũng đề cập đến cùng một thứ.

  • VIRTUAL :Giá trị cột không được lưu trữ nhưng được đánh giá khi các hàng được đọc.
  • STORED :Giá trị cột được đánh giá và lưu trữ khi các hàng được chèn hoặc cập nhật.

STORED do đó, các cột yêu cầu không gian lưu trữ, trong khi VIRTUAL cột thì không.

Tuy nhiên, điều này cũng có nghĩa là VIRTUAL các cột sử dụng nhiều chu kỳ CPU hơn khi được đọc.

Lợi ích của các cột đã tạo

Các cột đã tạo có thể tiết kiệm thời gian khi viết truy vấn, giảm lỗi và cải thiện hiệu suất.

Các cột đã tạo có thể được sử dụng như một cách để đơn giản hóa và thống nhất các truy vấn. Một điều kiện phức tạp có thể được định nghĩa là một cột được tạo và sau đó được tham chiếu từ nhiều truy vấn trên bảng. Điều này giúp đảm bảo rằng tất cả chúng đều sử dụng chính xác cùng một điều kiện.

Các cột được tạo đã lưu trữ có thể được sử dụng làm bộ nhớ đệm cụ thể hóa cho các điều kiện phức tạp, tốn kém để tính toán nhanh.

Hạn chế của các cột đã tạo

Các cột đã tạo thường đi kèm với các hạn chế khi so sánh với các cột bình thường, mặc dù mức độ của các hạn chế có thể được xác định bởi DBMS.

Ví dụ:các cột được tạo thường chỉ có thể tính toán các giá trị từ các cột trong cùng một hàng. Tuy nhiên, hạn chế này có thể được khắc phục (ít nhất là trong SQL Server) bằng cách sử dụng hàm do người dùng xác định như một phần của biểu thức của cột được tính toán.

Xem các liên kết bên dưới để đọc thêm về việc triển khai các cột đã tạo trong các DBMS khác nhau.

Tài liệu chính thức

Dưới đây là tài liệu về một số DBMS phổ biến bao gồm các hạn chế trong việc triển khai các cột đã tạo của chúng:

  • Các cột được tính toán trong SQL Server
  • Các cột đã tạo trong PostgreSQL (Phiên bản 12)
  • Các cột đã tạo trong MySQL (Phiên bản 8.0)
  • Các cột đã tạo trong SQLite


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. onCreate () của RoomDatabase.Callback () không được gọi sau khi gọi thành công .build ()

  2. Cách sắp xếp theo ngày trong SQLite

  3. Chỉ truy vấn dữ liệu đầu tiên từ một bảng

  4. SQLite - Thả một bảng

  5. Android - cố gắng mở lại một đối tượng đã bị đóng:SQLiteQuery sử dụng loaderManager