Bảng MySQL SHOW CREATE khóa ngoại
Bạn có một bảng và bạn muốn xem tất cả các bảng khác có ràng buộc khóa ngoại trỏ đến bảng đó hoặc đến một cột cụ thể trong bảng đó Show Để xem các mối quan hệ khóa ngoại của một bảng
Để xem các mối quan hệ khóa ngoại của một cột
Bạn có thể không cần giải quyết Cần một Công cụ GUI tốt cho MySQL? . Khóa ngoại là một ràng buộc có thể được sử dụng để thực thi tính toàn vẹn của dữ liệu. Nó được tạo bởi một cột (hoặc một tập hợp các cột) trong một bảng được gọi là bảng con, tham chiếu đến một cột (hoặc một tập hợp các cột) trong một bảng được gọi là bảng cha. Nếu khóa ngoại được sử dụng, MariaDB sẽ thực hiện một số kiểm tra để đảm bảo rằng một số quy tắc toàn vẹn luôn được thực thi. Để có giải thích đầy đủ hơn, hãy xem Cơ sở dữ liệu quan hệ. Khóa ngoại Khóa ngoại chỉ có thể được sử dụng với các công cụ lưu trữ hỗ trợ chúng. InnoDB mặc định và PBXT lỗi thời hỗ trợ khóa ngoại Các bảng được phân vùng không thể chứa khóa ngoại và không thể được tham chiếu bằng khóa ngoại cú phápGhi chú. Cho đến khi MariaDB 10. 4, MariaDB chấp nhận định dạng lối tắt với mệnh đề REFERENCES chỉ trong các câu lệnh ALTER TABLE và CREATE TABLE, nhưng cú pháp đó không có tác dụng gì. Ví dụ CREATE TABLE b(for_key INT REFERENCES a(not_key)); MariaDB chỉ cần phân tích cú pháp mà không trả lại bất kỳ lỗi hoặc cảnh báo nào, để tương thích với các DBMS khác. Tuy nhiên, chỉ cú pháp được mô tả bên dưới mới tạo khóa ngoại Từ MariaDB 10. 5, MariaDB sẽ cố gắng áp dụng ràng buộc. Xem bên dưới Khóa ngoại được tạo bằng CREATE TABLE hoặc ALTER TABLE. Định nghĩa phải tuân theo cú pháp này [CONSTRAINT [symbol]] FOREIGN KEY [index_name] (index_col_name, ...) REFERENCES tbl_name (index_col_name,...) [ON DELETE reference_option] [ON UPDATE reference_option] reference_option: RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT Mệnh đề Các cột trong bảng con phải là chỉ mục BTREE (không phải HASH, RTREE hoặc FULLTEXT — xem SHOW INDEX) hoặc phần ngoài cùng bên trái của chỉ mục BTREE. Tiền tố chỉ mục không được hỗ trợ (do đó, không thể sử dụng các cột TEXT và BLOB làm khóa ngoại). Nếu MariaDB tự động tạo một chỉ mục cho khóa ngoại (vì nó không tồn tại và không được tạo rõ ràng), tên của nó sẽ là [CONSTRAINT [symbol]] FOREIGN KEY [index_name] (index_col_name, ...) REFERENCES tbl_name (index_col_name,...) [ON DELETE reference_option] [ON UPDATE reference_option] reference_option: RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT0 Các cột được tham chiếu trong bảng cha phải là một chỉ mục hoặc tiền tố của một chỉ mục Các cột khóa ngoại và các cột được tham chiếu phải cùng loại hoặc các loại tương tự. Đối với kiểu số nguyên thì kích thước và dấu cũng phải giống nhau Cả cột khóa ngoại và cột được tham chiếu đều có thể là cột LIÊN TỤC. Tuy nhiên, các mệnh đề ON UPDATE CASCADE, ON UPDATE SET NULL, ON DELETE SET NULL không được phép trong trường hợp này Bảng cha và bảng con phải sử dụng cùng một công cụ lưu trữ và không được [CONSTRAINT [symbol]] FOREIGN KEY [index_name] (index_col_name, ...) REFERENCES tbl_name (index_col_name,...) [ON DELETE reference_option] [ON UPDATE reference_option] reference_option: RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT1 hoặc các bảng được phân vùng. Họ có thể là cùng một bảng Hạn chếNếu có khóa ngoại, mỗi hàng trong bảng con phải khớp với một hàng trong bảng cha. Nhiều hàng con có thể khớp với cùng một hàng cha. Hàng con khớp với hàng cha nếu tất cả các giá trị khóa ngoại của nó giống hệt với giá trị của hàng cha trong bảng cha. Tuy nhiên, nếu ít nhất một trong các giá trị khóa ngoại là [CONSTRAINT [symbol]] FOREIGN KEY [index_name] (index_col_name, ...) REFERENCES tbl_name (index_col_name,...) [ON DELETE reference_option] [ON UPDATE reference_option] reference_option: RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT2, thì hàng không có cha nhưng vẫn được phép MariaDB thực hiện một số kiểm tra nhất định để đảm bảo rằng tính toàn vẹn của dữ liệu được thực thi
Các hành động được phép cho [CONSTRAINT [symbol]] FOREIGN KEY [index_name] (index_col_name, ...) REFERENCES tbl_name (index_col_name,...) [ON DELETE reference_option] [ON UPDATE reference_option] reference_option: RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT3 và [CONSTRAINT [symbol]] FOREIGN KEY [index_name] (index_col_name, ...) REFERENCES tbl_name (index_col_name,...) [ON DELETE reference_option] [ON UPDATE reference_option] reference_option: RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT4 là
Thao tác xóa hoặc cập nhật được kích hoạt bởi khóa ngoại không kích hoạt trình kích hoạt và không được tính trong biến trạng thái và Các ràng buộc khóa ngoại có thể bị vô hiệu hóa bằng cách đặt biến hệ thống máy chủ thành 0. Điều này tăng tốc độ chèn một lượng lớn dữ liệu Bảng Information Schema CREATE TABLE author ( id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, name VARCHAR(100) NOT NULL ) ENGINE = InnoDB; CREATE TABLE book ( id MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, title VARCHAR(200) NOT NULL, author_id SMALLINT UNSIGNED NOT NULL, CONSTRAINT `fk_book_author` FOREIGN KEY (author_id) REFERENCES author (id) ON DELETE CASCADE ON UPDATE RESTRICT ) ENGINE = InnoDB;7 chứa thông tin về khóa ngoại. Các cột riêng lẻ được liệt kê trong bảng CREATE TABLE author ( id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, name VARCHAR(100) NOT NULL ) ENGINE = InnoDB; CREATE TABLE book ( id MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, title VARCHAR(200) NOT NULL, author_id SMALLINT UNSIGNED NOT NULL, CONSTRAINT `fk_book_author` FOREIGN KEY (author_id) REFERENCES author (id) ON DELETE CASCADE ON UPDATE RESTRICT ) ENGINE = InnoDB;8 Các bảng Lược đồ thông tin dành riêng cho InnoDB cũng chứa thông tin về các khóa ngoại của InnoDB. Thông tin khóa ngoại được lưu trữ trong CREATE TABLE author ( id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, name VARCHAR(100) NOT NULL ) ENGINE = InnoDB; CREATE TABLE book ( id MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, title VARCHAR(200) NOT NULL, author_id SMALLINT UNSIGNED NOT NULL, CONSTRAINT `fk_book_author` FOREIGN KEY (author_id) REFERENCES author (id) ON DELETE CASCADE ON UPDATE RESTRICT ) ENGINE = InnoDB;9. Dữ liệu về các cột riêng lẻ được lưu trữ trong INSERT INTO book (title, author_id) VALUES ('Necronomicon', 1); ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`test`.`book`, CONSTRAINT `fk_book_author` FOREIGN KEY (`author_id`) REFERENCES `author` (`id`) ON DELETE CASCADE)0 Cách dễ đọc nhất để lấy thông tin về khóa ngoại của bảng đôi khi là câu lệnh INSERT INTO book (title, author_id) VALUES ('Necronomicon', 1); ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`test`.`book`, CONSTRAINT `fk_book_author` FOREIGN KEY (`author_id`) REFERENCES `author` (`id`) ON DELETE CASCADE)1 Hạn chếKhóa ngoại có các giới hạn sau trong MariaDB
ví dụHãy xem một ví dụ. Chúng ta sẽ tạo một bảng INSERT INTO book (title, author_id) VALUES ('Necronomicon', 1); ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`test`.`book`, CONSTRAINT `fk_book_author` FOREIGN KEY (`author_id`) REFERENCES `author` (`id`) ON DELETE CASCADE)3 và một bảng INSERT INTO book (title, author_id) VALUES ('Necronomicon', 1); ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`test`.`book`, CONSTRAINT `fk_book_author` FOREIGN KEY (`author_id`) REFERENCES `author` (`id`) ON DELETE CASCADE)4. Cả hai bảng đều có khóa chính được gọi là INSERT INTO book (title, author_id) VALUES ('Necronomicon', 1); ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`test`.`book`, CONSTRAINT `fk_book_author` FOREIGN KEY (`author_id`) REFERENCES `author` (`id`) ON DELETE CASCADE)5. INSERT INTO book (title, author_id) VALUES ('Necronomicon', 1); ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`test`.`book`, CONSTRAINT `fk_book_author` FOREIGN KEY (`author_id`) REFERENCES `author` (`id`) ON DELETE CASCADE)4 cũng có một khóa ngoại bao gồm một trường có tên là INSERT INTO book (title, author_id) VALUES ('Necronomicon', 1); ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`test`.`book`, CONSTRAINT `fk_book_author` FOREIGN KEY (`author_id`) REFERENCES `author` (`id`) ON DELETE CASCADE)7, dùng để chỉ khóa chính của INSERT INTO book (title, author_id) VALUES ('Necronomicon', 1); ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`test`.`book`, CONSTRAINT `fk_book_author` FOREIGN KEY (`author_id`) REFERENCES `author` (`id`) ON DELETE CASCADE)3. Tên ràng buộc khóa ngoại là tùy chọn, nhưng chúng tôi sẽ chỉ định nó vì chúng tôi muốn nó xuất hiện trong thông báo lỗi. INSERT INTO book (title, author_id) VALUES ('Necronomicon', 1); ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`test`.`book`, CONSTRAINT `fk_book_author` FOREIGN KEY (`author_id`) REFERENCES `author` (`id`) ON DELETE CASCADE)9 CREATE TABLE author ( id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, name VARCHAR(100) NOT NULL ) ENGINE = InnoDB; CREATE TABLE book ( id MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, title VARCHAR(200) NOT NULL, author_id SMALLINT UNSIGNED NOT NULL, CONSTRAINT `fk_book_author` FOREIGN KEY (author_id) REFERENCES author (id) ON DELETE CASCADE ON UPDATE RESTRICT ) ENGINE = InnoDB; Bây giờ, nếu chúng tôi cố gắng chèn một cuốn sách có tác giả không tồn tại, chúng tôi sẽ gặp lỗi INSERT INTO book (title, author_id) VALUES ('Necronomicon', 1); ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`test`.`book`, CONSTRAINT `fk_book_author` FOREIGN KEY (`author_id`) REFERENCES `author` (`id`) ON DELETE CASCADE) Lỗi rất mô tả Bây giờ, hãy cố gắng chèn đúng hai tác giả và sách của họ INSERT INTO author (name) VALUES ('Abdul Alhazred'); INSERT INTO book (title, author_id) VALUES ('Necronomicon', LAST_INSERT_ID()); INSERT INTO author (name) VALUES ('H.P. Lovecraft'); INSERT INTO book (title, author_id) VALUES ('The call of Cthulhu', LAST_INSERT_ID()), ('The colour out of space', LAST_INSERT_ID()); Nó đã làm việc Bây giờ, hãy xóa tác giả thứ hai. Khi chúng tôi tạo khóa ngoại, chúng tôi đã chỉ định INSERT INTO author (name) VALUES ('Abdul Alhazred'); INSERT INTO book (title, author_id) VALUES ('Necronomicon', LAST_INSERT_ID()); INSERT INTO author (name) VALUES ('H.P. Lovecraft'); INSERT INTO book (title, author_id) VALUES ('The call of Cthulhu', LAST_INSERT_ID()), ('The colour out of space', LAST_INSERT_ID());0. Điều này sẽ tuyên truyền việc xóa và làm cho sách của tác giả bị xóa biến mất DELETE FROM author WHERE name = 'H.P. Lovecraft'; SELECT * FROM book; +----+--------------+-----------+ | id | title | author_id | +----+--------------+-----------+ | 3 | Necronomicon | 1 | +----+--------------+-----------+ Chúng tôi cũng chỉ định INSERT INTO author (name) VALUES ('Abdul Alhazred'); INSERT INTO book (title, author_id) VALUES ('Necronomicon', LAST_INSERT_ID()); INSERT INTO author (name) VALUES ('H.P. Lovecraft'); INSERT INTO book (title, author_id) VALUES ('The call of Cthulhu', LAST_INSERT_ID()), ('The colour out of space', LAST_INSERT_ID());1. Điều này sẽ ngăn chúng tôi sửa đổi INSERT INTO book (title, author_id) VALUES ('Necronomicon', 1); ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`test`.`book`, CONSTRAINT `fk_book_author` FOREIGN KEY (`author_id`) REFERENCES `author` (`id`) ON DELETE CASCADE)5 của tác giả (cột được tham chiếu bởi khóa ngoại) nếu tồn tại một hàng con Làm cách nào để hiển thị khóa ngoại cho bảng trong MySQL?Để xem các mối quan hệ khóa ngoại của một bảng. CHỌN TABLE_NAME, COLUMN_NAME, CONSTRAINT_NAME, REFERENCED_TABLE_NAME, REFERENCED_COLUMN_NAME TỪ THÔNG TIN_SCHEMA. KEY_COLUMN_USAGE WHERE REFERENCED_TABLE_SCHEMA = 'db_name' AND REFERENCED_TABLE_NAME = 'tên_bảng';
Làm cách nào để xem bảng đã tạo trong MySQL?Để sử dụng lệnh SHOW TABLES, trước tiên bạn cần đăng nhập vào máy chủ MySQL. . Khi mở Máy khách dòng lệnh MySQL, hãy nhập mật khẩu của bạn Chọn cơ sở dữ liệu cụ thể Chạy lệnh SHOW TABLES để xem tất cả các bảng trong cơ sở dữ liệu đã được chọn Bạn có thể thêm khóa ngoại sau khi tạo bảng trong MySQL không?Đôi khi cần thêm khóa ngoại vào cột của bảng hiện có; . Sau đây là cú pháp của câu lệnh ALTER TABLE để thêm khóa ngoại vào bảng hiện có. ALTER TABLE table_name . |