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

Có thể chèn dữ liệu vào dạng xem MySQL không?

Nếu bạn đang sử dụng các phép nối bên trong và dạng xem của bạn chứa tất cả các cột trong bảng cơ sở, thì dạng xem của bạn có thể cập nhật được. Tuy nhiên, đối với chế độ xem có thể cập nhật nhiều bảng, hãy INSERT có thể hoạt động nếu nó chèn vào một bảng. Bạn có thể chia thao tác chèn của mình thành nhiều INSERT tuyên bố.

Bạn có thể muốn xem bài viết sau để biết thêm thông tin về chủ đề:

Hãy xem xét ví dụ sau:

CREATE TABLE table_a (id int, value int);
CREATE TABLE table_b (id int, ta_id int, value int);

INSERT INTO table_a VALUES (1, 10);
INSERT INTO table_a VALUES (2, 20);
INSERT INTO table_a VALUES (3, 30);

INSERT INTO table_b VALUES (1, 1, 100);
INSERT INTO table_b VALUES (2, 1, 200);
INSERT INTO table_b VALUES (3, 2, 300);
INSERT INTO table_b VALUES (4, 2, 400);

Bây giờ, hãy tạo một dạng xem:

CREATE VIEW v AS 
    SELECT      a.id a_id, b.id b_id, b.ta_id, a.value v1, b.value v2
    FROM        table_a a
    INNER JOIN  table_b b ON (b.ta_id = a.id);

SELECT * FROM v;
+------+------+-------+------+------+
| a_id | b_id | ta_id | v1   | v2   |
+------+------+-------+------+------+
|    1 |    1 |     1 |   10 |  100 |
|    1 |    2 |     1 |   10 |  200 |
|    2 |    3 |     2 |   20 |  300 |
|    2 |    4 |     2 |   20 |  400 |
+------+------+-------+------+------+
4 rows in set (0.00 sec)

INSERT sau không thành công:

INSERT INTO v (a_id, b_id, ta_id, v1, v2) VALUES (3, 5, 3, 30, 500);
-- ERROR 1393 (HY000): Can not modify more than one base table through a join view 

Nhưng chúng ta có thể chia nó thành hai hoạt động:

INSERT INTO v (a_id, v1) VALUES (3, 30);
-- Query OK, 1 row affected (0.00 sec)
INSERT INTO v (b_id, ta_id, v2) VALUES (5, 3, 500);
-- Query OK, 1 row affected (0.00 sec)

Kết quả:

SELECT * FROM v;
+------+------+-------+------+------+
| a_id | b_id | ta_id | v1   | v2   |
+------+------+-------+------+------+
|    1 |    1 |     1 |   10 |  100 |
|    1 |    2 |     1 |   10 |  200 |
|    2 |    3 |     2 |   20 |  300 |
|    2 |    4 |     2 |   20 |  400 |
|    3 |    5 |     3 |   30 |  500 |
+------+------+-------+------+------+
6 rows in set (0.00 sec)



  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 đặt sql-mode =NO_ENGINE_SUBSTITUTION vĩnh viễn trong MySQL my.cnf

  2. Nhiều bảng hoặc hàng, cái nào hiệu quả hơn trong SQL?

  3. Kết hợp bất hợp pháp các đối chiếu trong mySQL

  4. Ví dụ MONTHNAME () - MySQL

  5. Độ chậm được tìm thấy khi hình ảnh cơ sở 64 chọn và mã hóa từ cơ sở dữ liệu