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

Cách tạo một cột được tính toán trong SQLite

Hỗ trợ cột đã tạo đã được thêm vào SQLite trong phiên bản 3.31.0, được phát hành vào ngày 22 tháng 1 năm 2020.

Cột được tạo và cột được tính giống nhau. Chúng là các cột có giá trị là một hàm của các cột khác trong cùng một hàng.

Trong SQLite, các cột đã tạo được tạo bằng cách sử dụng GENERATED ALWAYS ràng buộc cột khi tạo hoặc thay đổi bảng.

Có hai loại cột được tạo; STOREDVIRTUAL . Chỉ VIRTUAL cột có thể được thêm vào khi thay đổi bảng. Cả hai loại đều có thể được thêm vào khi tạo bảng.

Ví dụ

Đây là một ví dụ để chứng minh.

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

Nếu bạn gặp lỗi sau:

Error: near "AS": syntax error

Rất có thể, bạn cần nâng cấp lên phiên bản SQLite mới hơn. Các cột đã tạo chỉ được giới thiệu trong SQLite 3.31.0.

Bây giờ, hãy chèn dữ liệu và chọn nó.

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      

Đây là một ví dụ đơn giản và bạn chắc chắn có thể sử dụng các biểu thức phức tạp hơn, chẳng hạn như các biểu thức sử dụng các hàm tích hợp sẵn.

Ảo so với Đã lưu trữ

Theo mặc định, cột được tính toán được tạo dưới dạng VIRTUAL cột.

Bạn cũng có tùy chọn tạo STORED cột.

Giá trị của VIRTUAL cột được tính khi đọc, trong khi giá trị của một STORED cột được tính khi hàng được viết.

Bạn có thể sử dụng rõ ràng VIRTUAL hoặc STORED trong định nghĩa cột của bạn để cho biết nó phải là cột nào. Nếu bạn bỏ qua điều này, thì nó sẽ là VIRTUAL .

Dưới đây là cách chúng tôi có thể thay đổi ví dụ trước để sử dụng STORED cột.

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

Bất kể đó có phải là STORED hay không cột hoặc VIRTUAL , việc nhập và chọn dữ liệu hoàn toàn giống nhau.

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      

Cập nhật dữ liệu trong một cột đã tạo

Bạn không thể cập nhật dữ liệu trực tiếp trong một cột được tính toán. Có nghĩa là, bạn không thể ghi trực tiếp vào chính cột được tính toán.

Để cập nhật dữ liệu của nó, bạn cần cập nhật dữ liệu trong các cột bên dưới được sử dụng trong biểu thức của cột được tính toán.

Dưới đây là ví dụ về cập nhật dữ liệu được sử dụng trong các ví dụ trước.

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ố lượng búa có sẵn xuống còn 5. Điều này đến lượt nó làm giảm tổng giá trị của búa trong kho và giá trị trong cột được tạo ( TotalValue ) giảm từ 99,99 xuống 49,95.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách sử dụng regexp trong sqlite

  2. SQLite JSON_VALID ()

  3. Tự động tăng giá trị 'id' khi chèn vào sqlite

  4. Tạo một bảng tạm thời trong SQLite

  5. Cách hoạt động của hàm Strftime () trong SQLite