Khóa ngoại là sự liên kết logic của các hàng giữa hai bảng, trong mối quan hệ cha-con. Một hàng trong bảng "cha" có thể được tham chiếu bởi một hoặc nhiều hàng trong bảng "con". Khóa ngoại thường gợi ý cách bạn nên
CREATE TABLE parent_table [
id INT NOT NULL,
PRIMARY KEY [id]
];
CREATE TABLE child_table [
id INT NOT NULL,
parent_id INT,
PRIMARY KEY [id],
KEY parent_id_idx [parent_id]
];
4 bảng trong hầu hết các truy vấn. Một bảng cũng có thể tham chiếu đến chính nó, như một trường hợp đặc biệtRàng buộc
CREATE TABLE parent_table [
id INT NOT NULL,
PRIMARY KEY [id]
];
CREATE TABLE child_table [
id INT NOT NULL,
parent_id INT,
PRIMARY KEY [id],
KEY parent_id_idx [parent_id]
];
5 là một cấu trúc cơ sở dữ liệu, một triển khai buộc tính toàn vẹn của mối quan hệ khóa ngoại [tính toàn vẹn tham chiếu]. Cụ thể, nó đảm bảo rằng một bảng con chỉ có thể tham chiếu đến một bảng cha khi tồn tại hàng thích hợp trong bảng cha. Một ràng buộc cũng ngăn chặn sự tồn tại của "các hàng mồ côi" trong các phương thức khác nhau, như bạn sẽ sớm thấy được mô tảPlanetScale không hỗ trợ ràng buộc
CREATE TABLE parent_table [
id INT NOT NULL,
PRIMARY KEY [id]
];
CREATE TABLE child_table [
id INT NOT NULL,
parent_id INT,
PRIMARY KEY [id],
KEY parent_id_idx [parent_id]
];
5Bạn được khuyến khích sử dụng mô hình quan hệ và liên kết các bảng bằng cách "chỉ" các hàng từ bảng này sang bảng khác. Đó chỉ là việc thực thi ở cấp cơ sở dữ liệu, định nghĩa
CREATE TABLE parent_table [
id INT NOT NULL,
PRIMARY KEY [id]
];
CREATE TABLE child_table [
id INT NOT NULL,
parent_id INT,
PRIMARY KEY [id],
KEY parent_id_idx [parent_id]
];
7, không được phép trong lược đồ của bạnChúng ta sẽ sớm trình bày một ví dụ về sơ đồ trông như thế nào để sự khác biệt nhỏ này trở nên rõ ràng.
Có hai lý do kỹ thuật chính khiến các ràng buộc khóa ngoại không được hỗ trợ
- Cách các ràng buộc
5 được triển khai trong MySQL [hay đúng hơn là trong công cụ lưu trữ InnoDB] can thiệp vào các hoạt động DDL trực tuyến. Tìm hiểu thêm trong bài đăng trên blog Vitess nàyCREATE TABLE parent_table [ id INT NOT NULL, PRIMARY KEY [id] ]; CREATE TABLE child_table [ id INT NOT NULL, parent_id INT, PRIMARY KEY [id], KEY parent_id_idx [parent_id] ];
- Giới hạn trong phạm vi máy chủ MySQL duy nhất, không thể duy trì các ràng buộc
5 khi dữ liệu của bạn tăng lên và được phân chia trên nhiều máy chủ cơ sở dữ liệu. Điều này thường xảy ra khi bạn giới thiệu phân vùng/phân đoạn chức năng và/hoặc phân đoạn ngangCREATE TABLE parent_table [ id INT NOT NULL, PRIMARY KEY [id] ]; CREATE TABLE child_table [ id INT NOT NULL, parent_id INT, PRIMARY KEY [id], KEY parent_id_idx [parent_id] ];
Chúng tôi tin rằng các ưu điểm của DDL trực tuyến như phân nhánh, triển khai và thay đổi lược đồ do nhà phát triển sở hữu, thay đổi lược đồ không chặn, v.v. và lợi ích của sharding như một phương tiện mở rộng quy mô không giới hạn, vượt trội hơn lợi ích ràng buộc của
CREATE TABLE parent_table [
id INT NOT NULL,
PRIMARY KEY [id]
];
CREATE TABLE child_table [
id INT NOT NULL,
parent_id INT,
PRIMARY KEY [id],
KEY parent_id_idx [parent_id]
];
5Nói cách khác, nếu bạn thực thi tính toàn vẹn tham chiếu ở cấp ứng dụng thay vì ở cấp cơ sở dữ liệu, bạn sẽ mở ra cơ hội cho tất cả những lợi ích đó
Ghi chú
Bạn vẫn có thể nghĩ về các mối quan hệ khóa ngoại; . Bạn có thể cấu trúc các bảng của mình theo cùng một cách chính xác mà không có các ràng buộc FOREIGN KEY như khi bạn thực hiện với các ràng buộc. Đó chỉ là cách các mối quan hệ này được thực thi thay đổi
Để hiểu cách làm việc mà không có ràng buộc khóa ngoại, trước tiên chúng ta phải hiểu chức năng của khóa ngoại
Xem xét mối quan hệ bảng cha-con tầm thường sau đây
SQL
Đã sao chép
CREATE TABLE parent_table [
id INT NOT NULL,
PRIMARY KEY [id]
];
CREATE TABLE child_table [
id INT NOT NULL,
parent_id INT,
PRIMARY KEY [id],
KEY parent_id_idx [parent_id],
CONSTRAINT `child_parent_fk` FOREIGN KEY [parent_id] REFERENCES parent_table[id] ON DELETE NO ACTION
];
Mẹo
Trong MySQL, các khóa ngoại chỉ được triển khai bởi lớp công cụ lưu trữ, cụ thể là công cụ InnoDB mặc định và phổ biến. Ràng buộc FOREIGN KEY không phải là một thực thể riêng biệt. Nó nằm trong không gian bảng của đứa trẻ
Có sẵn ràng buộc
CREATE TABLE parent_table [
id INT NOT NULL,
PRIMARY KEY [id]
];
CREATE TABLE child_table [
id INT NOT NULL,
parent_id INT,
PRIMARY KEY [id],
KEY parent_id_idx [parent_id]
];
5 để xóa hàng [CREATE TABLE parent_table [
id INT NOT NULL,
PRIMARY KEY [id]
];
CREATE TABLE child_table [
id INT NOT NULL,
parent_id INT,
PRIMARY KEY [id],
KEY parent_id_idx [parent_id]
];
1] và cập nhật hàng [CREATE TABLE parent_table [
id INT NOT NULL,
PRIMARY KEY [id]
];
CREATE TABLE child_table [
id INT NOT NULL,
parent_id INT,
PRIMARY KEY [id],
KEY parent_id_idx [parent_id]
];
2]. Trong tài liệu này, chúng tôi thảo luận về CREATE TABLE parent_table [
id INT NOT NULL,
PRIMARY KEY [id]
];
CREATE TABLE child_table [
id INT NOT NULL,
parent_id INT,
PRIMARY KEY [id],
KEY parent_id_idx [parent_id]
];
1 vì nó có tác động mạnh hơn trong hai. Cuộc thảo luận cũng liên quan đến các ràng buộc của CREATE TABLE parent_table [
id INT NOT NULL,
PRIMARY KEY [id]
];
CREATE TABLE child_table [
id INT NOT NULL,
parent_id INT,
PRIMARY KEY [id],
KEY parent_id_idx [parent_id]
];
2Khóa ngoại hỗ trợ thêm ba loại hành động [được minh họa bên dưới cho
CREATE TABLE parent_table [
id INT NOT NULL,
PRIMARY KEY [id]
];
CREATE TABLE child_table [
id INT NOT NULL,
parent_id INT,
PRIMARY KEY [id],
KEY parent_id_idx [parent_id]
];
1]Đây là loại hành động tham lam, hoặc tham vọng nhất. Nếu bạn
CREATE TABLE parent_table [
id INT NOT NULL,
PRIMARY KEY [id]
];
CREATE TABLE child_table [
id INT NOT NULL,
parent_id INT,
PRIMARY KEY [id],
KEY parent_id_idx [parent_id]
];
7 một hàng từ bảng cha, mọi hàng tham chiếu trong bảng con sau đó sẽ bị xóa trong cùng một giao dịch. Hoạt động này chạy đệ quy cho tất cả con cái của cha mẹ, cũng như cho con cái của họ, nếu họ cũng sử dụng CREATE TABLE parent_table [
id INT NOT NULL,
PRIMARY KEY [id]
];
CREATE TABLE child_table [
id INT NOT NULL,
parent_id INT,
PRIMARY KEY [id],
KEY parent_id_idx [parent_id]
];
6CREATE TABLE parent_table [
id INT NOT NULL,
PRIMARY KEY [id]
];
CREATE TABLE child_table [
id INT NOT NULL,
parent_id INT,
PRIMARY KEY [id],
KEY parent_id_idx [parent_id]
];
6 là một hành động rủi ro và tiêu tốn tài nguyên. Bạn định CREATE TABLE parent_table [
id INT NOT NULL,
PRIMARY KEY [id]
];
CREATE TABLE child_table [
id INT NOT NULL,
parent_id INT,
PRIMARY KEY [id],
KEY parent_id_idx [parent_id]
];
7 một hàng, nhưng cuối cùng lại xóa hàng trăm, hàng nghìn hoặc nhiều hàng trong nhiều bảng. Những gì có vẻ giống như một giao dịch đơn giản giờ đây biến thành một hoạt động lớn, liên quan đến việc khóa quá mức, tăng chi phí MVCC, ảnh hưởng đến độ trễ sao chép, v.v.Nhưng có lẽ mối nguy hiểm lớn nhất là khả năng mất dữ liệu bất ngờ. Liệu một nhà phát triển không nghi ngờ có đơn giản cho rằng một
CREATE TABLE parent_table [
id INT NOT NULL,
PRIMARY KEY [id]
];
CREATE TABLE child_table [
id INT NOT NULL,
parent_id INT,
PRIMARY KEY [id],
KEY parent_id_idx [parent_id]
];
01 sẽ xóa tối đa một hàng hay không, dẫn đến hành vi đáng ngạc nhiên, chẳng hạn như trong các truy vấn CREATE TABLE parent_table [
id INT NOT NULL,
PRIMARY KEY [id]
];
CREATE TABLE child_table [
id INT NOT NULL,
parent_id INT,
PRIMARY KEY [id],
KEY parent_id_idx [parent_id]
];
02, thực sự chạy một CREATE TABLE parent_table [
id INT NOT NULL,
PRIMARY KEY [id]
];
CREATE TABLE child_table [
id INT NOT NULL,
parent_id INT,
PRIMARY KEY [id],
KEY parent_id_idx [parent_id]
];
7 ngầm, dẫn đến việc phá hủy hàng loạt dữ liệuViệc sử dụng
CREATE TABLE parent_table [
id INT NOT NULL,
PRIMARY KEY [id]
];
CREATE TABLE child_table [
id INT NOT NULL,
parent_id INT,
PRIMARY KEY [id],
KEY parent_id_idx [parent_id]
];
6 đang gây tranh cãi. Sử dụng nó một cách cẩn thận. Cân nhắc sử dụng CREATE TABLE parent_table [
id INT NOT NULL,
PRIMARY KEY [id]
];
CREATE TABLE child_table [
id INT NOT NULL,
parent_id INT,
PRIMARY KEY [id],
KEY parent_id_idx [parent_id]
];
05 để thay thếVới thiết lập này, một
CREATE TABLE parent_table [
id INT NOT NULL,
PRIMARY KEY [id]
];
CREATE TABLE child_table [
id INT NOT NULL,
parent_id INT,
PRIMARY KEY [id],
KEY parent_id_idx [parent_id]
];
7 trên cha mẹ [e. g. CREATE TABLE parent_table [
id INT NOT NULL,
PRIMARY KEY [id]
];
CREATE TABLE child_table [
id INT NOT NULL,
parent_id INT,
PRIMARY KEY [id],
KEY parent_id_idx [parent_id]
];
01] sẽ đặt cột tham chiếu cho trẻ em [e. g. CREATE TABLE parent_table [
id INT NOT NULL,
PRIMARY KEY [id]
];
CREATE TABLE child_table [
id INT NOT NULL,
parent_id INT,
PRIMARY KEY [id],
KEY parent_id_idx [parent_id]
];
09 cột trong CREATE TABLE parent_table [
id INT NOT NULL,
PRIMARY KEY [id]
];
CREATE TABLE child_table [
id INT NOT NULL,
parent_id INT,
PRIMARY KEY [id],
KEY parent_id_idx [parent_id]
];
40] đến CREATE TABLE parent_table [
id INT NOT NULL,
PRIMARY KEY [id]
];
CREATE TABLE child_table [
id INT NOT NULL,
parent_id INT,
PRIMARY KEY [id],
KEY parent_id_idx [parent_id]
];
41 cho các hàng phù hợp. Nó thực sự dẫn đến các hàng mồ côi, không khác lắm so với việc không có ràng buộc khóa ngoại nào cảMột lợi thế là dễ dàng xác định các hàng mồ côi. những hàng đó và chỉ những hàng đó sẽ có
CREATE TABLE parent_table [
id INT NOT NULL,
PRIMARY KEY [id]
];
CREATE TABLE child_table [
id INT NOT NULL,
parent_id INT,
PRIMARY KEY [id],
KEY parent_id_idx [parent_id]
];
41 cho các cột tham chiếu gốcGiống như
CREATE TABLE parent_table [
id INT NOT NULL,
PRIMARY KEY [id]
];
CREATE TABLE child_table [
id INT NOT NULL,
parent_id INT,
PRIMARY KEY [id],
KEY parent_id_idx [parent_id]
];
43, việc xóa một hàng trên bảng mẹ có thể dẫn đến nhiều hàng được cập nhật trên các bảng con. Điều này một lần nữa có thể gây ra các giao dịch lớn, khóa quá mức và độ trễ sao chépCó thể là tính năng quan trọng nhất của khóa ngoại, một
CREATE TABLE parent_table [
id INT NOT NULL,
PRIMARY KEY [id]
];
CREATE TABLE child_table [
id INT NOT NULL,
parent_id INT,
PRIMARY KEY [id],
KEY parent_id_idx [parent_id]
];
7 trên khóa gốc sẽ không thành công nếu các hàng con tồn tại tham chiếu đến hàng của cha mẹ. Để CREATE TABLE parent_table [
id INT NOT NULL,
PRIMARY KEY [id]
];
CREATE TABLE child_table [
id INT NOT NULL,
parent_id INT,
PRIMARY KEY [id],
KEY parent_id_idx [parent_id]
];
7 hàng từ cấp độ gốc, ứng dụng/người dùng trước tiên phải CREATE TABLE parent_table [
id INT NOT NULL,
PRIMARY KEY [id]
];
CREATE TABLE child_table [
id INT NOT NULL,
parent_id INT,
PRIMARY KEY [id],
KEY parent_id_idx [parent_id]
];
7 hàng tham chiếu từ tất cả cấp độ con. Theo cách đệ quy, nếu các bảng đó được tham chiếu thêm bởi các bảng khác, thì ứng dụng/người dùng trước tiên phải CREATE TABLE parent_table [
id INT NOT NULL,
PRIMARY KEY [id]
];
CREATE TABLE child_table [
id INT NOT NULL,
parent_id INT,
PRIMARY KEY [id],
KEY parent_id_idx [parent_id]
];
7 hàng từ các cháu, v.v.Loại hành động này [hoặc thiếu loại hành động này] buộc ứng dụng phải có quyền sở hữu mạnh mẽ hơn đối với dữ liệu của mình. Một ứng dụng được viết để hoạt động với
CREATE TABLE parent_table [
id INT NOT NULL,
PRIMARY KEY [id]
];
CREATE TABLE child_table [
id INT NOT NULL,
parent_id INT,
PRIMARY KEY [id],
KEY parent_id_idx [parent_id]
];
44 sẽ phát triển một cách hữu cơ khi biết bảng nào tham chiếu đến bảng nào khác và sẽ thiết lập các luồng CREATE TABLE parent_table [
id INT NOT NULL,
PRIMARY KEY [id]
];
CREATE TABLE child_table [
id INT NOT NULL,
parent_id INT,
PRIMARY KEY [id],
KEY parent_id_idx [parent_id]
];
7/CREATE TABLE parent_table [
id INT NOT NULL,
PRIMARY KEY [id]
];
CREATE TABLE child_table [
id INT NOT NULL,
parent_id INT,
PRIMARY KEY [id],
KEY parent_id_idx [parent_id]
];
51 lặp qua các bảng theo đúng thứ tự để đáp ứng tính toàn vẹn tham chiếuLược đồ trên sẽ trông giống hệt nhau, trừ đi mệnh đề
CREATE TABLE parent_table [
id INT NOT NULL,
PRIMARY KEY [id]
];
CREATE TABLE child_table [
id INT NOT NULL,
parent_id INT,
PRIMARY KEY [id],
KEY parent_id_idx [parent_id]
];
52SQL
Đã sao chép
CREATE TABLE parent_table [
id INT NOT NULL,
PRIMARY KEY [id]
];
CREATE TABLE child_table [
id INT NOT NULL,
parent_id INT,
PRIMARY KEY [id],
KEY parent_id_idx [parent_id]
];
Mẹo
Mỗi ràng buộc FOREIGN KEY yêu cầu một chỉ mục bao gồm [các] cột được tham chiếu ở cả hai phía của kết nối. Chỉ mục parentid_idx được ràng buộc _required. Chúng tôi có thể thả khóa đó vào bảng không ràng buộc của mình, tùy thuộc vào loại truy vấn mà chúng tôi có thể sử dụng để truy xuất dữ liệu từ các bảng
Xem xét lại hành vi của ứng dụng trong thiết lập
CREATE TABLE parent_table [
id INT NOT NULL,
PRIMARY KEY [id]
];
CREATE TABLE child_table [
id INT NOT NULL,
parent_id INT,
PRIMARY KEY [id],
KEY parent_id_idx [parent_id]
];
44. ứng dụng biết các thành phần phụ thuộc của bảng, xử lý thứ tự lặp cho CREATE TABLE parent_table [
id INT NOT NULL,
PRIMARY KEY [id]
];
CREATE TABLE child_table [
id INT NOT NULL,
parent_id INT,
PRIMARY KEY [id],
KEY parent_id_idx [parent_id]
];
7/CREATE TABLE parent_table [
id INT NOT NULL,
PRIMARY KEY [id]
];
CREATE TABLE child_table [
id INT NOT NULL,
parent_id INT,
PRIMARY KEY [id],
KEY parent_id_idx [parent_id]
];
51. Nó làm mọi thứ đúngĐiều gì xảy ra nếu chúng tôi loại bỏ
CREATE TABLE parent_table [
id INT NOT NULL,
PRIMARY KEY [id]
];
CREATE TABLE child_table [
id INT NOT NULL,
parent_id INT,
PRIMARY KEY [id],
KEY parent_id_idx [parent_id]
];
52 vào thời điểm này?Ứng dụng không thay đổi. Nó đã chạy các hành động phù hợp theo đúng thứ tự. Thao tác ứng dụng kết thúc việc chạy
CREATE TABLE parent_table [
id INT NOT NULL,
PRIMARY KEY [id]
];
CREATE TABLE child_table [
id INT NOT NULL,
parent_id INT,
PRIMARY KEY [id],
KEY parent_id_idx [parent_id]
];
01 thành công với thao tác ứng dụng mà CREATE TABLE parent_table [
id INT NOT NULL,
PRIMARY KEY [id]
];
CREATE TABLE child_table [
id INT NOT NULL,
parent_id INT,
PRIMARY KEY [id],
KEY parent_id_idx [parent_id]
];
7 [các] bảng con. Mặc dù chúng tôi mất sự đảm bảo an toàn của cơ sở dữ liệu khi thực thi hành vi này, nhưng chúng tôi hoàn toàn có khả năng tự quản lý nóTương tự như vậy, một ứng dụng phát triển với lược đồ không ràng buộc sẽ tự học cách xử lý các tình huống
CREATE TABLE parent_table [
id INT NOT NULL,
PRIMARY KEY [id]
];
CREATE TABLE child_table [
id INT NOT NULL,
parent_id INT,
PRIMARY KEY [id],
KEY parent_id_idx [parent_id]
];
7 và CREATE TABLE parent_table [
id INT NOT NULL,
PRIMARY KEY [id]
];
CREATE TABLE child_table [
id INT NOT NULL,
parent_id INT,
PRIMARY KEY [id],
KEY parent_id_idx [parent_id]
];
51. Trên thực tế, nó được trao thêm một số quyền tự do vì thứ tự hoạt động không được thi hành. Đây là một lợi thế vì ứng dụng không bị buộc phải CREATE TABLE parent_table [
id INT NOT NULL,
PRIMARY KEY [id]
];
CREATE TABLE child_table [
id INT NOT NULL,
parent_id INT,
PRIMARY KEY [id],
KEY parent_id_idx [parent_id]
];
7 nghìn hàng phụ thuộc cho mỗi lần xóa hàng gốc trong cùng một giao dịch. Ứng dụng cũng có thể trì hoãn việc xóa khi chúng ta thảo luận ngay sau đâyToàn vẹn tham chiếu chỉ là một trong nhiều ràng buộc toàn vẹn dữ liệu logic. Nó chỉ tình cờ là một cơ sở dữ liệu có thể thực thi. Bất kỳ ứng dụng lớn nào cũng sẽ duy trì tính toàn vẹn của dữ liệu với các quy tắc mà cơ sở dữ liệu không biết
Xem xét một ràng buộc
CREATE TABLE parent_table [
id INT NOT NULL,
PRIMARY KEY [id]
];
CREATE TABLE child_table [
id INT NOT NULL,
parent_id INT,
PRIMARY KEY [id],
KEY parent_id_idx [parent_id]
];
06. Điều gì xảy ra với các hàng con được đặt thành CREATE TABLE parent_table [
id INT NOT NULL,
PRIMARY KEY [id]
];
CREATE TABLE child_table [
id INT NOT NULL,
parent_id INT,
PRIMARY KEY [id],
KEY parent_id_idx [parent_id]
];
41? . Ví dụ, một truy vấn có thể CREATE TABLE parent_table [
id INT NOT NULL,
PRIMARY KEY [id]
];
CREATE TABLE child_table [
id INT NOT NULL,
parent_id INT,
PRIMARY KEY [id],
KEY parent_id_idx [parent_id]
];
54 hàng CREATE TABLE parent_table [
id INT NOT NULL,
PRIMARY KEY [id]
];
CREATE TABLE child_table [
id INT NOT NULL,
parent_id INT,
PRIMARY KEY [id],
KEY parent_id_idx [parent_id]
];
55. Tốt hơn nữa, các hàng con thường được CREATE TABLE parent_table [
id INT NOT NULL,
PRIMARY KEY [id]
];
CREATE TABLE child_table [
id INT NOT NULL,
parent_id INT,
PRIMARY KEY [id],
KEY parent_id_idx [parent_id]
];
4ed với các hàng cha tương ứng của chúng. Bất kỳ truy vấn nào chạy một CREATE TABLE parent_table [
id INT NOT NULL,
PRIMARY KEY [id]
];
CREATE TABLE child_table [
id INT NOT NULL,
parent_id INT,
PRIMARY KEY [id],
KEY parent_id_idx [parent_id]
];
4 như vậy sẽ trả về trống vì hàng chính không tồn tạiCuối cùng, những hàng đó sẽ chồng chất và bạn sẽ muốn lấy lại không gian
Nếu không có ràng buộc
CREATE TABLE parent_table [
id INT NOT NULL,
PRIMARY KEY [id]
];
CREATE TABLE child_table [
id INT NOT NULL,
parent_id INT,
PRIMARY KEY [id],
KEY parent_id_idx [parent_id]
];
5, tình huống sẽ rất giống nhau, Có thể CREATE TABLE parent_table [
id INT NOT NULL,
PRIMARY KEY [id]
];
CREATE TABLE child_table [
id INT NOT NULL,
parent_id INT,
PRIMARY KEY [id],
KEY parent_id_idx [parent_id]
];
7 hàng cha mà không xóa các hàng con phụ thuộc của nó. Một hàng con CREATE TABLE parent_table [
id INT NOT NULL,
PRIMARY KEY [id]
];
CREATE TABLE child_table [
id INT NOT NULL,
parent_id INT,
PRIMARY KEY [id],
KEY parent_id_idx [parent_id]
];
4ed với một hàng cha [đã xóa] tương ứng sẽ trống. Không có CREATE TABLE parent_table [
id INT NOT NULL,
PRIMARY KEY [id]
];
CREATE TABLE child_table [
id INT NOT NULL,
parent_id INT,
PRIMARY KEY [id],
KEY parent_id_idx [parent_id]
];
71 để giúp bạn, nhưng việc xác định những hàng đó vẫn còn tầm thường. Tương tự như vậy, có rất ít hoặc không có thiệt hại nào trong việc giữ những hàng đó trong một thời gian.Và tương tự, những hàng đó cuối cùng chồng chất
Một thực tế phổ biến, khi thích hợp, là
CREATE TABLE parent_table [
id INT NOT NULL,
PRIMARY KEY [id]
];
CREATE TABLE child_table [
id INT NOT NULL,
parent_id INT,
PRIMARY KEY [id],
KEY parent_id_idx [parent_id]
];
7 hàng trên bảng cha hoặc cũng có thể trên một tập hợp con của bảng con, nhưng để lại một số bảng khác để xử lý hàng loạt ngoại tuyếnVào một số thời điểm thuận tiện, chẳng hạn như giờ có lưu lượng truy cập thấp, ứng dụng hoặc một số công việc hàng loạt sẽ xóa các hàng mồ côi. Hãy xem xét truy vấn đơn giản hóa này
SQL
Đã sao chép
CREATE TABLE parent_table [
id INT NOT NULL,
PRIMARY KEY [id]
];
CREATE TABLE child_table [
id INT NOT NULL,
parent_id INT,
PRIMARY KEY [id],
KEY parent_id_idx [parent_id]
];
0Một
CREATE TABLE parent_table [
id INT NOT NULL,
PRIMARY KEY [id]
];
CREATE TABLE child_table [
id INT NOT NULL,
parent_id INT,
PRIMARY KEY [id],
KEY parent_id_idx [parent_id]
];
7 duy nhất có khả năng là một hoạt động lớn, cần tránh. Một cách thực hành tốt là chia câu lệnh thành nhiều câu lệnh có phạm vi nhỏ, chẳng hạn như. g. xóa CREATE TABLE parent_table [
id INT NOT NULL,
PRIMARY KEY [id]
];
CREATE TABLE child_table [
id INT NOT NULL,
parent_id INT,
PRIMARY KEY [id],
KEY parent_id_idx [parent_id]
];
74 hàng cùng một lúc